【吾爱2013CM大赛解答】-- loudy 分析
本帖最后由 Chief 于 2013-12-14 17:33 编辑先一张效果图。
开始分析吧。本人不才,弄了半天才知道算法是什么。。。。
这里很容易就可以找到 而关键跳的上面那个call就是关键call这里要感谢@Shark恒 的教导,让我可以进门! 致以崇高的敬意!
下面就是算法了
004019ED|> /8D7E 07 /lea edi,dword ptr ds: ;密码。。
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:
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:
00401A1C |83FA 04 |cmp edx,0x4
00401A1F ^\7C CC jl short KeyGenMe.004019ED 这里是当四位密码验证完全后 就会往下比较
00401A21 807D 04 2D cmp byte ptr ss:,0x2D ;判断第五位数是否为 “-”如果不是的话就跳转。,
00401A25|.74 0A je short KeyGenMe.00401A31
第二部分四位密码在这里面 方法和上面一样
00401A49|> /8B4424 10 /mov eax,dword ptr ss:
00401A4D|> |8D2C30 lea ebp,dword ptr ds:
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:
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:
00401A79|.807F 09 2D cmp byte ptr ds:,0x2D ;判断“-” 符号 同上
00401A7D|.74 0A je short KeyGenMe.00401A89
第三部分
00401A8E|> /8D5E 02 /lea ebx,dword ptr ds:
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:
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:
00401AB9|. |83F8 0E |cmp eax,0xE
00401ABC|.^\7C D0 \jl short KeyGenMe.00401A8E
00401ABE|.807F 0E 2D cmp byte ptr ds:,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:
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也就得到了!
小小的分析供大家参考如有错误 请指出,感谢!
膜拜小千大牛 看见迁牛我就滚进来了,膜拜会算法的大牛! 这是什么,好像有一贴与此一样
页:
[1]