首页
社区
课程
招聘
[原创]第一题 CrackMe逆向分析
发表于: 2016-11-1 16:33 6037

[原创]第一题 CrackMe逆向分析

2016-11-1 16:33
6037
将crackme拖入od,F9发现有反调试,启动StrongOD过掉放调试。

在GetWindowTextW 处下断点,发现启动新线程,如下:

00402763   .  6A 00         push    0
00402765   .  57            push    edi
00402766   .  68 00214000   push    00402100
0040276B   >  6A 00         push    0                                ; |StackSize = 0
0040276D   .  6A 00         push    0                                ; |pSecurity = NULL
0040276F   .  FF15 74804100 call    dword ptr [<&KERNEL32.CreateThre>; \CreateThread
00402775   >  8B4D FC       mov     ecx, dword ptr [ebp-4]           ;  Case 68 of switch 00402296
00402778   .  33C0          xor     eax, eax

线程入口处下断
004020E0  /.  55            push    ebp
004020E1  |.  8BEC          mov     ebp, esp
004020E3  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]
004020E6  |.  33D2          xor     edx, edx
004020E8  |.  E8 C3FBFFFF   call    00401CB0
004020ED  |.  6A 14         push    14
004020EF  |.  FF75 08       push    dword ptr [ebp+8]
004020F2  |.  E8 ED0B0000   call    00402CE4
004020F7  |.  83C4 08       add     esp, 8
004020FA  |.  33C0          xor     eax, eax
004020FC  |.  5D            pop     ebp
004020FD  \.  C2 0400       retn    4

注册码长度必须为7个字符
00401DD7   . /7F 65         jg      short 00401E3E
00401DD9   . |8D85 34FFFFFF lea     eax, dword ptr [ebp-CC]
00401DDF   . |50            push    eax
00401DE0   . |53            push    ebx
00401DE1   . |E8 8A0A0000   call    <strcpy>
00401DE6   . |83FE 07       cmp     esi, 7
00401DE9   . |73 0B         jnb     short 00401DF6

第3到第6个字符必须为15pb
004019F1      C745 F0 31003>mov     dword ptr [ebp-10], 350031
004019F8      C745 F4 50004>mov     dword ptr [ebp-C], 00420050
004019FF      8D77 04       lea     esi, dword ptr [edi+4]
00401A02      66:8945 F8    mov     word ptr [ebp-8], ax
00401A06      33C9          xor     ecx, ecx
00401A08      0F1F          ???                                      ;  未知命令
00401A0A      8400          test    byte ptr [eax], al
00401A0C      0000          add     byte ptr [eax], al
00401A0E      0000          add     byte ptr [eax], al
00401A10   >  66:8B444D F0  mov     ax, word ptr [ebp+ecx*2-10]
00401A15   .  66:3B06       cmp     ax, word ptr [esi]
00401A18   .  75 1F         jnz     short 00401A39
00401A1A   .  41            inc     ecx
00401A1B   .  83C6 02       add     esi, 2
00401A1E   .  83F9 04       cmp     ecx, 4
00401A21   .^ 72 ED         jb      short 00401A10
00401A23   .  8BD7          mov     edx, edi

比较前两个字符是否为12
00401810   > /66:8B01       mov     ax, word ptr [ecx]
00401813   . |66:3B040E     cmp     ax, word ptr [esi+ecx]
00401817   . |75 42         jnz     short 0040185B
00401819   . |83C2 06       add     edx, 6
0040181C   . |83C1 02       add     ecx, 2
0040181F   . |83FA 39       cmp     edx, 39
00401822   .^\7E EC         jle     short 00401810

这里第一个字符+xx必须为63,xx为63-(yy),yy为第二个字符,这个yy可能跟次数有关,每次从第二位开始每次移动一个字符。且满足'1'+yy=0x63,所以 前两个字符为12就可以了。
00401824   .  0FB74F 12     movzx   ecx, word ptr [edi+12]
00401828   .  0FB703        movzx   eax, word ptr [ebx]
0040182B   .  03C8          add     ecx, eax
0040182D   .  83F9 63       cmp     ecx, 63
00401830   .  75 29         jnz     short 0040185B

计算最后一个字符,需要‘7’+ 次数 = 最后一位,当次数为1时,最后一位为'8'
00401832   .  8B45 B4       mov     eax, dword ptr [ebp-4C]
00401835   .  0FB74F 0C     movzx   ecx, word ptr [edi+C]
00401839   .  0308          add     ecx, dword ptr [eax]
0040183B   .  8B45 B0       mov     eax, dword ptr [ebp-50]
0040183E   .  0FB700        movzx   eax, word ptr [eax]
00401841   .  3BC1          cmp     eax, ecx
00401843   .  75 16         jnz     short 0040185B
00401845   .  5F            pop     edi
00401846   .  5E            pop     esi
00401847   .  B8 01000000   mov     eax, 1

经过以上分析得出注册码为 1215pb8 ,由于次数参与运算,所以如果第一次没输入正确的注册码,那么以后无论输入什么都不会正确。

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 9
活跃值: (175)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
大神呀,一到七题都破解了
2016-11-15 22:02
0
雪    币: 195
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
简洁有力的分析
2016-11-16 10:47
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
怎么发现启动新线程的,怎么跟踪到的呢?
2017-3-25 09:58
0
雪    币: 425
活跃值: (450)
能力值: ( LV4,RANK:48 )
在线值:
发帖
回帖
粉丝
yyp
5
一到getwindowtext就跟飞了,请问是怎么回事,请帮助解决,谢谢。
2017-4-8 13:59
0
雪    币: 3053
活跃值: (891)
能力值: ( LV13,RANK:1300 )
在线值:
发帖
回帖
粉丝
6
可以在  00402763  处下断,如果没有断下,说明OD或StrongOD有问题,尝试更换一下。
2017-4-10 09:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
请问一下,我在OD中运行时,被terminated了,这是怎么回事呢?
2017-12-17 19:38
0
游客
登录 | 注册 方可回帖
返回
//