【文章标题】: 职称英语考试宝典(综合类) 3.1追出注册码。
【软件大小】: 4.58MB
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: 机器码,注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: peid v0.94;Ollyice
【操作平台】: xp
【作者声明】: 只是感兴趣,没有其他目的。不能用于商业行为。
--------------------------------------------------------------------------------
【详细过程】
说明:我是一个小菜鸟,这也是我第一次写破文,请个位给予指点。
首先用PEiD查壳为ASPack 2.12 -> Alexey Solodovnikov壳,首先脱壳,可以载入OD手动脱壳,也可用脱壳机自动脱壳。我用RL!deASPack 2.x 脱壳机自动脱壳,脱完壳不用修复就可以运行。 接下来运行进行试注册,打开软件,弹出提示注册框。随意输入注册码:
机器码:151591039478
假注册码:123456789012
弹出:注册失败信息:“您输入的注册码错误”。
OD载入脱壳后的文件停在这里
005E91B4 > 55 push ebp
005E91B5 8BEC mov ebp, esp
005E91B7 83C4 F0 add esp, -10
005E91BA B8 946C5E00 mov eax, unpacked.005E6C94
005E91BF E8 68EFE1FF call unpacked.0040812C
005E91C4 A1 DC615F00 mov eax, dword ptr ds:[5F61DC]
005E91C9 8B00 mov eax, dword ptr ds:[eax]
005E91CB E8 5CBAEEFF call unpacked.004D4C2C
005E91D0 A1 DC615F00 mov eax, dword ptr ds:[5F61DC]
005E91D5 8B00 mov eax, dword ptr ds:[eax]
005E91D7 BA 20925E00 mov edx, unpacked.005E9220
005E91DC E8 03B5EEFF call unpacked.004D46E4
005E91E1 A1 DC615F00 mov eax, dword ptr ds:[5F61DC]
005E91E6 8B00 mov eax, dword ptr ds:[eax]
005E91E8 B2 01 mov dl, 1
很显然是Borland Delphi 6.0 - 7.0的特征,右键查找字符串,没有发现“注册失败信息:“您输入的注册码错误”。”很显然是加密了。
进入到安装目录发现Data文件夹中比没注册时多了一个temp.db文件,猜想时重启验证,把注册信息写在了安装目录的文件中。用Borland Delphi 6.0 - 7.0程序按钮时间断点,下断点
bp CreateFileA运行程序,停在这里
7C801A28 >/$ 8BFF mov edi, edi ; <---OEP
7C801A2A |. 55 push ebp
7C801A2B |. 8BEC mov ebp, esp
7C801A2D |. FF75 08 push dword ptr ss:[ebp+8]
7C801A30 |. E8 CFC60000 call kernel32.7C80E104
7C801A35 |. 85C0 test eax, eax
7C801A37 |. 74 1E je short kernel32.7C801A57
7C801A39 |. FF75 20 push dword ptr ss:[ebp+20] ; /hTemplateFile
7C801A3C |. FF75 1C push dword ptr ss:[ebp+1C] ; |Attributes
7C801A3F |. FF75 18 push dword ptr ss:[ebp+18] ; |Mode
7C801A42 |. FF75 14 push dword ptr ss:[ebp+14] ; |pSecurity
7C801A45 |. FF75 10 push dword ptr ss:[ebp+10] ; |ShareMode
7C801A48 |. FF75 0C push dword ptr ss:[ebp+C] ; |Access
7C801A4B |. FF70 04 push dword ptr ds:[eax+4] ; |FileName
7C801A4E |. E8 9DED0000 call kernel32.CreateFileW ; \CreateFileW
7C801A53 |> 5D pop ebp
7C801A54 |. C2 1C00 retn 1C
一直按F8来到这里
7C93C582 8B3E mov edi, dword ptr ds:[esi]
7C93C584 89BD 7CFFFFFF mov dword ptr ss:[ebp-84], edi
7C93C58A 3BFE cmp edi, esi
7C93C58C ^ 0F84 72FFFFFF je ntdll.7C93C504
7C93C592 8D47 F0 lea eax, dword ptr ds:[edi-10]
7C93C595 8945 D4 mov dword ptr ss:[ebp-2C], eax
7C93C598 F640 37 80 test byte ptr ds:[eax+37], 80
7C93C59C ^ 0F84 D2CEFFFF je ntdll.7C939474
7C93C5A2 8B3F mov edi, dword ptr ds:[edi]
7C93C5A4 ^ EB DE jmp short ntdll.7C93C584
7C93C5A6 90 nop---------------这里右键,断点,运行到选定位置。
返回到这里7C801A28 >/$ 8BFF mov edi, edi ; <---OEP
7C801A2A |. 55 push ebp
7C801A2B |. 8BEC mov ebp, esp
7C801A2D |. FF75 08 push dword ptr ss:[ebp+8]
7C801A30 |. E8 CFC60000 call kernel32.7C80E104
7C801A35 |. 85C0 test eax, eax
7C801A37 |. 74 1E je short kernel32.7C801A57
7C801A39 |. FF75 20 push dword ptr ss:[ebp+20] ; /hTemplateFile
7C801A3C |. FF75 1C push dword ptr ss:[ebp+1C] ; |Attributes
7C801A3F |. FF75 18 push dword ptr ss:[ebp+18] ; |Mode
7C801A42 |. FF75 14 push dword ptr ss:[ebp+14] ; |pSecurity
7C801A45 |. FF75 10 push dword ptr ss:[ebp+10] ; |ShareMode
7C801A48 |. FF75 0C push dword ptr ss:[ebp+C] ; |Access
7C801A4B |. FF70 04 push dword ptr ds:[eax+4] ; |FileName
7C801A4E |. E8 9DED0000 call kernel32.CreateFileW ; \CreateFileW
7C801A53 |> 5D pop ebp
7C801A54 |. C2 1C00 retn 1C
继续一直F8到了这里出现了硬盘序列号
00590E86 . E8 55FEFFFF call unpacked.00590CE0
00590E8B . 8D43 14 lea eax, dword ptr ds:[ebx+14]
00590E8E . 83C0 14 add eax, 14
00590E91 . C600 00 mov byte ptr ds:[eax], 0
00590E94 . 8D85 B8FDFFFF lea eax, dword ptr ss:[ebp-248]
00590E9A . 8D53 14 lea edx, dword ptr ds:[ebx+14]
00590E9D . E8 AA53E7FF call unpacked.0040624C
00590EA2 . 8B85 B8FDFFFF mov eax, dword ptr ss:[ebp-248]
00590EA8 . 8D95 BCFDFFFF lea edx, dword ptr ss:[ebp-244]
00590EAE . E8 819CE7FF call unpacked.0040AB34
00590EB3 . 8B95 BCFDFFFF mov edx, dword ptr ss:[ebp-244]
00590EB9 . 8B85 ECFDFFFF mov eax, dword ptr ss:[ebp-214]
00590EBF . E8 DC4CE7FF call unpacked.00405BA0
00590EC4 > 33C0 xor eax, eax
堆栈 ss:[0012C804]=0015981C, (UNICODE "Y2A9S7MC")
edx=0012C804
继续一直F8来到这里,根据硬盘序列号生成机器码。
00590991 |. 8B95 F8FDFFFF mov edx, dword ptr ss:[ebp-208]
00590997 |. 58 pop eax
00590998 |. E8 4752E7FF call unpacked.00405BE4
0059099D |. 8B95 FCFDFFFF mov edx, dword ptr ss:[ebp-204]
005909A3 |. 8D85 00FEFFFF lea eax, dword ptr ss:[ebp-200]
005909A9 |. B9 FF000000 mov ecx, 0FF
005909AE |. E8 0152E7FF call unpacked.00405BB4
005909B3 |. 8D85 00FEFFFF lea eax, dword ptr ss:[ebp-200]
005909B9 |. 8D95 00FFFFFF lea edx, dword ptr ss:[ebp-100]
005909BF |. E8 60F5FFFF call unpacked.0058FF24
005909C4 |. 8D95 00FFFFFF lea edx, dword ptr ss:[ebp-100]
005909CA |. 8BC3 mov eax, ebx
005909CC |. E8 8F51E7FF call unpacked.00405B60
005909D1 |. 33C0 xor eax, eax
005909D3 |. 5A pop edx
堆栈 ss:[0012CC94]=00E84F78, (ASCII "151591039478")
edx=0012CC94
这段读取了机器码,离我们要找的注册码不远了。继续F8下去,注意看堆栈。来到了这里
005908FB |. 8D95 FCFEFFFF lea edx, dword ptr ss:[ebp-104]-----注册码出现了。
00590901 |. 8D45 FC lea eax, dword ptr ss:[ebp-4]
00590904 |. E8 5752E7FF call unpacked.00405B60
00590909 |. 8B45 FC mov eax, dword ptr ss:[ebp-4]
0059090C |. 8BD3 mov edx, ebx
0059090E |. E8 0DCFFFFF call unpacked.0058D820
00590913 |. 33C0 xor eax, eax
00590915 |. 5A pop edx
00590916 |. 59 pop ecx
00590917 |. 59 pop ecx
00590918 |. 64:8910 mov dword ptr fs:[eax], edx
堆栈地址=0012CD98, (ASCII 0C,"785274938403")
edx=00E66670
我是我的机器码:151591039478 这是追得的注册码:785274938403 我们把追到的注册码输进去看看,可以完成注册,重新启动程序,显示为正式版,功能完全。追码成功,这个方法好像比较笨,希望给位高手多多指点。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课