好友
阅读权限40
听众
最后登录1970-1-1
|
冰封溪谷
发表于 2011-8-14 02:10
本帖最后由 冰封溪谷 于 2011-8-14 02:13 编辑
大家好,我是ICey(冰封溪谷),现在带给大家是一个比较简单的软件详细分析,希望新手能认真看,可能会对你有所帮助!软件在下面!!
先把软件下下来。。一步步跟我走。。。
先用PEID查壳:
恩。。Borland Delphi 的。。。看来没有壳。。
这个是什么隐藏看书的。。这个我们不管。。来用od打开:
004F1010 > 55 push ebp
004F1011 8BEC mov ebp,esp
004F1013 83C4 F0 add esp,-0x10
004F1016 53 push ebx
004F1017 B8 849E4E00 mov eax,隐形阅读.004E9E84 ; d
004F101C E8 6390F1FF call 隐形阅读.0040A084
004F1021 8B1D 785C4F00 mov ebx,dword ptr ds:[0x4F5C78] ; 隐形阅读.004FB2C0
004F1027 8B03 mov eax,dword ptr ds:[ebx]
004F1029 E8 4EFEFCFF call 隐形阅读.004C0E7C
004F102E 8B03 mov eax,dword ptr ds:[ebx]
004F1030 33D2 xor edx,edx
004F1032 E8 811BFDFF call 隐形阅读.004C2BB8
004F1037 8B03 mov eax,dword ptr ds:[ebx]
004F1039 BA 84104F00 mov edx,隐形阅读.004F1084
004F103E E8 55F8FCFF call 隐形阅读.004C0898
004F1043 8B0D 105E4F00 mov ecx,dword ptr ds:[0x4F5E10] ; 隐形阅读.004FB37C
004F1049 8B03 mov eax,dword ptr ds:[ebx]
004F104B 8B15 48904E00 mov edx,dword ptr ds:[0x4E9048] ; 隐形阅读.004E90A0
004F1051 E8 3EFEFCFF call 隐形阅读.004C0E94
004F1056 8B0D DC5B4F00 mov ecx,dword ptr ds:[0x4F5BDC] ; 隐形阅读.004FB378
004F105C 8B03 mov eax,dword ptr ds:[ebx]
004F105E 8B15 2C8B4E00 mov edx,dword ptr ds:[0x4E8B2C] ; 隐形阅读.004E8B84
004F1064 E8 2BFEFCFF call 隐形阅读.004C0E94
004F1069 8B03 mov eax,dword ptr ds:[ebx]
004F106B E8 74FFFCFF call 隐形阅读.004C0FE4
标志性的Borland Delphi 的oep。。。
恩。。来查查ascll。。米有。。。unicode。。还是米有。。。
那就先打开软件注册界面看看:
额。。注册试试。。
这个明显不是messagebox。。所以下messagebox断点是没用的。。。
好吧,,看看区段:
可疑的区段。。我们oep居然不在text段。。进去看看。。、
恩查查ascll。。没有。。但是unicode。。。
额。。明的。。进去看看。。。004E8F34 55 push ebp
004E8F35 8BEC mov ebp,esp
004E8F37 6A 00 push 0x0
004E8F39 6A 00 push 0x0
004E8F3B 53 push ebx
004E8F3C 8BD8 mov ebx,eax
004E8F3E 33C0 xor eax,eax
004E8F40 55 push ebp
004E8F41 68 BE8F4E00 push 隐形阅读.004E8FBE
004E8F46 64:FF30 push dword ptr fs:[eax]
004E8F49 64:8920 mov dword ptr fs:[eax],esp
004E8F4C 8D55 FC lea edx,dword ptr ss:[ebp-0x4]
004E8F4F 8B83 98030000 mov eax,dword ptr ds:[ebx+0x398]
004E8F55 E8 527EFAFF call 隐形阅读.00490DAC
004E8F5A 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
004E8F5D 50 push eax
004E8F5E 8D55 F8 lea edx,dword ptr ss:[ebp-0x8]
004E8F61 8B83 94030000 mov eax,dword ptr ds:[ebx+0x394]
004E8F67 E8 407EFAFF call 隐形阅读.00490DAC
004E8F6C 8B45 F8 mov eax,dword ptr ss:[ebp-0x8]
004E8F6F 5A pop edx
004E8F70 E8 5BC1FFFF call 隐形阅读.004E50D0
004E8F75 84C0 test al,al
004E8F77 74 20 je X隐形阅读.004E8F99 ;看来只要改改这个就ok了。。
004E8F79 B8 D88F4E00 mov eax,隐形阅读.004E8FD8 ; 注册成功!
004E8F7E E8 61E9F8FF call 隐形阅读.004778E4
004E8F83 8B15 705C4F00 mov edx,dword ptr ds:[0x4F5C70] ; 隐形阅读.004F5720
004E8F89 0FB612 movzx edx,byte ptr ds:[edx]
004E8F8C 8B83 A0030000 mov eax,dword ptr ds:[ebx+0x3A0]
004E8F92 E8 357DFAFF call 隐形阅读.00490CCC
004E8F97 EB 0A jmp X隐形阅读.004E8FA3
004E8F99 B8 F08F4E00 mov eax,隐形阅读.004E8FF0 ; 注册失败!请检查机器码与注册码是否正确!
004E8F9E E8 41E9F8FF call 隐形阅读.004778E4
004E8FA3 33C0 xor eax,eax
004E8FA5 5A pop edx
004E8FA6 59 pop ecx
004E8FA7 59 pop ecx
004E8FA8 64:8910 mov dword ptr fs:[eax],edx
004E8FAB 68 C58F4E00 push 隐形阅读.004E8FC5
004E8FB0 8D45 F8 lea eax,dword ptr ss:[ebp-0x8]
004E8FB3 BA 02000000 mov edx,0x2
004E8FB8 E8 D3D8F1FF call 隐形阅读.00406890
004E8FBD C3 retn
004E8FBE ^ E9 DDC7F1FF jmp 隐形阅读.004057A0
004E8FC3 ^ EB EB jmp X隐形阅读.004E8FB0
004E8FC5 5B pop ebx
004E8FC6 59 pop ecx
004E8FC7 59 pop ecx
004E8FC8 5D pop ebp
004E8FC9 C3 retn
恩。。看来004E8F77 74 20 je X隐形阅读.004E8F99 nop掉似乎就ok了。。但是有这么简单喔喔。。。还分析什么。。。[s:24]
但是我们还是试试。。nop掉保存。。注册。。。。注册成功。。恩
看说明说的非注册版有限制。。
什么:
不注册的缺点:使用时每过二十行左右会显示一次提示注册的信息。
注册价格:十元人民币。 注册后则没有任何提示与限制。
有提示是吧。。好吧我们试试。。:
呵呵。。果然未注册啊。。
好吧。。。我们先追码吧。。。
要追码就要找到关键call。。什么是关键call。。
就是比较注册码的call。。软件之说以没有注册成功。。就是关键call计算对不上码。。
追码就要找关键call?
这里的关键call嘛。。一般关键call处于跳转的上方。。。004E8F4F 8B83 98030000 mov eax,dword ptr ds:[ebx+0x398]
004E8F55 E8 527EFAFF call 隐形阅读.00490DAC
004E8F5A 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
004E8F5D 50 push eax
004E8F5E 8D55 F8 lea edx,dword ptr ss:[ebp-0x8]
004E8F61 8B83 94030000 mov eax,dword ptr ds:[ebx+0x394]
004E8F67 E8 407EFAFF call 隐形阅读.00490DAC
004E8F6C 8B45 F8 mov eax,dword ptr ss:[ebp-0x8]
004E8F6F 5A pop edx
004E8F70 E8 5BC1FFFF call 隐形阅读.004E50D0 这个就是关键call。。控制下面的je是否跳转!!!
004E8F75 84C0 test al,al
004E8F77 74 20 je X隐形阅读.004E8F99
004E8F79 B8 D88F4E00 mov eax,隐形阅读.004E8FD8 ; 注册成功!
004E8F7E E8 61E9F8FF call 隐形阅读.004778E4
004E8F83 8B15 705C4F00 mov edx,dword ptr ds:[0x4F5C70] ; 隐形阅读.004F5720
004E8F89 0FB612 movzx edx,byte ptr ds:[edx]
004E8F8C 8B83 A0030000 mov eax,dword ptr ds:[ebx+0x3A0]
004E8F92 E8 357DFAFF call 隐形阅读.00490CCC
004E8F97 EB 0A jmp X隐形阅读.004E8FA3
004E8F99 B8 F08F4E00 mov eax,隐形阅读.004E8FF0 ; 注册失败!请检查机器码与注册码是否正确!
004E8F9E E8 41E9F8FF call 隐形阅读.004778E4
004E8FA3 33C0 xor eax,eax
004E8FA5 5A pop edx
004E8FA6 59 pop ecx
好吧。。我说的处于跳转的上方的只是大多数,还有谢软件就不解释了。。。
按照正常。。我们先从此函数头开始走。。。恩。。函数头是:
004E8F34 55 push ebp
在他的注册框里面随便填写的东西。。这里我用 ICey吧
先在 004E8F34 下断点。。 就是这个函数头下断点。。。
f8单步走。。走到:
004E8F5A 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
时。堆栈线出现了ICey。。。说明上面的call是取编辑框的。。
继续。。。
走到:
时候。。堆栈线再次出现了机器码。。。说明上面的call是取注册码的。。ok下面的call一定就是比较的了、、、
f7步入吧:004E50D0 55 push ebp
004E50D1 8BEC mov ebp,esp
004E50D3 83C4 F8 add esp,-0x8
004E50D6 53 push ebx
004E50D7 56 push esi
004E50D8 8955 F8 mov dword ptr ss:[ebp-0x8],edx
004E50DB 8945 FC mov dword ptr ss:[ebp-0x4],eax
004E50DE 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
004E50E1 E8 9A17F2FF call 隐形阅读.00406880
004E50E6 8B45 F8 mov eax,dword ptr ss:[ebp-0x8]
004E50E9 E8 9217F2FF call 隐形阅读.00406880
004E50EE 33C0 xor eax,eax
004E50F0 55 push ebp
004E50F1 68 63514E00 push 隐形阅读.004E5163
004E50F6 64:FF30 push dword ptr fs:[eax]
004E50F9 64:8920 mov dword ptr fs:[eax],esp
004E50FC 8B55 F8 mov edx,dword ptr ss:[ebp-0x8]
004E50FF 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
004E5102 E8 55FFFFFF call 隐形阅读.004E505C 这个是关键call
004E5107 84C0 test al,al
004E5109 74 3B je X隐形阅读.004E5146
004E510B C605 20574F00 0>mov byte ptr ds:[0x4F5720],0x1
004E5112 8B0D 44B34F00 mov ecx,dword ptr ds:[0x4FB344]
004E5118 B2 01 mov dl,0x1
004E511A A1 A0884400 mov eax,dword ptr ds:[0x4488A0]
004E511F E8 303BF6FF call 隐形阅读.00448C54
004E5124 8BD8 mov ebx,eax
004E5126 8B45 F8 mov eax,dword ptr ss:[ebp-0x8]
004E5129 50 push eax
004E512A B9 80514E00 mov ecx,隐形阅读.004E5180 ; RegKey
004E512F BA 80514E00 mov edx,隐形阅读.004E5180 ; RegKey
004E5134 8BC3 mov eax,ebx
004E5136 8B30 mov esi,dword ptr ds:[eax]
004E5138 FF56 08 call dword ptr ds:[esi+0x8]
004E513B 8BC3 mov eax,ebx
004E513D E8 66FCF1FF call 隐形阅读.00404DA8
004E5142 B3 01 mov bl,0x1
004E5144 EB 02 jmp X隐形阅读.004E5148
004E5146 33DB xor ebx,ebx
004E5148 33C0 xor eax,eax
004E514A 5A pop edx
004E514B 59 pop ecx
004E514C 59 pop ecx
004E514D 64:8910 mov dword ptr fs:[eax],edx
004E5150 68 6A514E00 push 隐形阅读.004E516A
004E5155 8D45 F8 lea eax,dword ptr ss:[ebp-0x8]
004E5158 BA 02000000 mov edx,0x2
004E515D E8 2E17F2FF call 隐形阅读.00406890
004E5162 C3 retn
004E5163 ^ E9 3806F2FF jmp 隐形阅读.004057A0
004E5168 ^ EB EB jmp X隐形阅读.004E5155
004E516A 8BC3 mov eax,ebx
004E516C 5E pop esi
004E516D 5B pop ebx
004E516E 59 pop ecx
004E516F 59 pop ecx
004E5170 5D pop ebp
004E5171 C3 retn
恩。。看不出有什么。。有个regkey。。恩。。这个通过其他字符判断。。好像这个用于储存注册码的。。。
上面有个je :
004E5109 /74 3B je X隐形阅读.004E5146
这下可以判断这个是否写入注册码的Regkey.ini。。。一般软件是注册成功才会写入。。这个也不例外。。
既然这样。。我们马上判断
004E5102 E8 55FFFFFF call 隐形阅读.004E505C
属于关键call。。。恩。。步入。。
好吧。。到了这里我们步过。。中途你会看到注册码与机器码的交替出现。。。。
当走到:
004E5097 8B45 F4 mov eax,dword ptr ss:[ebp-0xC]
时:
哈哈。。。
堆栈线中可疑的码出现了。。拿去试试吧。。看看是不是注册码。。。
恩。。果然不出所料。。
这下注册成功了。。还在目录下生成一个regkey.ini用于记录的。。
看看有没有限制。。恩。。没有出4秒限制。。。
这样简单的追码成功。 。。如果你还想知道怎么产生的。。你就继续下去吧。。这里我就不讲解了。。
下面是爆破。。
根据上面追码的原理我们很容易爆破。。他不是有个比较call吗。。我们来改改。。
[/pre][pre]004E505C /$ 55 push ebp
004E505D |. 8BEC mov ebp,esp
004E505F |. 83C4 F4 add esp,-0xC
004E5062 |. 53 push ebx
004E5063 |. 33C9 xor ecx,ecx
004E5065 |. 894D F4 mov [local.3],ecx
004E5068 |. 8955 F8 mov [local.2],edx
004E506B |. 8945 FC mov [local.1],eax
004E506E |. 8B45 FC mov eax,[local.1]
004E5071 |. E8 0A18F2FF call 隐形阅读.00406880
004E5076 |. 8B45 F8 mov eax,[local.2]
004E5079 |. E8 0218F2FF call 隐形阅读.00406880
004E507E |. 33C0 xor eax,eax
004E5080 |. 55 push ebp
004E5081 |. 68 C0504E00 push 隐形阅读.004E50C0
004E5086 |. 64:FF30 push dword ptr fs:[eax]
004E5089 |. 64:8920 mov dword ptr fs:[eax],esp
004E508C |. 8D55 F4 lea edx,[local.3]
004E508F |. 8B45 FC mov eax,[local.1]
004E5092 |. E8 D1FDFFFF call 隐形阅读.004E4E68
004E5097 |. 8B45 F4 mov eax,[local.3]
004E509A |. 8B55 F8 mov edx,[local.2]
004E509D 3BC0 cmp eax,eax ; 这个call比较注册码 我们将这里改为cmp eax,eax
004E509F 90 nop
004E50A0 90 nop
004E50A1 90 nop
004E50A2 |. 0F94C3 sete bl
004E50A5 |. 33C0 xor eax,eax
004E50A7 |. 5A pop edx
004E50A8 |. 59 pop ecx
004E50A9 |. 59 pop ecx
004E50AA |. 64:8910 mov dword ptr fs:[eax],edx
004E50AD |. 68 C7504E00 push 隐形阅读.004E50C7
004E50B2 |> 8D45 F4 lea eax,[local.3]
004E50B5 |. BA 03000000 mov edx,0x3
004E50BA |. E8 D117F2FF call 隐形阅读.00406890
004E50BF \. C3 retn
004E50C0 .^ E9 DB06F2FF jmp 隐形阅读.004057A0
004E50C5 .^ EB EB jmp X隐形阅读.004E50B2
004E50C7 . 8BC3 mov eax,ebx
004E50C9 . 5B pop ebx
004E50CA . 8BE5 mov esp,ebp
004E50CC . 5D pop ebp
004E50CD . C3 retn
看上面代码
将004E509D E8 CE1EF2FF call 隐形阅读.00406F70 ; 这个call比较注册码
改为:
cmp eax,eax
就可以达到爆破的目的。。。
上面不是有:
004E5097 |. 8B45 F4 mov eax,[local.3]
004E509A |. 8B55 F8 mov edx,[local.2]
其中eax是真码。。。edx是我们 的输入码
我们让他真码与真码比较就ok了
是不是很简单啊。。。
ok 教程完毕。希望这对你有所帮助。。
转载请注明:
www.52pojie.cn By ICey
下面是用到软件:
invisiblereader.zip
(1.01 MB, 下载次数: 320)
|
免费评分
-
查看全部评分
|