好友
阅读权限25
听众
最后登录1970-1-1
|
Syer
发表于 2013-12-13 22:26
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。
本帖最后由 Chief 于 2013-12-14 17:33 编辑
先一张效果图。
开始分析吧。本人不才,弄了半天才知道算法是什么。。。。
这里很容易就可以找到 而关键跳的上面那个call就是关键call 这里要感谢@Shark恒 的教导,让我可以进门! 致以崇高的敬意!
下面就是算法了
004019ED |> /8D7E 07 /lea edi,dword ptr ds:[esi+0x7] ; 密码。。
004019F0 |. |8BC1 |mov eax,ecx
004019F2 |. |33D2 |xor edx,edx
004019F4 |. |F7F7 |div edi
004019F6 |. |33D2 |xor edx,edx
004019F8 |. |8BF8 |mov edi,eax
004019FA |. |8BC1 |mov eax,ecx
004019FC |. |F7F6 |div esi
004019FE |. |33D2 |xor edx,edx
00401A00 |. |03C7 |add eax,edi
00401A02 |. |BF 1A000000 |mov edi,0x1A
00401A07 |. |F7F7 |div edi
00401A09 |. |8A442E F8 |mov al,byte ptr ds:[esi+ebp-0x8]
00401A0D |. |80C2 41 |add dl,0x41
00401A10 |. |3AC2 |cmp al,dl 这里是真码和假吗的比较 al为假吗 dl为真码
00401A12 |0F85 AC000000 |jnz KeyGenMe.00401AC4 ; 作者是一位数字一位数字的验证,一旦不同就会让跳转实现,咱们爆破的时候就可以 先nop这里
00401A18 |. |46 |inc esi
00401A19 |. |8D56 F8 |lea edx,dword ptr ds:[esi-0x8]
00401A1C |83FA 04 |cmp edx,0x4
00401A1F ^\7C CC jl short KeyGenMe.004019ED 这里是当四位密码验证完全后 就会往下比较
00401A21 807D 04 2D cmp byte ptr ss:[ebp+0x4],0x2D ; 判断第五位数是否为 “-” 如果不是的话就跳转。,
00401A25 |. 74 0A je short KeyGenMe.00401A31
第二部分四位密码在这里面 方法和上面一样
00401A49 |> /8B4424 10 /mov eax,dword ptr ss:[esp+0x10]
00401A4D |> |8D2C30 lea ebp,dword ptr ds:[eax+esi]
00401A50 |. |8BC1 |mov eax,ecx
00401A52 |. |33D2 |xor edx,edx
00401A54 |. |F7F5 |div ebp
00401A56 |. |BD 1A000000 |mov ebp,0x1A
00401A5B |. |8BC2 |mov eax,edx
00401A5D |. |33D2 |xor edx,edx
00401A5F |. |03C7 |add eax,edi
00401A61 |. |F7F5 |div ebp
00401A63 |. |8A06 |mov al,byte ptr ds:[esi]
00401A65 |. |80C2 41 |add dl,0x41
00401A68 |. |3AC2 |cmp al,dl al为假吗 dl为真码
00401A6A |75 58 |jnz short KeyGenMe.00401AC4
00401A6C |. |43 |inc ebx
00401A6D |. |03F9 |add edi,ecx
00401A6F |. |46 |inc esi
00401A70 |. |83FB 09 |cmp ebx,0x9
00401A73 |.^\7C D4 \jl short KeyGenMe.00401A49
00401A75 |. 8B7C24 1C mov edi,dword ptr ss:[esp+0x1C]
00401A79 |. 807F 09 2D cmp byte ptr ds:[edi+0x9],0x2D ;判断 “-” 符号 同上
00401A7D |. 74 0A je short KeyGenMe.00401A89
第三部分
00401A8E |> /8D5E 02 /lea ebx,dword ptr ds:[esi+0x2]
00401A91 |. |8BC1 |mov eax,ecx
00401A93 |. |33D2 |xor edx,edx
00401A95 |. |F7F3 |div ebx
00401A97 |. |8BC1 |mov eax,ecx
00401A99 |. |8BDA |mov ebx,edx
00401A9B |. |33D2 |xor edx,edx
00401A9D |. |F7F6 |div esi
00401A9F |. |33D2 |xor edx,edx
00401AA1 |. |03C3 |add eax,ebx
00401AA3 |. |BB 1A000000 |mov ebx,0x1A
00401AA8 |. |F7F3 |div ebx
00401AAA |. |8A4437 AD |mov al,byte ptr ds:[edi+esi-0x53]
00401AAE |. |80C2 41 |add dl,0x41
00401AB1 |. |3AC2 |cmp al,dl al为假吗 dl为真码
00401AB3 |75 0F |jnz short KeyGenMe.00401AC4
00401AB5 |. |46 |inc esi
00401AB6 |. |8D46 AD |lea eax,dword ptr ds:[esi-0x53]
00401AB9 |. |83F8 0E |cmp eax,0xE
00401ABC |.^\7C D0 \jl short KeyGenMe.00401A8E
00401ABE |. 807F 0E 2D cmp byte ptr ds:[edi+0xE],0x2D ; 判断 “-” 符号 同上
00401AC2 |. 74 0A je short KeyGenMe.00401ACE
最后四位的key
00401AD3 |> /8BC1 mov eax,ecx
00401AD5 |. |33D2 xor edx,edx
00401AD7 |. |F7F6 div esi
00401AD9 |. |8BC1 mov eax,ecx
00401ADB |. |8BDA mov ebx,edx
00401ADD |. |33D2 xor edx,edx
00401ADF |. |F7F6 div esi
00401AE1 |. |33D2 xor edx,edx
00401AE3 |. |03C3 add eax,ebx
00401AE5 |. |BB 1A000000 mov ebx,0x1A
00401AEA |. |F7F3 div ebx
00401AEC |. |8A043E mov al,byte ptr ds:[esi+edi]
00401AEF |. |80C2 41 add dl,0x41
00401AF2 |. |3AC2 cmp al,dl al为假吗 dl为真码
00401AF4 ^|75 CE jnz short KeyGenMe.00401AC4 控制在这里了。。判断 是否为第十六位是否为C 不是的话就跳转
00401AF6 |. |46 inc esi
00401AF7 |. |83FE 13 cmp esi,0x13
00401AFA |.^\7C D7 jl short KeyGenMe.00401AD3 最后程序会这里返回回去正确的retn 、key也就得到了!
小小的分析供大家参考如有错误 请指出,感谢!
|
免费评分
-
查看全部评分
|