易语言dll注入源码如下:
“`易语言
.版本 2
.子程序 应用程序入口, 整数型
.局部变量 hProcess, 整数型
.局部变量 pID, 整数型
.局部变量 szDllPath, 文本型
.局部变量 hThread, 整数型
.局部变量 hKernel32, 整数型
.局部变量 hLoadLibraryA, 整数型
.局部变量 hRemoteString, 整数型
.局部变量 hRemoteBuffer, 整数型
.局部变量 dwWritten, 整数型
pID = 取进程ID("notepad.exe") ‘替换为你想要注入的进程名
hProcess = 打开进程(pID)
hKernel32 = 获取模块句柄("kernel32.dll")
hLoadLibraryA = 获取函数地址(hKernel32, "LoadLibraryA")
szDllPath = "C:WindowsSystem32user32.dll" ‘替换为你想要注入的dll路径
hRemoteString = 分配内存(hProcess, 取文本长度(szDllPath) + 1)
写入内存(hProcess, hRemoteString, szDllPath)
hThread = 创建远程线程(hProcess, 0, 0, hLoadLibraryA, hRemoteString, 0, 0)
等待线程结束(hThread)
释放内存(hProcess, hRemoteString)
关闭句柄(hProcess)
返回 0
.子程序结束
.子程序 取进程ID, 整数型, 参数 szProcessName, 文本型
.局部变量 hSnapshot, 整数型
.局部变量 pe32, PROCESSENTRY32结构
.局部变量 bRet, 布尔型
hSnapshot = 创建快照(TH32CS_SNAPPROCESS, 0)
pe32.dwSize = 大小of(PROCESSENTRY32)
bRet = 进程快照遍历(hSnapshot, &pe32)
当 bRet = 真时
pe32.szExeFile = szProcessName Then
返回 pe32.th32ProcessID
否则
bRet = 进程快照遍历(hSnapshot, &pe32)
结束如果
循环直到 bRet = 假
返回 0
.子程序结束
.子程序 打开进程, 整数型, 参数 dwProcessId, 整数型
返回 OpenProcess(PROCESS_ALL_ACCESS, 假, dwProcessId)
.子程序结束
.子程序 获取模块句柄, 整数型, 参数 szModuleName, 文本型
.局部变量 hSnapshot, 整数型
.局部变量 me32, MODULEENTRY32结构
.局部变量 bRet, 布尔型
.局部变量 hProcess, 整数型
.局部变量 hModule, 整数型
hSnapshot = 创建快照(TH32CS_SNAPMODULE, 取进程ID("explorer.exe")) ‘替换为当前进程名,用于获取模块句柄
me32.dwSize = 大小of(MODULEENTRY32)
bRet = 模块快照遍历(hSnapshot, &me32)
当 bRet = 真时
me32.szModule = szModuleName Then
hModule = me32.hModule
否则
bRet = 模块快照遍历(hSnapshot, &me32)
结束如果
循环直到 bRet = 假
CloseHandle(hSnapshot)
返回 hModule
.子程序结束
.子程序 获取函数地址, 整数型, 参数 hModule, 整数型, 参数 szFunctionName, 文本型
.局部变量 hProcMgr, 整数型
.局部变量 hGetProcAddress, 整数型
.局部变量 hUser32, 整数型
.局部变量 hRemoteString, 整数型
.局部变量 hRemoteBuffer, 整数型
.局部变量 dwWritten, 整数型
hProcMgr = GetModuleHandle("Psapi.dll")
hGetProcAddress = GetProcAddress(hProcMgr, "GetProcAddress")
hUser32 = GetModuleHandle("user32.dll")
hRemoteString = 分配内存(hProcess, 取文本长度(szFunctionName) + 1)
写入内存(hProcess, hRemoteString, szFunctionName)
hThread = 创建远程线程(hProcess, 0, 0, hGetProcAddress, hUser32, hRemoteString, 0)
等待线程结束(hThread)
hRemoteBuffer = 读取内存(hProcess, hRemoteString)
dwWritten = ReadProcessMemory(hProcess, hRemoteBuffer, @hRemoteBuffer, sizeof(hRemoteBuffer), NULL)
释放内存(hProcess, hRemoteString)
CloseHandle(hThread)
返回 hRemoteBuffer
.子程序结束
.子程序 创建远程线程, 整数型, 参数 hProcess, 整数型, 参数 dwDesiredAccess, 整数型, 参数 dwThreadId, 整数型, 参数 hFunction, 整数型, 参数 hParameter, 整数型, 参数 dwCreationFlags, 整数型, 参数 dwStackSize, 整数型
.局部变量 hThread, 整数型
.局部变量 dwThreadId, 整数型
hThread = CreateRemoteThread(hProcess, NULL, dwStackSize, hFunction, hParameter, dwCreationFlags, @dwThreadId)
返回 hThread
.子程序结束
.子程序 等待线程结束, 整数型, 参数 hThread, 整数型
WaitForSingleObject(hThread, INFINITE)
End Subroutine
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1080742.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复