菜鸟新人第一次成功放炮,谢谢大家提供的火药和引信!求邀请码鼓励
【文章标题】: 菜鸟新人第一次成功放炮,谢谢大家提供的火药和引信!
【文章作者】: zsdtx
【作者邮箱】:zsdxt@gmail.com
【时 间】: 2010-04-29,16:50:13
【软件名称】: 某文件管理软件
【软件大小】:320k
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 机器码+注册码+Keyfile
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OD+PEiD
【操作平台】: Windows XP
【作者声明】: 只是感兴趣,没有其他目的,敬请软件作者原谅。
--------------------------------------------------------------------------------
通过学习看雪论坛的知识,以及一段时间的摸索,渐渐对破解有了一些认识,最近终于成功爆破了某软件,现将爆破过程简介如下,希望与大家共同学习、进步。
【详细过程】
1. PeiD扫描提示VC编写、无壳,该软件无需安装版,运行后其界面如下,点击注册后提示重启验证:
2. OD载入并查找ASCII字符,可以找到许多提示信息,寻找关键点在汇编窗口中跟随:
3. 第一步 破解试用期限制:
(1)经过反复验证后发现注册信息、试用信息记录同时保存处于注册表和File.ini文件之中:因为是重启验证,故推测其注册信息隐藏于*.reg 、*.dat或*.ini之类的文件之中,逐一分析。利用机器码或假注册码查找注册表很快找到注册信息,如下图:
(2)将其删除后第一次重新运行程序显示试用期15天,但再次运行后显示试用期仍是0天,说明其试用期的信息仍隐藏于其他地方,可能是*.dat、*.dll或*.ini之类的文件,但是寻找程序所在的目录、系统根目录均未发现可疑文件。OD载入,利用bp RegOpenKeyExA、bp GetFileTime、bp CreateFileA等下断,单步运行,很快发现汇编窗、寄存器、堆栈窗均先后有可疑信息“File.ini”,继续单步运行发现如下信息: ASCII "D:\Recycler\AEEDCB97-QS21-47B-AA9F-QA237D2D05RGF\File.ini",在D盘中找到File.ini文件,同时删除该文件和注册表相应项后,恢复15天的试用期,至此破解试用期限制成功!如此重复即可每15天无限次延长软件试用期,但较为麻烦,故寻找第二种破解方法。
(3)根据重启验证和试用时间限制的特点找到3个关键词:regserial(注册系列号)、File.ini(注册信息保存文件)和expired(提示软件过期),因为前述软件的注册和试用信息同时保存于注册表和File.ini文件中,故选择expired作为关键词较为合理。OD载入后在ASCII字符串中很快找到“expired”关键词,在其对应代码下断点。
(4)OD载入
00415023 >/$ 55 push ebp ; (initial cpu selection)
00415024 |. 8BEC mov ebp, esp
00415026 |. 6A FF push -1
00415028 |. 68 38674300 push 00436738
0041502D |. 68 4C914100 push 0041914C ; SE 处理程序安装
00415032 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
00415038 |. 50 push eax
00415039 |. 64:8925 00000>mov dword ptr fs:[0], esp
00415040 |. 83EC 58 sub esp, 58
00415043 |. 53 push ebx
00415044 |. 56 push esi
00415045 |. 57 push edi
00415046 |. 8965 E8 mov dword ptr [ebp-18], esp
00415049 |. FF15 44324300 call dword ptr [<&KERNEL32.GetVersion>; kernel32.GetVersion
¨¨¨¨¨¨
(5)在ASCII字符串表查找关键词“expired”,并在汇编窗口跟随下断点:
00409D68 |. 8D4424 0C lea eax, dword ptr [esp+C] ; |
00409D6C |. 52 push edx ; |Buffer
00409D6D |. 50 push eax ; |pValueType
00409D6E |. 6A 00 push 0 ; |Reserved = NULL
00409D70 |. 68 88F94300 push 0043F988 ; |expired 验证是否过期的关键点,在此下断点
00409D75 |. 51 push ecx ; |hKey
00409D76 |. C74424 20 010>mov dword ptr [esp+20], 1 ; |
00409D7E |. C64424 1B 00 mov byte ptr [esp+1B], 0 ; |
00409D83 |. FF15 10304300 call dword ptr [<&ADVAPI32.RegQueryVa>; \RegQueryValueExA
00409D89 |. 85C0 test eax, eax
00409D8B |. 74 11 je short 00409D9E
¨¨¨¨¨¨
(6)F9运行,程序被断下,F8单步运行:
7C92E4DF |. 8B0424 mov eax, dword ptr [esp]
7C92E4E2 |. 8BE5 mov esp, ebp
7C92E4E4 |. 5D pop ebp
7C92E4E5 \. C3 retn
¨¨¨¨¨¨多次F8单步运行后至此
00408DCE . C68424 940300>mov byte ptr [esp+394], 1
00408DD6 . E8 550C0000 call 00409A30
00408DDB . 85C0 test eax, eax
00408DDD . 74 0B je short 00408DEA
00408DDF . 892D E4F84300 mov dword ptr [43F8E4], ebp
00408DE5 . E9 A2020000 jmp 0040908C
00408DEA > 8BCE mov ecx, esi
00408DEC . C705 78224400>mov dword ptr [442278], 0F
00408DF6 . E8 250F0000 call 00409D20
00408DFB . 85C0 test eax, eax 以上为比较“File.ini”文件的信息记录
00408DFD 74 59 je short 00408E58 关键跳,不跳则提示未注册和试用期为0天,改为jmp跳过!
00408DFF . 8D4424 18 lea eax, dword ptr [esp+18]
00408E03 . 8BCE mov ecx, esi
00408E05 . 50 push eax
00408E06 . 892D E0F84300 mov dword ptr [43F8E0], ebp
00408E0C . E8 7F040000 call 00409290
00408E11 . 813D E0F84300>cmp dword ptr [43F8E0], 13AED
00408E1B . 75 0B jnz short 00408E28
¨¨¨¨¨¨再多次F8单步运行后至此
00408FA4 . E8 E7020000 call 00409290
00408FA9 . 813D E0F84300>cmp dword ptr [43F8E0], 13AED
00408FB3 . 75 0B jnz short 00408FC0
00408FB5 . 892D E4F84300 mov dword ptr [43F8E4], ebp
00408FBB . E9 CC000000 jmp 0040908C
00408FC0 > 51 push ecx
00408FC1 . 8B4C24 18 mov ecx, dword ptr [esp+18]
00408FC5 . 8BC4 mov eax, esp
00408FC7 . 896424 28 mov dword ptr [esp+28], esp
00408FCB . 8908 mov dword ptr [eax], ecx
00408FCD . 8D4C24 2C lea ecx, dword ptr [esp+2C]
00408FD1 . E8 9A1C0000 call 0040AC70
00408FD6 . 3BC5 cmp eax, ebp 以上为比较注册表信息记录
00408FD8 74 37 je short 00409011 关键跳,不跳则提示未注册和试用期为0天,改为jmp跳过!
00408FDA . 8BCE mov ecx, esi
00408FDC . E8 7F140000 call 0040A460
00408FE1 . 8D4C24 2C lea ecx, dword ptr [esp+2C]
00408FE5 . 892D 78224400 mov dword ptr [442278], ebp
00408FEB . E8 BDBF0100 call 00424FAD
00408FF0 . 8D8C24 C00000>lea ecx, dword ptr [esp+C0]
00408FF7 . C68424 940300>mov byte ptr [esp+394], 8
00408FFF . E8 B8F90100 call 004289BC
00409004 . C68424 940300>mov byte ptr [esp+394], 7
0040900C . E9 B0010000 jmp 004091C1
00409011 > 8B5424 28 mov edx, dword ptr [esp+28]
¨¨¨¨¨¨经过上述2处修改后再多次F8单步运行,最后至此
00409107 . 8D8C24 F80000>lea ecx, dword ptr [esp+F8]
0040910E . E8 DD1E0000 call 0040AFF0
00409113 . 8D8C24 F40000>lea ecx, dword ptr [esp+F4]
0040911A . C68424 940300>mov byte ptr [esp+394], 0E
00409122 . 894E 1C mov dword ptr [esi+1C], ecx
00409125 . 8D8C24 F40000>lea ecx, dword ptr [esp+F4]
0040912C . E8 7CBE0100 call 00424FAD 至此程序正常运行,去掉15天试用期,虽然还是未注册版,但提示还可试用14726天!
(7)如果还想去掉“未注册”标志,则根据ASCII码字符串“-还可试用%d天”寻找下断点,详细如下
00408524 . E8 CC050200 call 00428AF5
00408529 . 68 40224400 push 00442240
0040852E . 8D8E 94000000 lea ecx, dword ptr [esi+94]
00408534 . E8 0C060200 call 00428B45
00408539 . 8BCE mov ecx, esi
0040853B . E8 F5CC0100 call 00425235
00408540 . 6A 00 push 0
00408542 . 8BCE mov ecx, esi
00408544 . E8 4FF00100 call 00427598
00408549 . A1 7CFE4300 mov eax, dword ptr [43FE7C] 计算试用天数
0040854E . 894424 04 mov dword ptr [esp+4], eax
00408552 . A1 E4F84300 mov eax, dword ptr [43F8E4]
00408557 . C74424 10 000>mov dword ptr [esp+10], 0
0040855F . 85C0 test eax, eax 关键比较
00408561 EB 33 je short 00408596 关键跳,在此之前下断,改为jmp即可跳试用天数记录,并显示“已注册”
00408563 . 8B0D 78224400 mov ecx, dword ptr [442278]
00408569 . 8D5424 04 lea edx, dword ptr [esp+4]
0040856D . D905 2CF74300 fld dword ptr [43F72C]
00408573 . 51 push ecx
00408574 . 83EC 08 sub esp, 8
00408577 . DD1C24 fstp qword ptr [esp]
0040857A . 68 70F74300 push 0043F770 ; XXX还可试用%d天!
0040857F . 52 push edx
00408580 . E8 9CB00100 call 00423621
00408585 . 8B4424 18 mov eax, dword ptr [esp+18]
00408589 . 83C4 14 add esp, 14
0040858C . 8BCE mov ecx, esi
0040858E . 50 push eax
0040858F . E8 88FA0100 call 0042801C
00408594 . EB 51 jmp short 004085E7
00408596 > D905 2CF74300 fld dword ptr [43F72C]
0040859C . 83EC 08 sub esp, 8
0040859F . 8D4C24 0C lea ecx, dword ptr [esp+C]
004085A3 . DD1C24 fstp qword ptr [esp]
004085A6 . 68 50F74300 push 0043F750 ; XXX v%.1f-已注册
004085AB . 51 push ecx
004085AC . E8 70B00100 call 00423621
004085B1 . 8B5424 14 mov edx, dword ptr [esp+14]
004085B5 . 83C4 10 add esp, 10
004085B8 . 8BCE mov ecx, esi
以上是去掉试用期限制的方法。
4. 第二步 完美爆破
(1)完美爆破的第一步和去掉时间限制方法的第(5)、第(6)步一样,因为两者都必须去掉程序启动时的验证动作,才能进入正常的界面;
(2)第二步是根据“未注册”、“注册版”、 “感谢您的支持”等提示信息下断点,过程如下:
0040B252 . E8 9ED80100 call 00428AF5
0040B257 . 8B15 7CFE4300 mov edx, dword ptr [43FE7C] ; Xxxxx.0043FE90
0040B25D . 895424 0C mov dword ptr [esp+C], edx
0040B261 . A1 E4F84300 mov eax, dword ptr [43F8E4]
0040B266 . 899C24 580100>mov dword ptr [esp+158], ebx
0040B26D . D905 0CFB4300 fld dword ptr [43FB0C]
0040B273 . 85C0 test eax, eax 关键比较,在以上下断点
0040B275 0F84 8E000000 je 0040B309 关键跳转,不跳必挂,改为jmp跳过
0040B27B . 83EC 08 sub esp, 8
0040B27E . 8D4424 14 lea eax, dword ptr [esp+14]
0040B282 . DD1C24 fstp qword ptr [esp]
0040B285 . 68 38FB4300 push 0043FB38 ; XXX XX版v%.1f(未注册)
0040B28A . 50 push eax
0040B28B . E8 91830100 call 00423621
0040B290 . A1 78224400 mov eax, dword ptr [442278]
0040B295 . 83C4 10 add esp, 10
0040B298 . 85C0 test eax, eax
0040B29A . 0F85 81000000 jnz 0040B321
0040B2A0 . 6A 00 push 0
0040B2A2 . 8D8C24 8C0000>lea ecx, dword ptr [esp+8C]
0040B2A9 . E8 82D0FFFF call 00408330
0040B2AE . 8D8C24 880000>lea ecx, dword ptr [esp+88]
0040B2B5 . C68424 580100>mov byte ptr [esp+158], 2
0040B2BD . E8 EB9C0100 call 00424FAD
0040B2C2 . 8B16 mov edx, dword ptr [esi]
0040B2C4 . 8BCE mov ecx, esi
0040B2C6 . FF92 C8000000 call dword ptr [edx+C8]
0040B2CC . 8D8C24 1C0100>lea ecx, dword ptr [esp+11C]
0040B2D3 . C68424 580100>mov byte ptr [esp+158], 4
0040B2DB . E8 DCD60100 call 004289BC
0040B2E0 . 8D8C24 180100>lea ecx, dword ptr [esp+118]
0040B2E7 . C68424 580100>mov byte ptr [esp+158], 3
0040B2EF . E8 C8D60100 call 004289BC
0040B2F4 . 8D8C24 880000>lea ecx, dword ptr [esp+88]
0040B2FB . 889C24 580100>mov byte ptr [esp+158], bl
0040B302 . E8 79990100 call 00424C80
0040B307 . EB 18 jmp short 0040B321
0040B309 > 83EC 08 sub esp, 8
0040B30C . 8D4424 14 lea eax, dword ptr [esp+14]
0040B310 . DD1C24 fstp qword ptr [esp]
0040B313 . 68 1CFB4300 push 0043FB1C ; XXX xx版v%.1f
0040B318 . 50 push eax
0040B319 . E8 03830100 call 00423621
0040B31E . 83C4 10 add esp, 10
¨¨¨¨¨¨
0040C280 /$ 6A FF push -1
0040C282 |. 68 DE1C4300 push 00431CDE ; SE 处理程序安装
0040C287 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
0040C28D |. 50 push eax
0040C28E |. 64:8925 00000>mov dword ptr fs:[0], esp
0040C295 |. 81EC C8000000 sub esp, 0C8
0040C29B |. 56 push esi
0040C29C |. 8BF1 mov esi, ecx
0040C29E |. 6A 00 push 0
0040C2A0 |. 8D4C24 08 lea ecx, dword ptr [esp+8]
0040C2A4 |. E8 87C0FFFF call 00408330
0040C2A9 |. A1 E4F84300 mov eax, dword ptr [43F8E4]
0040C2AE |. C78424 D40000>mov dword ptr [esp+D4], 0
0040C2B9 |. 85C0 test eax, eax 关键比较,在以上下断点
0040C2BB 74 0B je short 0040C2C8 关键跳转,不跳必挂,改为jmp跳过
0040C2BD |. 8D4C24 04 lea ecx, dword ptr [esp+4]
0040C2C1 |. E8 E78C0100 call 00424FAD
0040C2C6 |. EB 10 jmp short 0040C2D8
0040C2C8 |> 6A 00 push 0
0040C2CA |. 6A 00 push 0
0040C2CC |. 68 34FC4300 push 0043FC34 ; 您已经注册,感谢您的支持!
0040C2D1 |. 8BCE mov ecx, esi
0040C2D3 |. E8 64AB0100 call 00426E3C
0040C2D8 |> 8D8C24 980000>lea ecx, dword ptr [esp+98]
0040C2DF |. C78424 D40000>mov dword ptr [esp+D4], 2
0040C2EA |. E8 CDC60100 call 004289BC
以上是完美的爆破。
【总 结】该软件采用 机器码+注册码+Keyfile的保护方法,需要重启验证,非明码比较,保护文件隐藏较深,一般方法很难找到,给新手带来不小难度。在调试过程中寻找关键点是成功的要诀。在本次调试中具体表现在如下两点:(1)在寻找保护文件时,常规方法找不到,后来OD载入后发现可疑信息“file.ini”,遂在D盘中的Recycler\AEEDCB97-QS21-47B-AA9F-QA237D2D05RGF文件夹中找到该文件;(2)在寻找重启验证的关键跳转时,刚开始利用bp RegOpenKeyExA、bp GetFileTime、bp CreateFileA等下断点均无法找到,最后灵机一动,择expired作为关键词很快就找到。故,如何随机应变是破解的基本功。由于本人还是十足的菜鸟,注册算法分析还未掌握,故无法追寻到注册码和写注册机,望各位多多指教!
这是本人的初次成功爆破,其中的喜悦心情可想而知,本人诚挚期待看雪的版主给予奖励一个邀请码,以增加学习的动力。真诚感谢论坛的所有朋友,因为你们给予了我许多的知识与快乐!祝大家身体健康、万事胜意!
201
0-4-28
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课