DLL补丁劫持制作
DLL:
由于输入表中只包含 DLL 名而没有它的路径名,因此加载程序必须在磁盘上搜索 DLL 文件。首先会尝试从当前程序所在的目录加载 DLL,如果没找到,则在Windows 系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的 DLL,提供同样的输出表,每个输出函数转向真正的系统 DLL。程序调用系统 DLL 时会先调用当前目录下伪造的 DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统 DLL 被劫持(hijack)了。
利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dll、ntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll、游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll、sxs.dll,这些DLL都可被劫持。
伪造的 dll 制作好后,放到程序当前目录下,这样当原程序调用原函数时就调用了伪造的dll的同名函数,进入劫持DLL的代码,处理完毕后,再调用原DLL此函数。
案例软件也是从某个破解论坛上找的,算是拿着做课后练习,边学边记录.
0x01
OD
PYG-优雅DLL劫持补丁制作工具
0x02
这个软件是比较低的版本,跟现在升级之后的网络验证有很多不同,本篇是讲的DLL补丁劫持
0x03
PEID查壳

无壳,C++编写的,不用在意字符串找不到的问题
0x04
载入OD,CTRL+G,到401000

因为之前没有加壳,80%的可能是可以查找到字符串的

来到最上边,找到到期时间双击到代码处,我们就干掉试用时间,达到长久试用的效果
00401291 |. /0F85 2B010000jnz 2.004013C2
00401297 |. |68 40726A00 push 2.006A7240
0040129C |. |8B0424 mov eax, dword ptr ss:[esp]
0040129F |. |8B00 mov eax, dword ptr ds:[eax]
004012A1 |. |8B00 mov eax, dword ptr ds:[eax]
004012A3 |. |FF90 88000000call dword ptr ds:[eax+0x88]
004012A9 |. |8945 F8 mov [local.2], eax
004012AC |. |837D F8 01 cmp [local.2], 0x1
004012B0 |. |0F85 D7000000jnz 2.0040138D
004012B6 |. |68 40726A00 push 2.006A7240
004012BB |. |8B0424 mov eax, dword ptr ss:[esp]
004012BE |. |8B00 mov eax, dword ptr ds:[eax]
004012C0 |. |8B00 mov eax, dword ptr ds:[eax]
004012C2 |. |FF50 28 call dword ptr ds:[eax+0x28]
004012C5 |. |8945 FC mov [local.1], eax
004012C8 |. |FF75 FC push [local.1]
004012CB |. |68 7E844700 push 2.0047847E ; 到期时间:
004012D0 |. |B9 02000000 mov ecx, 0x2
004012D5 |. |E8 AAFEFFFF call 2.00401184
004012DA |. |83C4 08 add esp, 0x8
004012DD |. |8945 F8 mov [local.2], eax
004012E0 |. |8B5D FC mov ebx, [local.1]
004012E3 |. |85DB test ebx, ebx
004012E5 |. |74 09 je short 2.004012F0
004012E7 |. |53 push ebx
004012E8 |. |E8 156F0000 call 2.00408202
004012ED |. |83C4 04 add esp, 0x4
004012F0 |> |6A 00 push 0x0
004012F2 |. |6A 00 push 0x0
004012F4 |. |6A 00 push 0x0
004012F6 |. |68 01030080 push 0x80000301
004012FB |. |6A 00 push 0x0
004012FD |. |68 00000000 push 0x0
00401302 |. |68 04000080 push 0x80000004
00401307 |. |6A 00 push 0x0
00401309 |. |8B45 F8 mov eax, [local.2]
0040130C |. |85C0 test eax, eax
0040130E |. |75 05 jnz short 2.00401315
00401310 |. |B8 79844700 mov eax, 2.00478479
00401315 |> |50 push eax
00401316 |. |68 03000000 push 0x3
0040131B |. |BB 608D4000 mov ebx, 2.00408D60
00401320 |. |E8 E36E0000 call 2.00408208
00401325 |. |83C4 28 add esp, 0x28
00401328 |. |8B5D F8 mov ebx, [local.2]
0040132B |. |85DB test ebx, ebx
0040132D |. |74 09 je short 2.00401338
0040132F |. |53 push ebx
00401330 |. |E8 CD6E0000 call 2.00408202
00401335 |. |83C4 04 add esp, 0x4
00401338 |> |6A 00 push 0x0
0040133A |. |68 00000000 push 0x0
0040133F |. |6A FF push -0x1
00401341 |. |6A 05 push 0x5
00401343 |. |68 00000106 push 0x6010000
00401348 |. |68 01000152 push 0x52010001
0040134D |. |E8 DA6E0000 call 2.0040822C
00401352 |. |83C4 18 add esp, 0x18
00401355 |. |68 02000080 push 0x80000002
0040135A |. |6A 00 push 0x0
0040135C |. |68 01000000 push 0x1
00401361 |. |6A 00 push 0x0
00401363 |. |6A 00 push 0x0
00401365 |. |6A 00 push 0x0
00401367 |. |68 01000100 push0x10001
0040136C |. |68 A3000106 push 0x60100A3
00401371 |. |68 A4000152 push 0x520100A4
00401376 |. |68 03000000 push 0x3
0040137B |. |BB C0854000 mov ebx, 2.004085C0
00401380 |. |E8 836E0000 call 2.00408208
00401385 |. |83C4 28 add esp, 0x28
00401388 |. |E9 30000000 jmp 2.004013BD
0040138D |> \6A 00 push 0x0
0040138F |. 6A 00 push 0x0
00401391 |. 6A 00 push 0x0
00401393 |. 68 01030080 push 0x80000301
00401398 |. 6A 00 push 0x0
0040139A |. 68 00000000 push 0x0
0040139F |. 68 04000080 push 0x80000004
004013A4 |. 6A 00 push 0x0
004013A6 |. 68 89844700 push 2.00478489 ; 登录失败
004013AB |. 68 03000000 push 0x3
004013B0 |. BB 608D4000 mov ebx, 2.00408D60
004013B5 |. E8 4E6E0000 call 2.00408208
004013BA |. 83C4 28 add esp, 0x28
004013BD |> E9 5D000000 jmp 2.0040141F
004013C2 |> 68 40726A00 push 2.006A7240
0x05
注意看代码,

“到期时间”往上找到一处跳转,然后再往上,还有一处跳转,跳过下面这一个
但是第一个跳转是跳过登陆失败,第二个是跳过试用时间
00401291 |. /0F85 2B010000jnz 2.004013C2
004012B0 |. /0F85 D7000000jnz 2.0040138D
我们可以修改jnz为jmp或者用00 填充,nop填充
00401291 90 nop
00401292 90 nop
00401293 90 nop
00401294 90 nop
00401295 90 nop
00401296 90 nop
004012B0 90 nop
004012B1 90 nop
004012B2 90 nop
004012B3 90 nop
004012B4 90 nop
004012B5 90 nop
0x06
之后搜索二进制字符串FF25

查找易语言体

为什么来到这,因为我们要找程序的开头也就是入口点
每个jmp回车找一下push ebp
这个地方我也不懂,摆渡的解释是这样的
子程序如何存取参数,因为缺省对堆栈操作的寄存器有 ESP 和 EBP,而 ESP是堆栈指针,无法暂借使用,所以一般使用 EBP 来存取堆栈,假定在一个调用中有两个参数,而且在 push 第一个参数前的堆栈指针 ESP 为 X,那么压入两个参数后的 ESP 为 X-8,程序开始执行 call 指令,call 指令把返回地址压入堆栈,这时候 ESP 为 X-C,这时已经在子程序中了,我们可以开始使用 EBP 来存取参数了,但为了在返回时恢复 EBP 的值,我们还是再需要一句 push ebp 来先保存 EBP 的值,这时 ESP 为 X-10,再执行一句 mov ebp,esp,根据右图可以看出,实际上这时候 [ebp + 8] 就是参数1,[ebp + c]就是参数2。
0x07
看的我一连mengbi,找到倒数第五个jmp进去
00424F70 /. 55 push ebp
00424F71 |. 8BEC mov ebp, esp
00424F73 |. 8B45 08 mov eax, [arg.1]
00424F76 |. 50 push eax
00424F77 |. 8B4D 08 mov ecx, [arg.1]
00424F7A |. 8B148D B89269>mov edx, dword ptr ds:[ecx*4+0x6992B8]
00424F81 |. 52 push edx
00424F82 |. B9 90336B00 mov ecx, 2.006B3390
00424F87 |. E8 847EFFFF call 2.0041CE10
00424F8C |. 5D pop ebp
00424F8D \. C3 retn[align=left]
这地方应该是一个特征,我们把它retn就好了
00424F70 /. 55 push ebp
改为
00424F70 C3 retn
把所有关键地方找到之后,开始打补丁制作工具对照之前修改的地方
0x08

然后生成DLL补丁


放在同文件目录下运行软件

点登陆,进去,完事说明:我也是个菜鸡,也是最近在学的破解,文中的软件是借用其他大牛的,我只是做个课后记录,把学习中遇到的问题记录下来,没有其他意思.
DLL补丁劫持制作的更多相关文章
- X86逆向12:内存补丁的制作
本章我们将学习各种打补丁的方式,补丁在软件的破解过程中非常的重要,比如软件无法脱壳我们就只能通过打补丁的方式来破解程序,补丁原理就是当程序运行起来会被释放到内存并解码,然后补丁就通过地址或特征码定位到 ...
- dll劫持技术
DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中. DLL劫持原理 ...
- 老树开新花:DLL劫持漏洞新玩法
本文原创作者:丝绸之路 <img src="http://image.3001.net/images/20150921/14428044502635.jpg!small" t ...
- DLL劫持学习及复现
0x01 dll简介 在Windows系统中,为了节省内存和实现代码重用,微软在Windows操作系统中实现了一种共享函数库的方式.这就是DLL(Dynamic Link Library),即动态链接 ...
- DLL另類劫持注入法
// Win32Project2.cpp : 定义 DLL 应用程序的导出函数. // //////////////////////////////////////////////////////// ...
- Dll劫持漏洞详解
一.dll的定义 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分 ...
- 36.浅谈DLL劫持
最近在搞内网,需要实现免杀后门,大佬推荐了dll劫持,DLL劫持后,能干很多事情,比如杀软对某些厂商的软件是实行白名单的,你干些敏感操作都是不拦截,不提示的.还有留后门,提权等等.本文主要介绍如何检测 ...
- SVN与TortoiseSVN实战:补丁详解
硬广:<SVN与TortoiseSVN实战>系列已经写了五篇,第二篇<SVN与TortoiseSVN实战:标签与分支>和第三篇<SVN与TortoiseSVN实战:Tor ...
- [Windows] Adobe Photoshop CC 2015官方原版下载 附破解补丁&破解教程
Photoshop自CS6以后改为CC,目前Photoshop CC 2015是最新版,发布日期为2015年6月. <ignore_js_op> 下载安装主程序: 主程序及补丁下载地址 ...
随机推荐
- 创建Flask实例对象时的参数和app.run()中的参数
app=Flask(name,static_folder=“static”,static_url_path="/aaa",template_folder=“templates”) ...
- ReactiveX 学习笔记(21)使用 Rx.NET + ReactiveUI 进行 GUI 编程
课题 程序界面由3个文本编辑框和1个文本标签组成. 要求文本标签实时显示3个文本编辑框所输入的数字之和. 文本编辑框输入的不是合法数字时,将其值视为0. 3个文本编辑框的初值分别为1,2,3. 创建工 ...
- 连接mysql报错Access denied for user 'root'@'localhost' (using password: YES)解决办法
1.打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”(免密码登录),保存并关闭文件,重启MySQL服务. 2.通过命令行进入MySQL的BIN目录,输 ...
- MySQL统计信息以及执行计划预估方式初探
数据库中的统计信息在不同(精确)程度上描述了表中数据的分布情况,执行计划通过统计信息获取符合查询条件的数据大小(行数),来指导执行计划的生成.在以Oracle和SQLServer为代表的商业数据库,和 ...
- springBoot拦截器的使用
拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可 ...
- java.io.Flushable 接口
package java.io; import java.io.IOException; /** * 在什么情况下用呢? 缓冲输出到一个流中的情况下,这个流要刷新. */ public interfa ...
- kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和
= 参考/转自: 1 ---https://blog.csdn.net/u010720661/article/details/63253509 2----http://www.bzarg.com/p/ ...
- Python代码的人机大战(循环嵌套)
第一次动手写随笔,记录一下今早的1.5小时努力成果 题目是这样的 : 人和机器进行猜拳游戏写成一个类,首先选择角色:1 曹操 2张飞 3 刘备,然后选择的角色进行猜拳:1剪刀 2石头 3布 玩家输入一 ...
- jQuery的appendTo案例
案例要求:点击双击第一个下拉列表框的选项可以把对应选项移到第二个下拉列表框中,选中第一个列表框的选项(可多选)单击-->按钮可使被选中项移动到右边下拉列表框中,单击==>按钮时将左边的所有 ...
- DBHelper类
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import ja ...