学破解论坛-软件逆向分析工程师的摇篮-懂进攻知防守!

 ★找回密码★
 ★立即注册★

QQ登录

只需一步,快速开始

查看: 3988|回复: 90

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

  [复制链接] |关注本帖

  离线 

签到天数: 14

该用户今日未签到

马上注册,深入学习!

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

逆向分析前言:这个程序其实有点意思,,,注册码存放于一个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, 下载次数: 25)

评分

参与人数 24威望 +1 HB +67 THX +16 收起 理由
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 吃水不忘打井人,给个评分懂感恩!
退隐猫九_ + 4 + 1 评分是对作者的尊重!!!
Shark恒 + 1 + 30 + 1 评分=感恩!简单却充满爱!感谢您的作品!

还有更多人参与评分,点击查看全部!

学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!

  离线 

签到天数: 290

该用户今日未签到

很详细,套用习大大的话:给你点个赞!
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 22

该用户今日未签到

占楼,再看看
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 213

今日第33个签到

套用qq空间的话 给你100个赞~
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

该用户从未签到

多少收电费收费
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

该用户从未签到

多是少收电费收费
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 113

该用户今日未签到

学习学习这些软件的逆向分析思路,感谢楼主带给我们的教程。
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 56

该用户今日未签到

发表于 2016-7-27 20:03 本信息由手机发布 | 显示全部楼层 |取消关注该作者的回复
嗯!学习了;另给你点个赞
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 5

该用户今日未签到

膜拜师傅,来学习一下
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

  离线 

签到天数: 9

该用户今日未签到

发表于 2016-7-28 09:56 本信息由手机发布 | 显示全部楼层 |取消关注该作者的回复
学习逆向分析谢谢分享
学破解论坛关注PC软件安全与移动软件安全领域。学习破解方法,使软件开发者能够更好的弥补软件缺陷,修复软件漏洞,提升软件安全,将损失降为最低。大量的软件加密解密教程,使软件开发者与代码逆向分析爱好者受益颇多,因此被连连称赞。保护开发者的利益与版权是我们持之以恒的动力!学破解论坛将竭尽全力为软件安全领域献出微薄之力!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识,所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者其他任何非法用途!否则,一切后果请用户自负!


站长微信号:SharkHeng|联系Email|鲨鱼逆向|手机版|小黑屋|FAQ|Vip破解教程|学破解论坛 ( 京公网安备 11011502002737号 | 京ICP备14042738号 ) 

GMT+8, 2017-11-20 08:36

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