一、dll注入和代码注入的区别
1.首先字面意思,前者将整个包含攻击函数的dll注入到其他进程中去,后者直接注入可独立运行的代码,也被称为线程注入。
dll注入:将攻击函数包含在dll中,加载dll则会执行,然后用VirtualAllocEx给目标进程分配空间,WriteProcessMemory写入该dll,并用LoadLibarary加载kernal32,然后用GetProcAddress得到LoadLibarary的地址,最后创建一个远程线程,执行LoadLibarary加载dll。
代码注入:编写可独立运行的汇编代码(函数)存为0x格式的数组,再编写Injection.exe创建远程线程使目标进程执行汇编代码编写的函数;由于汇编函数需独立运行,所以其中关键的LoadLibaray和GetProcAddress的地址需要由Injection.exe以参数的形式传入。
2.前者适用于代码量较多且复杂的情况;后者适用于代码量较少且简单的情况,并且占用内存少,更不易被察觉。
二、代码注入实例
0.目的:在notepad.exe中弹出一个对话框
1.在ollydbg中书写汇编代码,借由ollydbg得到该汇编代码的机器码
2.编写Injection.cpp