2. 找到目标进程的入口,用ImageHlp中的函数可以实现。
3. 将目标进程入口的代码保存起来。
4. 在目标进程的入口写入LoadLibrary(MyDll)实现Dll的注入。
5. 用ResumeThread运行目标进程。
6. 目标进程就运行了LoadLibrary(MyDll),实现DLL的注入。
7. 目标进程运行完LoadLibrary(MyDll)后,将原来的代码写回目标进程的入口。
8. 目标进程Jmp至原来的入口,继续运行程序。
从原理上可以看出,DLL的注入在目标进程的开始就运行了,而且不是用Debug的方案,这样,就没有上面方案的局限性了。该方案的关键在6,7,8三步,实现方法需要监视进程和DLL合作。下面,结合代码进行分析。
在监视进程中,创建FileMapping,用来保存目标进程的入口代码,同时保证DLL中可以访问。在第7步实现将原目标代码写回目标进程的入口。
OD中有一个专门用来调试DLL文件的程序:loaddll.exe。当你把DLL文件拖入OD的时候,OD会自动询问你是否要用这个程序来调试DLL文件,点击确定。完成后会有一个蓝框的小窗口。但是在这个时候,DLL文件已经被加载进去了,也就是说已经被脱壳并且重定位的 *** 作也已经完成了 。这就很头疼了。我们必须得让程序停在壳的入口处,那么我们就在它加载完后看看,按下 Alt+M或者鼠标点击OD那个小框框的M按钮。找到这个DLL文件,可以看到最下面那个节就是多出来的节,也就是壳所在位置,从这里可以得出壳入口偏移为D000。
首先这不是注入DLL,这是导入DLL函数进PE文件,这个过程需要一个工具LordPE,网上都有可以自己去下载。
我们知道一旦DLL函数被导入EXE文件的输入表,则EXE文件启动时会自动执行一遍该DLL的_启动子程序 函数,所以我们可以把需要执行的指令放在该函数里面,然后记得在该函数的 公开 选项打上勾,然后编译。
接下来,我们打开LordPE,如下图
然后在d出的对话框中选择要导入DLL函数的程序然后点击新d出的窗口的目录,如下图
然后点 输入表 右边的 标题是 ...的按钮(截不了图了)
然后随便选择一项数据,右键,如下图
在d出的窗口中填写DLL名,及API名(填_启动子程序)就可以了,然后点一下 + 按钮
如果d出一个信息框,点 是 就可以,添加完成之后点 确定 ,然后一路保存就可以了,不过发布程序的时候记得带上那个DLL,不懂追问
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)