Twist1逆向分析
Reversing.kr上的一个逆向题目…
这个程序有Anti,我用的吾爱破解修改版OD,稍微配置下就可以无视反调试了。程序也加了壳,可以无视…

载入后直接运行,然后搜索字符串,可以看到有“Correct”,”Wrong”等,跟过去,可以看见在上边有个比较,可以确定上边的那个CALL就是算法CALL了…


在这个CALL下一个端点,随便输入一个假码,我这而输入”zhighest”,回车后断下,然后跟进这个CALL

然后下边就是一些反调试的东西了,如果没有过反调试的插件,可以看我的图,手动修改跳转的实现…


在00407486处有一段代码
| 00407486 . 33DB xor ebx,ebx 00407488 . 8A1D 91B94000 mov bl,byte ptr ds:[0x40B991] ; 取输入字符串的第7位,简单运算后存入[0x40C450] 0040748E . 80F3 36 xor bl,0x36 00407491 . 881D 50C44000 mov byte ptr ds:[0x40C450],bl
|
然后00407600在这儿有一处验证…
| 00407600 . 803D 50C44000>cmp byte ptr ds:[0x40C450],0x36 ; 取出第七位的计算结果 00407607 . 0F85 F8020000 jnz Twist1.00407905 ; 只有第7位为0时才不跳转,所以可以确定密码为6位
|
慢慢跟,就到0040760F了…密码验证正式开始!
遇到CALL一定要跟进去,不要步过…跟进0040762B这个CALL,发现是乱码,“从模块中删除分析”即可…

密码验证是一位一位验证的,代码也不连续,大跳很多,为了方便阅读,我把每位的验证代码放在一起…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| 第一位 0040760F A0 90B94000 mov al,byte ptr ds:[0x40B990] 0040762D C0C8 06 ror al,0x6 00407630 A2 00B04000 mov byte ptr ds:[0x40B000],al 00407700 8A0D 00B04000 mov cl,byte ptr ds:[0x40B000] 004076D0 80F9 49 cmp cl,0x49 004076D3 0F85 2C020000 jnz Twist1.00407905
第三位 00407783 A0 E0CC4000 mov al,byte ptr ds:[0x40CCE0] 00407788 34 77 xor al,0x77 004077A3 3C 35 cmp al,0x35 004077A5 75 59 jnz XTwist1.00407800
第二位 0040780C 8B0D 80CD4000 mov ecx,dword ptr ds:[0x40CD80] 004077AC 80F1 20 xor cl,0x20 004077C5 80F9 69 cmp cl,0x69 004077C8 ^ 75 F0 jnz XTwist1.004077BA
又是第一位 004077EC 8A15 E8CC4000 mov dl,byte ptr ds:[0x40CCE8] 00407814 80F2 10 xor dl,0x10 00407817 80FA 43 cmp dl,0x43 0040781A 75 08 jnz XTwist1.00407824
第六位 0040778C 8A0D E4CC4000 mov cl,byte ptr ds:[0x40CCE4] 00407792 880D F4CF4000 mov byte ptr ds:[0x40CFF4],cl //最后才计算 004078A6 C005 F4CF4000 0>rol byte ptr ds:[0x40CFF4],0x4 00407F77 8A15 F4CF4000 mov dl,byte ptr ds:[0x40CFF4] 00407F7D C605 777F4000 F>mov byte ptr ds:[0x407F77],0xFD 00407F84 80FA 14 cmp dl,0x14 00407F87 75 36 jnz XTwist1.00407FBF
取第四位 0040790E 8A15 01C44000 mov dl,byte ptr ds:[0x40C401] 00407914 80F2 21 xor dl,0x21 00407918 80FA 64 cmp dl,0x64 0040791B 0F84 AD040000 je Twist1.00407DCE
第五位 00407DCE 8A15 30CD4000 mov dl,byte ptr ds:[0x40CD30] 00407E02 80F2 46 xor dl,0x46 00407E1A 3C 08 cmp al,0x8 00407E1C 75 02 jnz XTwist1.00407E20
|
最后的密码为:REBNEA
