首页
社区
课程
招聘
一个crackme的另类分析
2005-10-18 01:01 4784

一个crackme的另类分析

2005-10-18 01:01
4784
gg1211[CZG][XXCG]
难度 一般
==========================================================
【破解分析过程】
==========================分析过程====================================
PEID,查看没有加壳,ASPack 1.06b / 1.061b -> Alexey Solodovnikov家的壳
我晕,这个有工具Caspr110可以脱,这个在看雪有下载,
今天我破的这个crackme和前两个都是一个系列的,这个是难度最大的

下面我门将进行破解
先运行看看
有错误提示

呵呵,看来可以用w32dasm静态分析
看看,有什么错误提示

step5 has been solved step5 unlock....;反正就是说完整破戒
step5 has been solved ,but not ;反正是说暴力破解没有找到注册码什么的
step5 has not been solved.
Step5Key.key

看了这个,首先想到的是他是重启验证行的文件保护类,为什么??就是
这个动东了Step5Key.key

既然怀疑,那就验证
od载入
下断bp createfilea
连续来年两次f9
看见右下角有什么
0012FC80  00403839  /CALL 到 CreateFileA 来自 step5.00403834
0012FC84  0040B289  |FileName = "Step5Key.key"
0012FC88  80000000  |Access = GENERIC_READ
0012FC8C  00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012FC90  0012FCAC  |pSecurity = 0012FCAC
0012FC94  00000003  |Mode = OPEN_EXISTING
0012FC98  00000000  |Attributes = 0
0012FC9C  00000000  \hTemplateFile = NULL

看来是真的
去掉断点,重新载入

既然这样那就开工了
先用notpad输入gg1211@123456789
然后保存为Step5Key.key,放在这个crackme 同一目录下

下断 bp readfile
运行,拦截
右下提示
0012FC78  00403C39  /CALL 到 ReadFile 来自 step5.00403C34
0012FC7C  0000006C  |hFile = 0000006C (window)
0012FC80  00902A28  |Buffer = 00902A28
0012FC84  00000200  |BytesToRead = 200 (512.)
0012FC88  0012FC90  |pBytesRead = 0012FC90
0012FC8C  00000000  \pOverlapped = NULL

返回用户领空
00403C39   48      dec eax
00403C3A   74 08     je short step5.00403C44
00403C3C   E8 730A0000  call step5.004046B4
00403C41   59      pop ecx
00403C42   5D      pop ebp
00403C43   C3      retn
00403C44   8B45 FC    mov eax,dword ptr ss:[ebp-4]
00403C47   59      pop ecx
00403C48   5D      pop ebp
00403C49   C3      retn
00403C4A   90      nop
00403C4B   90      nop
00403C4C   55      push ebp
00403C4D   8BEC     mov ebp,esp
00403C4F   8B45 10    mov eax,dword ptr ss:[ebp+10]
00403C52   50      push eax
00403C53   8B55 0C    mov edx,dword ptr ss:[ebp+C]
00403C56   52      push edx
00403C57   8B4D 08    mov ecx,dword ptr ss:[ebp+8]
00403C5A   51      push ecx
00403C5B   E8 D0FCFFFF  call step5.00403930
00403C60   83C4 0C    add esp,0C
00403C63   5D      pop ebp
00403C64   C3      retn
00403C65   90      nop
00403C66   90      nop
00403C67   90      nop
00403C68   55      push ebp
00403C69   8BEC     mov ebp,esp
00403C6B   51      push ecx
00403C6C   8B45 08    mov eax,dword ptr ss:[ebp+8]
00403C6F   3B05 1CBD4000 cmp eax,dword ptr ds:[40BD1C]
00403C75   72 0B     jb short step5.00403C82
00403C77   6A 06     push 6
00403C79   E8 CA090000  call step5.00404648
00403C7E   59      pop ecx
00403C7F   59      pop ecx
00403C80   5D      pop ebp
00403C81   C3      retn
00403C82   6A 00     push 0
00403C84   8D55 FC    lea edx,dword ptr ss:[ebp-4]
00403C87   52      push edx
00403C88   8B4D 10    mov ecx,dword ptr ss:[ebp+10]
00403C8B   51      push ecx
00403C8C   8B55 0C    mov edx,dword ptr ss:[ebp+C]
00403C8F   52      push edx
00403C90   8B0485 A4DD40>mov eax,dword ptr ds:[eax*4+40DDA>
00403C97   50      push eax

f8但步,可能有点远,多运行点,哟,谁扔砖头啊,你是大哥,我继续往下将还不成
到这里就要注意了

0040131C   59      pop ecx           ; step5.0040B8B4
0040131D   A2 75D84000  mov byte ptr ds:[40D875],al
00401322   8B0B     mov ecx,dword ptr ds:[ebx]
00401324   A0 75D84000  mov al,byte ptr ds:[40D875]
00401329   8881 4CB14000 mov byte ptr ds:[ecx+40B14C],al
0040132F   FF03     inc dword ptr ds:[ebx]
00401331   833B 0F    cmp dword ptr ds:[ebx],0F
00401334  ^ 72 DB     jb short step5.00401311
00401336   FF35 9CD84000 push dword ptr ds:[40D89C] ; step5.0040B8B4
0040133C   E8 132A0000  call step5.00403D54
00401341   59      pop ecx
00401342   33D2     xor edx,edx
00401344   8913     mov dword ptr ds:[ebx],edx
00401346   EB 0F     jmp short step5.00401357
00401348 |> 8A0B      /MOV CL,BYTE PTR DS:[EBX] ;这里这个循环很重要
0040134A |. 80C1 77    |ADD CL,77
0040134D |. 8B03      |MOV EAX,DWORD PTR DS:[EBX]
0040134F |. 3088 4CB14000 |XOR BYTE PTR DS:[EAX+40B14C],CL
00401355 |. FF03      |INC DWORD PTR DS:[EBX]
00401357 |> 833B 0F     CMP DWORD PTR DS:[EBX],0F
0040135A |.^72 EC     \JB SHORT step5.00401348
67(g)xor   77 =      10
67(g)xor   78=      1F
31(1)xor   79=      48
32(2) xor      7A=     48
31(1)xor       7B=     4A
31(1)xor      7C=     4D
40(@)xor     7D=     3D
31(1)xor      7E=     4F
32(2)xor      7F=     4D
33(3)xor      80=     B3
34(4)xor      81=     B5
35(5)xor      82=     B7
36(6)xor      83=     B5
37(7)xor      84=     B3
38(8)xor      85=     BD

0040135C   68 5CB14000  push step5.0040B15C ; ASCII "Step 5 was fun!"
00401361   68 4CB14000  push step5.0040B14C
00401366   E8 4D130000  call step5.004026B8 ;这个call关键,等会要跟进去的
0040136B   83C4 08    add esp,8
0040136E   85C0     test eax,eax
00401370   75 61     jnz short step5.004013D3
00401372   68 30000400  push 40030
00401377   68 CBB24000  push step5.0040B2CB ; ASCII "Mission Complete"
0040137C   68 98B24000  push step5.0040B298 ; ASCII "Step5 has been solved
Step5 unlock code is: 1A2E3D"
00401381   6A 00     push 0
00401383   E8 868D0000  call <jmp.&USER32.MessageBoxA>
00401388   6A 01     push 1

来到关键call时跟进
004026B8 /$ 8B4C24 04   MOV ECX,DWORD PTR SS:[ESP+4] ; step5.0040B14C
004026BC |. 8B5424 08   MOV EDX,DWORD PTR SS:[ESP+8]
004026C0 |. 53       PUSH EBX
004026C1 |. 33C0      XOR EAX,EAX
004026C3 |. 33DB      XOR EBX,EBX
004026C5 |> 8A01      /MOV AL,BYTE PTR DS:[ECX]
004026C7 |. 8A1A      |MOV BL,BYTE PTR DS:[EDX]
004026C9 |. 2BC3      |SUB EAX,EBX
004026CB |. 75 34     |JNZ SHORT step5.00402701
004026CD |. 84DB      |TEST BL,BL
004026CF |. 74 30     |JE SHORT step5.00402701
004026D1 |. 8A41 01    |MOV AL,BYTE PTR DS:[ECX+1]
004026D4 |. 8A5A 01    |MOV BL,BYTE PTR DS:[EDX+1]
004026D7 |. 2BC3      |SUB EAX,EBX
004026D9 |. 75 26     |JNZ SHORT step5.00402701
004026DB |. 84DB      |TEST BL,BL
004026DD |. 74 22     |JE SHORT step5.00402701
004026DF |. 8A41 02    |MOV AL,BYTE PTR DS:[ECX+2]
004026E2 |. 8A5A 02    |MOV BL,BYTE PTR DS:[EDX+2]
004026E5 |. 2BC3      |SUB EAX,EBX
004026E7 |. 75 18     |JNZ SHORT step5.00402701
004026E9 |. 84DB      |TEST BL,BL
004026EB |. 74 14     |JE SHORT step5.00402701
004026ED |. 8A41 03    |MOV AL,BYTE PTR DS:[ECX+3]
004026F0 |. 8A5A 03    |MOV BL,BYTE PTR DS:[EDX+3]
004026F3 |. 2BC3      |SUB EAX,EBX
004026F5 |. 75 0A     |JNZ SHORT step5.00402701
004026F7 |. 83C1 04    |ADD ECX,4
004026FA |. 83C2 04    |ADD EDX,4
004026FD |. 84DB      |TEST BL,BL
004026FF |.^75 C4     \JNZ SHORT step5.004026C5
00402701 |> 5B       POP EBX
00402702 \. C3       RETN

这个是个循环,
他将刚刚计算的数值逐个与"Step 5 was fun!"中的字符这个比较(包括空格)
刚刚计算的直不等则跳

所以
我们可以根据这个来反推Step5Key.key中各个元素的16进制值
53(S)  xor 77 =24
74(t)   xor 78 =0C
65(e)  xor 79 =1C
70(p)  xor 7A =0A
20(空格) XOR 7B =5B
35(5)  XOR 7C =49
20(空格) XOR 7D =5D
77(w)  XOR 7E = 09
61(a) XOR 7F =1E
73(s)  XOR 80 =F3
20(空格) XOR 81=A1
66(f)  XOR 82=E4
75(u)  XOR 83=F6
6E(n)  XOR 84 =EA
21(!)  XOR 85=A4

就是他了gg1211[CZG]
这个就是Step5Key.key中所含要素
用16进制编辑输入240C1C0A5B495D091EF3A1E4F6EAA4
保存为Step5Key.key就可以了
再运行
看看,呵呵
提示完全破解
我会在附件中上传这个crackme和Step5Key.key
呵呵

晕,我没有权限上传

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sge13 2005-10-18 09:47
2
0
做得很棒!,学习了。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jerryking1 2005-11-7 17:14
3
0


学习学习
游客
登录 | 注册 方可回帖
返回