逆向学习-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。
还有栈帧的使用。