reversing.kr 上面一个CM的简单分析,replace.exe
本帖最后由 Poner 于 2017-10-13 14:27 编辑之前看到论坛里有人分享这个站点的破解文章,感觉挺好玩,所以也注册了一个,玩了一下,现在只搞定了几个简单的,目前,820分,有空就玩一下!
网站有人发过,我再发一下:http://reversing.kr/challenge.php,这应该不违规吧!不算广告吧!!
这次分享的是里面的replace 这个,以下是代码分析,加了很多注释!
00401020 .55 push ebp
00401021 .8BEC mov ebp, esp
00401023 .817D 0C 11010>cmp dword ptr , 111
0040102A .74 06 je short Replace.00401032
0040102C .33C0 xor eax, eax
0040102E .5D pop ebp
0040102F .C2 1000 retn 10
00401032 >8B45 10 mov eax, dword ptr
00401035 .25 FFFF0000 and eax, 0FFFF
0040103A .83E8 02 sub eax, 2 ;Switch (cases 2..3EB)
0040103D .74 56 je short Replace.00401095
0040103F .2D E9030000 sub eax, 3E9
00401044 .74 06 je short Replace.0040104C
00401046 .33C0 xor eax, eax ;Default case of switch 0040103A
00401048 .5D pop ebp
00401049 .C2 1000 retn 10
0040104C >56 push esi ;Case 3EB of switch 0040103A
0040104D .8B75 08 mov esi, dword ptr
00401050 .6A 00 push 0 ; /IsSigned = FALSE
00401052 .6A 00 push 0 ; |pSuccess = NULL
00401054 .68 EA030000 push 3EA ; |ControlID = 3EA (1002.)
00401059 .56 push esi ; |hWnd
0040105A .FF15 9C504000 call dword ptr [<&USER32.GetDlgItemIn>; \GetDlgItemInt
00401060 .A3 D0844000 mov dword ptr , eax ;//取得一个无符号整型数值,也就是我们输入的是一个无符号整数
00401065 .E8 05360000 call Replace.0040466F ;//F7跟踪进入
0040106A .33C0 xor eax, eax
0040106C .E9 1F360000 jmp Replace.00404690
00401071 >EB 11 jmp short Replace.00401084 ;//我们输入的整数经过代码转换处理,最终代码会把这个401071给NOP掉,这样才能出现正确的弹窗
00401073 .68 34 60 40 0>ascii "h4`@",0 ;Correct! ///通过查找这个字符串可以定位到这里
00401078 .68 E9030000 push 3E9 ; |ControlID = 3E9 (1001.)
0040107D .56 push esi ; |hWnd
0040107E .FF15 A0504000 call dword ptr [<&USER32.SetDlgItemTe>; \SetDlgItemTextA
00401084 >B8 01000000 mov eax, 1
00401089 .90 nop
0040108A .90 nop
0040108B .90 nop
0040108C .90 nop
0040108D .90 nop
0040108E .90 nop
0040108F .90 nop
00401090 .5E pop esi
00401091 .5D pop ebp
00401092 .C2 1000 retn 10
00401095 >8B45 08 mov eax, dword ptr ;Case 2 of switch 0040103A
00401098 .6A 02 push 2 ; /Result = 2
0040109A .50 push eax ; |hWnd
0040109B .FF15 A4504000 call dword ptr [<&USER32.EndDialog>]; \EndDialog
004010A1 .B8 01000000 mov eax, 1
004010A6 .5D pop ebp
004010A7 .C2 1000 retn 10
0040466F $E8 06000000 call Replace.0040467A
00404674 81 db 81 ;//现在是这样的,这个是OD的分析有问题,因为加了花,我们右键,删除这句的分析
00404675 .05 D0844000 add eax, Replace.004084D0
0040467A .C705 16604000>mov dword ptr , 619060EB ;//F7过来到这里,看到上面的404674这句了吧,这里显示是,DB 81
00404684 .E8 00000000 call Replace.00404689
00404689/$FF05 D0844000 inc dword ptr
0040468F\.C3 retn
00404690 >A1 D0844000 mov eax, dword ptr
00404695 .68 9F464000 push Replace.0040469F
0040469A .E8 EAFFFFFF call Replace.00404689
0040469F .C705 6F464000>mov dword ptr , C39000C6
004046A9 .E8 C1FFFFFF call Replace.0040466F
004046AE .40 inc eax
004046AF .E8 BBFFFFFF call Replace.0040466F
004046B4 .C705 6F464000>mov dword ptr , 6E8
004046BE .58 pop eax
004046BF .B8 FFFFFFFF mov eax, -1
004046C4 .^ E9 A8C9FFFF jmp Replace.00401071
//然后我们看到的就是这样的代码了,他把我们输入的值加上了,0x601605c7
00404674 8105 D0844000 C>add dword ptr , 601605C7 ;
0040467E 40 inc eax //下面几句是花指令,不用管,往下执行
0040467F 00EB add bl, ch
00404681 60 pushad
00404682 90 nop
00404683 61 popad
00404684 E8 00000000 call Replace.00404689
00404689 FF05 D0844000 inc dword ptr //这里是把计算后的再加1
0040468F C3 retn
00404690 A1 D0844000 mov eax, dword ptr
00404695 68 9F464000 push Replace.0040469F
0040469A E8 EAFFFFFF call Replace.00404689
0040469F C705 6F464000 C>mov dword ptr , C39000C6//这里也是个重点,改变40466f的代码了
004046A9 E8 C1FFFFFF call Replace.0040466F
004046AE 40 inc eax //这里加1也就是执行两次mov ,90,这也告诉我们,他要修改的地方是两个字节,正是,401071
004046AF E8 BBFFFFFF call Replace.0040466F
004046B4 C705 6F464000 E>mov dword ptr , 6E8//这句就是还原,其实没啥用
004046BE 58 pop eax
004046BF B8 FFFFFFFF mov eax, -1
004046C4^ E9 A8C9FFFF jmp Replace.00401071//最后跳向401071,因为原来的JMP被NOP掉,所以直接显示成功的提示
//40469f的代码,执行后是下面的效果
0040466F/$C600 90 mov byte ptr , 90//90就是NOP,应该都知道
//根具上面的分析,我们要NOP的就是401071,让那个JMP失效
00404672\.C3 retn
算法总结:
整个算法就是利用了无符号数的溢出,无符号最大值是0~4294967295,我们输入一个数,这个数加上0x601605c7时,会超过这个最大值,超出的值再经过3次+1操做,最终是0x401071
写的很乱,不过应该是说清楚了,这个值是多少,自己计算一下吧
语文学的不好.写的很乱,请谅解,第一次在吾爱发破文,写的不好,请大家不要喷,谢谢!网站上有些CM还是不算难的,因为我也不是什么高手,有空的时候,可以玩一下! 帮你编辑了一下好看多了以后发帖学着吧 感谢大神分享,谢谢! Poner 发表于 2017-10-13 14:28
帮你编辑了一下好看多了以后发帖学着吧
历害了,真要学啊,这编辑完,好看多了,一下就高大上了,感谢!{:1_921:} 学习了,感谢分享 加油做的很好!!!!{:1_931:} 学习了..
页:
[1]