易语言调用线程EIP注入卸载DLL

易语言 2020-08-19 16:59:27

易语言调用线程EIP注入卸载DLL

局部_寄存器.标记 = 65543
GetThreadContext (局部_线程句柄, 局部_寄存器)
局部_临时EIP = 局部_寄存器.eip
局部_临时地址 = GetProcAddress (GetModuleHandle (“Kernel32.dll”), “GetModuleHandleA”) ' 获取API函数GetModuleHandleA的地址
局部_汇编代码 = { 104, 51, 51, 51, 51 } ' push DLL路径地址 这里暂时用 {51, 51, 51, 51}代替 后面进行替换。
局部_汇编代码 = 局部_汇编代码 + { 199, 192 } + 到字节集 (局部_临时地址) ' mov eax,Kernel32.GetModuleHandleA
局部_汇编代码 = 局部_汇编代码 + { 255, 208 } ' call eax 调用GetModuleHandleA获取目标DLL的模块句柄并保存于EAX中
局部_临时地址 = GetProcAddress (GetModuleHandle (“Kernel32.dll”), “FreeLibrary”) ' 获取API函数FreeLibrary的地址
局部_汇编代码 = 局部_汇编代码 + { 80 } ' push eax 把DLL的模块句柄作为参数压入堆栈
局部_汇编代码 = 局部_汇编代码 + { 199, 192 } + 到字节集 (局部_临时地址) ' mov eax,Kernel32.FreeLibrary
局部_汇编代码 = 局部_汇编代码 + { 255, 208 } ' call eax 调用FreeLibrary卸载指定DLL
局部_汇编代码 = 局部_汇编代码 + { 104, 0, 128, 0, 0, 104, 0, 0, 0, 0, 104 } + 到字节集 (局部_远程地址)
局部_汇编代码 = 局部_汇编代码 + { 104 } + 到字节集 (局部_临时EIP)
局部_临时地址 = GetProcAddress (GetModuleHandle (“kernel32.dll”), “VirtualFree”)
局部_汇编代码 = 局部_汇编代码 + { 233 } + 到字节集 (到整数 (局部_临时地址 - (局部_远程地址 + 取字节集长度 (局部_汇编代码)) - 5))
局部_汇编代码 = 局部_汇编代码 + { 195 }
局部_临时地址 = 局部_远程地址 + 取字节集长度 (局部_汇编代码)
局部_汇编代码 = 局部_汇编代码 + 到字节集 (参数_DLL路径) + { 0 }
局部_汇编代码 = 子字节集替换 (局部_汇编代码, { 51, 51, 51, 51 }, 到字节集 (局部_临时地址), , )
' 调试输出 (局部_汇编代码)
WriteProcessMemoryBin (局部_进程句柄, 局部_远程地址, 局部_汇编代码, 取字节集长度 (局部_汇编代码), 0)
关闭内核对象_ (局部_进程句柄)
局部_寄存器.eip = 局部_远程地址
SetThreadContext (局部_线程句柄, 局部_寄存器)
' 信息框 (取十六进制文本 (局部_远程地址), 0, )
ResumeThread (局部_线程句柄)
关闭内核对象_ (局部_线程句柄)