逆向学习-DLL注入

DLL注入技术,可以实现钩取API,改进程序,修复Bug。

DLL注入指的是向运行中的其他进程强制插入特定的DLL文件。

DLL注入命令进程自行调用LoadLibrary()API,加载用户指定的DLL文件。

DLL(Dynamic Linked Library,动态链接库)

  DLL被加载到进程后自动运行DllMain()函数,用户把想执行的代码放到此函数,加载DLL时,代码会被执行。

DLL注入的实现方法

  创建远程线程(CreateRemoteThread()API)

  使用注册表(AppInit_DLLs值)

  消息钩取(SetWindowsHookEx()API)

 

 CreateRemoteThread远程线程注入,直接使用注入程序将dll注入到notepad中。使用OD的attach功能,和调试事件,中断于新模块载入。

使用注册表注入,winxp 32位我是不成功的,下载了vista 32 位玩了一下, DLL字符串路径写入AppInit_DLLs的值,将LoadAppInit_DLLs的值改为1,即可注入。

注册表的位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows  修改后需要重启电脑。

DLL卸载

  加载DLL是驱使目标调用LoadLibrary()API

  卸载DLL是驱使目标调用FreeLibrary()API

通过修改PE加载DLL

  IMAGE_OPTIONAL_HEADER 的 IMPORT TABLE 即为 IDT,修改RVA及内存大小。

  修改导入表RVA的值。

  删除绑定导入表(BOUND IMPORT TABLE )将值改为0即可。

  复制原有IDT到新IDT地址。

  添加新的IID结构。(IID结构我是手写不出来的,我也记不住,需要的时候查一下就OK了)。

  主要就是INT  NAME  IAT

  如果添加的IAT在IMAGE_OPTIONAL_HEADER 的IAT区域内,就不需要修改权限,否则,必须赋予添加的IAT的写入权限。

PE TOOLS

  主要功能,转储和修改PE头,我都不熟练0.0.0.

代码注入

  占用内存少,难以查找,适用于代码量小,简单。

  使用了OD的中断于新线程事件。

  主要就是分析注入代码,没什么好写的,代码分析在我的另一篇博客 代码注入。

汇编语言编写注入代码

  OD汇编,分析代码功能,编辑字符串,Long->Address功能。

  有意思的是,CALL指令的动作原理,CALL可以实现PUSH加JMP。

  还有栈帧的使用。

 

  

posted @ 2019-04-30 22:26  s1lenc3  阅读(826)  评论(0编辑  收藏  举报