吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 37644|回复: 177

[原创逆向图文] 对一个重定位重启验证进行SMC爆破+追码

  [复制链接]
Shy 发表于 2016-7-27 13:03 | 显示全部楼层 |阅读模式

本教程由热情洋溢的木木不哭赞助播出(“哎呀我摔倒了要漂亮姐姐亲亲才能起来”)

逆向前言:这个程序其实有点意思,,,注册码存放于一个dll后缀名却非dll文件里面,而且虽然本身加壳是upx,但是脱完却有重定位,所以正好可以试试SMC
SMC(Self Modifying Code):自修改代码,应用于不脱壳逆向,,,(从别人帖子复制的)

逆向正文:
首先我们需要确定一下这个程序的爆破点对不对?因为这个程序有提示框,所以我们下MessageBox的函数断点,一般来说易语言是断MessageBoxA,
但是这个是Delphi的,所以我们把所有跟MessageBox有关的信息框断点都断下来就行了,,
游客,如果您要查看本帖隐藏内容请回复

断下以后进这里
004B35F4    E8 6B19F5FF     call 00404F64                            ; 再进这里
然后再进

[Asm] 纯文本查看 复制代码
00404E38    53              push ebx                                 ; 刚刚那个call进去以后就单步到此处
00404E39    56              push esi
00404E3A    57              push edi
00404E3B    55              push ebp
00404E3C    81C4 04F0FFFF   add esp, -0xFFC
00404E42    50              push eax
00404E43    83C4 FC         add esp, -0x4
00404E46    8BF1            mov esi, ecx
00404E48    891424          mov dword ptr [esp], edx
00404E4B    8BF8            mov edi, eax
00404E4D    85F6            test esi, esi
00404E4F    7F 09           jg short 00404E5A
00404E51    8BC7            mov eax, edi
00404E53    E8 84FEFFFF     call 00404CDC
00404E58    EB 5F           jmp short 00404EB9
00404E5A    8D6E 01         lea ebp, dword ptr [esi+0x1]
00404E5D    81FD FF070000   cmp ebp, 0x7FF
00404E63    7D 28           jge short 00404E8D
00404E65    56              push esi
00404E66    8D4424 08       lea eax, dword ptr [esp+0x8]
00404E6A    8B4C24 04       mov ecx, dword ptr [esp+0x4]
00404E6E    BA FF0F0000     mov edx, 0xFFF
00404E73    E8 84FFFFFF     call 00404DFC
00404E78    8BD8            mov ebx, eax
00404E7A    85DB            test ebx, ebx
00404E7C    7C 0F           jl short 00404E8D
00404E7E    8D5424 04       lea edx, dword ptr [esp+0x4]
00404E82    8BC7            mov eax, edi
00404E84    8BCB            mov ecx, ebx
00404E86    E8 41FFFFFF     call 00404DCC                            ; 再到这



最后到上面这个00404E86 这句代码的时候
单步到此处
[Asm] 纯文本查看 复制代码
00404DCC    53              push ebx
00404DCD    56              push esi
00404DCE    57              push edi
00404DCF    89C3            mov ebx, eax
00404DD1    89D6            mov esi, edx
00404DD3    89CF            mov edi, ecx
00404DD5    89F8            mov eax, edi
00404DD7    E8 C4FFFFFF     call 00404DA0
00404DDC    89F9            mov ecx, edi                             ; 此时eax的值为将要写入读取的机器码的值
00404DDE    89C7            mov edi, eax
00404DE0    85F6            test esi, esi
00404DE2    74 09           je short 00404DED
00404DE4    89C2            mov edx, eax
00404DE6    89F0            mov eax, esi
00404DE8    E8 5BDCFFFF     call 00402A48                            ; 假注册码写入中
00404DED    89D8            mov eax, ebx
00404DEF    E8 E8FEFFFF     call 00404CDC
00404DF4    893B            mov dword ptr [ebx], edi
00404DF6    5F              pop edi
00404DF7    5E              pop esi
00404DF8    5B              pop ebx
00404DF9    C3              retn


这里就是一个假注册码读取并存放到内存当中的地方
固定值为,1C700C 我们只需要在这个地址下读取断点就可以了(时机为软件完全运行起来,并在将要点击软件注册之前,否则时机不对浪费大量时间)
然后返回到此处
9.jpg
算法具体分析:此时我的注册码为1234567890
[Asm] 纯文本查看 复制代码
004050E8    53              push ebx
004050E9    56              push esi
004050EA    57              push edi
004050EB    89C6            mov esi, eax
004050ED    89D7            mov edi, edx
004050EF    39D0            cmp eax, edx
004050F1    0F84 8F000000   je 00405186
004050F7    85F6            test esi, esi
004050F9    74 68           je short 00405163
004050FB    85FF            test edi, edi
004050FD    74 6B           je short 0040516A
004050FF    8B46 FC         mov eax, dword ptr [esi-0x4]             ; 假注册码位数
00405102    8B57 FC         mov edx, dword ptr [edi-0x4]             ; 真注册码位数
00405105    29D0            sub eax, edx                             ; 真码位数-假码位数
00405107    77 02           ja short 0040510B                        ; 结果要为0
00405109    01C2            add edx, eax                             ; eax+edx
0040510B    52              push edx
0040510C    C1EA 02         shr edx, 0x2
0040510F    74 26           je short 00405137
00405111    8B0E            mov ecx, dword ptr [esi]                 ; 4321
00405113    8B1F            mov ebx, dword ptr [edi]                 ; 0535
00405115    39D9            cmp ecx, ebx                             ; 对比是否相等
00405117    75 58           jnz short 00405171
00405119    4A              dec edx
0040511A    74 15           je short 00405131
0040511C    8B4E 04         mov ecx, dword ptr [esi+0x4]             ; 8765
0040511F    8B5F 04         mov ebx, dword ptr [edi+0x4]             ; 8810
00405122    39D9            cmp ecx, ebx
00405124    75 4B           jnz short 00405171                       ; 对比是否相等
00405126    83C6 08         add esi, 0x8
00405129    83C7 08         add edi, 0x8
0040512C    4A              dec edx
0040512D  ^ 75 E2           jnz short 00405111
0040512F    EB 06           jmp short 00405137
00405131    83C6 04         add esi, 0x4
00405134    83C7 04         add edi, 0x4
00405137    5A              pop edx
00405138    83E2 03         and edx, 0x3
0040513B    74 22           je short 0040515F
0040513D    8B0E            mov ecx, dword ptr [esi]                 ; 90
0040513F    8B1F            mov ebx, dword ptr [edi]                 ; 08
00405141    38D9            cmp cl, bl                               ; 比较9与0是否相等
00405143    75 41           jnz short 00405186
00405145    4A              dec edx
00405146    74 17           je short 0040515F
00405148    38FD            cmp ch, bh
0040514A    75 3A           jnz short 00405186                       ; 比较0与8是否相等



算法总结:
1.注册码位数要为A(10)
2.取注册码的第1位到第4位,也就是1234跟注册码的第1位到第4位进行对比
2.取注册码的第5位到第8位,也就是5678跟注册码的第5位到第8位进行对比
3,对比最后两位是否相等


完全相等 call返回为0,je跳转到注册成功

所以我们如果要smc其实有两个点可以改
一个是算法部分,但是这个时机挺难把握,用这里算法call的地方太多了(方法1舍去)
另外的话就是改这个je判断了,这个就简单得很了

在SMC之前我们先来梳理一下
假设我们输入的不是真注册码,那么经过这个call对比,值肯定不为0
所以这个je就不会跳,然后我们需要让je就就得让call返回为0或者把je改成jnz
把je改成jnz的话就应该是那16进制的0F84改为0F85

因为0F是不变的,所以我们不需要改这里,只需要把84改成95即可,也就是所谓的一字节爆破
字节:byte
字:word
双字:dword

因为0F所在的内存地址为005AB8A0,所以地址+1得出:
005AB8A1为84所在的字节

最终我们需要SMC的代码为
mov byte ptr ds:[005AB8A1],85

SMC开始:
首先找到那个jmp到OEP的位置

直接搜索二进制00000000000000000000000000000000000000000000000000
a.jpg
然后我们这样改
b.jpg

发现这样改不行,为什么?画横线的地方是地址重定位,因为我们不懂重定位,所以我们要绕过画横线的地方再SMC就可以了
c.jpg
ok,这样就注册成功了
d.jpg

如果大家出现什么错误的话,可以自己额外增加一个区段进行补码就问题不大了,具体问题具体分析(增加的区段需可读可写)
追码的话就在这里
e.jpg


软件: bbjizhang.rar (1.78 MB, 下载次数: 37)

评分

参与人数 51威望 +1 HB +87 THX +32 收起 理由
longge188 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
24567 + 1
Jawon + 2
DDK4282 + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
Soul1999 + 1
消逝的过去 + 1
冷亦飞 + 1
禽大师 + 1
飞刀梦想 + 1
l278785481 + 1
ldljlzw + 1
jaunic + 1
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
zwj00544 + 2 + 1
淡灬看夏丶恋雨 + 1
曦照 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
EMT + 1 + 1
hetao8003200 + 1
Amir + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
readgo + 1 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
mengzhisuoliu + 1
lies + 1
lijun5323521 + 1 [快捷评语] - 悬赏杀手主题,额外增加10HB,感谢热心解答!
fllow + 1 + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!
zln131425 + 1 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
tingwei3 + 1 + 1 [快捷评语] - 2017,让我们17学破解!
云烟尽处 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
海天一色001 + 1 [快捷评语] - 2017,让我们17学破解!
hpoon + 1 分享精神,是最值得尊敬的!
Tea + 1 吃水不忘打井人,给个评分懂感恩!
Just_Like_Fire + 1 分享精神,是最值得尊敬的!
hero4588 + 1 + 1 吃水不忘打井人,给个评分懂感恩!
小辉专属丶 + 1 + 1 分享精神,是最值得尊敬的!
yj1226538036 + 1 谢谢分享
tianzhiya + 1 吃水不忘打井人,给个评分懂感恩!
泪落尘埃 + 1 + 1 分享精神,是最值得尊敬的!
leroy特洛伊 + 1 + 1 分享精神,是最值得尊敬的!
woshinimaq + 1 分享精神,是最值得尊敬的!
wxw1145897898 + 1 + 1 分享精神,是最值得尊敬的!
1109530a + 1 + 1 分享精神,是最值得尊敬的!
wswwj + 2 + 1 吃水不忘打井人,给个评分懂感恩!
xuenii + 5 + 1 分享精神,是最值得尊敬的!
逍遥枷锁 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
Mr.Chen + 1 + 1 分享精神,是最值得尊敬的!
童真丶 + 6 + 1 膜拜师傅会SMC,学习了
飞行太保 + 1 + 1 分享精神,是最值得尊敬的!
rgbwcwmd + 2 + 1 吃水不忘打井人,给个评分懂感恩!
退隐猫九_ + 1 评分是对作者的尊重!!!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2016-7-27 16:53 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2016-7-27 16:58 | 显示全部楼层

占楼,再看看
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
892644330 发表于 2016-7-27 19:18 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
覃绍洋 发表于 2016-7-27 19:26 | 显示全部楼层

多少收电费收费
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
覃绍洋 发表于 2016-7-27 19:27 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
pghuanghui 发表于 2016-7-27 19:45 | 显示全部楼层

学习学习这些软件的逆向分析思路,感谢楼主带给我们的教程。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
jiajiayu 发表于 2016-7-27 20:03 来自手机端 | 显示全部楼层

嗯!学习了;另给你点个赞
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一个good而已 发表于 2016-7-27 20:04 | 显示全部楼层

膜拜师傅,来学习一下
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
dufanxing 发表于 2016-7-28 09:56 来自手机端 | 显示全部楼层

学习逆向谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表