X86逆向教程13:向程序中插入Dll

本文介绍Dll注入技巧,将动态链接库插入目标程序,让其运行后直接执行。可编写特殊功能的Dll文件,通过LoadLibraryA函数动态加载。还详细说明了编写Dll、查找函数偏移地址、载入程序、写加载dll代码片段等一系列实现步骤。

本章我们将学习Dll的注入技巧,我们将把一个动态链接库永久的插入到目标程序中,让程序在运行后直接执行这个Dll文件,这一章的内容也可以看作是第八课的加强篇,第八课中我们向程序中插入了一个弹窗,有木有发现一个问题?单单是一个弹窗我们就需要经历这么多的步骤,那如果你要调用几十个API函数估计早就疯透了,这里我们其实可以直接编写一些能够完成特殊功能的Dll文件,然后让程序通过LoadLibraryA函数动态的加载执行,LoadLibrary这个函数是在Kernel32.dll这个库中保存的,庆幸的是这个动态链接库99%的程序都必须加载,这就为我们动态加载Dll提供了有效的支持。

------------------------------------------------------------
本章难度:★★★★★☆☆☆☆☆
课程课件:CM_13.zip
------------------------------------------------------------

1.首先我们需要编写一个Dll动态链接库,其内部的内容就自由发挥吧,比如写一个后门下载程序,哈哈。这里我就用易语言写一个简单的弹窗,然后让Dll只要被加载就默认执行。

代码很简单,我们直接编译生成一个动态链接库,这里我就生成一个名叫【lyshark.dll】的动态链接库文件啦,当然你也可以用C/C++或Win32汇编来写这个Dll,都可。

 

2.接下来我们就找到【CM_01.exe】直接用【Stud_PE工具】打开,找到kernel模块中的【LoadLibraryA】这个函数,并记录下它的偏移地址【000812AC】。

 

3.OD直接载入【CM_01.exe】,然后按下【Alt+E】,看程序的基地址是多少,嗯!此处是【00400000】,加上【000812AC】就等于【004812AC】,记下这个相加的结果。

 

4.然后去数据窗口,按下【Ctrl + G】,输入刚才的地址【004812AC】,然后会看到有一段地址【7C801D7B】,这里我们记下这个地址,这个地址就是程序加载动态链接库的函数地址。

 

5.去反汇编窗口,按下【Ctrl + B】输入一大堆0,这里任意输入即可,目的是跳转到一片空旷的区域中去。

 

6.然后开始写加载dll的代码片段,最后的代码格式如下所示,这里的push地址先暂时用【00401000】代替,然后我们记下入口地址【0048011C】。

 

7.回到OD点击EIP地址,回到程序的OEP位置,去到这个程序的段首,然后我们记下以下几条汇编指令。

此处我们暂时先用NOP指令填充,防止后期写代码时会乱。

 

8.然后在NOP的最上方写上一条JMP指令,跳转到我们刚才布局好的代码位置处。

 

 

10.然后在popad指令的下方接着写上刚才我们填充NOP的那些指令,保证程序完整性。

 

11.在最下方写上跳转到【push 00460FEB】的无条件跳转指令。

 

12.最后在下方写上dll的名字,并记下地址【0048013A】

 

13.替换上方字符串,最后代码如下。

 

到此我们直接保存全部修改内容就好了,然后我们运行修改后的程序,程序会弹出我们的窗体,然后才会加载原来的窗体

 

写教程不容易,转载请加出处,您添加出处,是我创作的动力!

转载于:https://www.cnblogs.com/LyShark/p/11187376.html

VS2013(vc12)编译的OpenCV3.2.0,Release版本,x86和x64 动态库和lib文件。 单一文件编译 opencv_world320.lib 不包含扩展模块 压缩包文件列表 \vc12 的目录 2018/12/07 11:39 . 2018/12/07 11:39 .. 2018/12/07 11:38 dll 2018/12/07 11:38 include 2018/12/07 11:38 lib 0 个文件 0 字节 \vc12\dll 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 x64 2018/12/07 11:38 x86 0 个文件 0 字节 \vc12\dll\x64 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\dll\x64\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 13:20 17,397,760 opencv_ffmpeg320_64.dll 2018/11/22 13:20 43,249,664 opencv_world320.dll 2 个文件 60,647,424 字节 \vc12\dll\x86 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\dll\x86\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 10:45 16,480,768 opencv_ffmpeg320.dll 2018/11/22 10:45 35,699,200 opencv_world320.dll 2 个文件 52,179,968 字节 \vc12\include 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 opencv 2018/12/07 11:38 opencv2 0 个文件 0 字节 \vc12\include\opencv 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2016/12/21 18:37 3,226 cv.h 2016/12/21 18:37 2,709 cv.hpp 2016/12/21 18:37 2,580 cvaux.h 2016/12/21 18:37 2,426 cvaux.hpp 2016/12/21 18:37 2,222 cvwimage.h 2016/12/21 18:37 2,476 cxcore.h 2016/12/21 18:37 2,496 cxcore.hpp 2016/12/21 18:37 2,305 cxeigen.hpp 2016/12/21 18:37 137 cxmisc.h 2016/12/21 18:37 2,274 highgui.h 2016/12/21 18:37 2,192 ml.h 11 个文件 25,043 字节 \vc12\include\opencv2 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2016/12/21 18:37 4,582 opencv.hpp 1 个文件 4,582 字节 \vc12\lib 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 x64 2018/12/07 11:38 x86 0 个文件 0 字节 \vc12\lib\x64 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\lib\x64\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 13:21 14,772,142 opencv_ts320.lib 2018/11/22 13:20 1,813,572 opencv_world320.lib 2 个文件 16,585,714 字节 \vc12\lib\x86 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/12/07 11:38 Release 0 个文件 0 字节 \vc12\lib\x86\Release 的目录 2018/12/07 11:38 . 2018/12/07 11:38 .. 2018/11/22 10:45 11,947,150 opencv_ts320.lib 2018/11/22 10:45 1,778,850 opencv_world320.lib 2 个文件 13,726,000 字节 所列文件总数: 23 个文件 143,169,073 字节 44 个目录 768,389,644,288 可用字节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值