-
-
[原创]原创一个适合初学者的crackme 的分析
-
发表于: 2007-1-14 17:01 4072
-
【文章标题】: 原创一个适合初学者的crackme 的分析
【文章作者】: 不坏不自在
【下载地址】: http://bbs.pediy.com/attachment.php?s=&attachmentid=4026
【保护方式】: KEY
【使用工具】: 0D W32Dasm
【作者声明】: 对 一个适合初学者的crackme 的分析由于是第一次分析有不对的地方请斑竹指正 我是初学者
--------------------------------------------------------------------------------
【详细过程】
00401141 . E8 4A020000 CALL <JMP.&user32.GetDlgItemTextA> ; 获取用户名
00401146 . 83F8 03 CMP EAX,3 比较用户名长度是否高于3位
00401149 . 77 18 JA SHORT crackme.00401163 高于3或等于3位就跳
0040114B . 6A 10 PUSH 10 ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0040114D . 68 06634000 PUSH crackme.00406306 ; |Title = "Bad boy..."
00401152 . 68 0A624000 PUSH crackme.0040620A ; |Text = "Username must have at least 4 chars..."
00401157 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
0040115A . E8 3D020000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
0040115F . C9 LEAVE
00401160 . C2 1000 RETN 10
00401163 > 8D15 49634000 LEA EDX,DWORD PTR DS:[406349] 用户名放到EDX
00401169 . 52 PUSH EDX ; /String => ""
0040116A . E8 8D020000 CALL <JMP.&kernel32.lstrlenA> ; \lstrlenA
0040116F . 8BE8 MOV EBP,EAX
00401171 . B9 05000000 MOV ECX,5 用户名的后5位
00401176 . 33F6 XOR ESI,ESI 清零
00401178 . 33C0 XOR EAX,EAX 清零
0040117A > 8A0C16 MOV CL,BYTE PTR DS:[ESI+EDX] 取用户名第2位
0040117D . 8AD9 MOV BL,CL
0040117F . 3298 28634000 XOR BL,BYTE PTR DS:[EAX+406328] 第2位与[406328]XOR
00401185 . 40 INC EAX EAX+1
00401186 . 83F8 05 CMP EAX,5 比较 是否5次运算完
00401189 . 881C32 MOV BYTE PTR DS:[EDX+ESI],BL
0040118C . 8888 27634000 MOV BYTE PTR DS:[EAX+406327],CL
00401192 . 75 02 JNZ SHORT crackme.00401196 没运算完跳回去继续运算
00401194 . 33C0 XOR EAX,EAX
00401196 > 46 INC ESI ESI+1
00401197 . 3BF5 CMP ESI,EBP 与注册码位数比较低于跳回去继续运算
00401199 .^ 72 DF JB SHORT crackme.0040117A 跳回去取逐个取用户名3,4,5位去运算
0040119B . 33FF XOR EDI,EDI
0040119D . 33C9 XOR ECX,ECX
0040119F . 85ED TEST EBP,EBP
004011A1 . 76 26 JBE SHORT crackme.004011C9
004011A3 > 8A9F 2D634000 MOV BL,BYTE PTR DS:[EDI+40632D] 第2轮运算也是5次
004011A9 . 8BF5 MOV ESI,EBP
004011AB . 2BF1 SUB ESI,ECX
004011AD . 4E DEC ESI
004011AE . 8A0432 MOV AL,BYTE PTR DS:[EDX+ESI]
004011B1 . 32D8 XOR BL,AL
004011B3 . 47 INC EDI
004011B4 . 881C32 MOV BYTE PTR DS:[EDX+ESI],BL
004011B7 . 8887 2C634000 MOV BYTE PTR DS:[EDI+40632C],AL
004011BD . 83FF 05 CMP EDI,5
004011C0 . 75 02 JNZ SHORT crackme.004011C4
004011C2 . 33FF XOR EDI,EDI
004011C4 > 41 INC ECX
004011C5 . 3BCD CMP ECX,EBP
004011C7 .^ 72 DA JB SHORT crackme.004011A3 跳回去取逐个取用户名3,4,5位去运算
004011C9 > 33F6 XOR ESI,ESI
004011CB . 33FF XOR EDI,EDI
004011CD . 85ED TEST EBP,EBP
004011CF . 76 21 JBE SHORT crackme.004011F2
004011D1 > 8A043A MOV AL,BYTE PTR DS:[EDX+EDI] 第3轮运算5次
004011D4 . 8A8E 32634000 MOV CL,BYTE PTR DS:[ESI+406332] 但是对什么进行运算我就不知道了
004011DA . 32C8 XOR CL,AL
004011DC . 46 INC ESI
004011DD . 880C3A MOV BYTE PTR DS:[EDX+EDI],CL
004011E0 . 8886 31634000 MOV BYTE PTR DS:[ESI+406331],AL
004011E6 . 83FE 05 CMP ESI,5
004011E9 . 75 02 JNZ SHORT crackme.004011ED
004011EB . 33F6 XOR ESI,ESI
004011ED > 47 INC EDI
004011EE . 3BFD CMP EDI,EBP
004011F0 .^ 72 DF JB SHORT crackme.004011D1 同样进行5次XOR运算
004011F2 > 33FF XOR EDI,EDI
004011F4 . 33C9 XOR ECX,ECX
004011F6 . 85ED TEST EBP,EBP
004011F8 . 76 26 JBE SHORT crackme.00401220
004011FA > 8A9F 37634000 MOV BL,BYTE PTR DS:[EDI+406337] 第4次运算
00401200 . 8BF5 MOV ESI,EBP 但是对什么进行运算我就不知道了
00401202 . 2BF1 SUB ESI,ECX
00401204 . 4E DEC ESI
00401205 . 8A0432 MOV AL,BYTE PTR DS:[EDX+ESI]
00401208 . 32D8 XOR BL,AL
0040120A . 47 INC EDI
0040120B . 881C32 MOV BYTE PTR DS:[EDX+ESI],BL
0040120E . 8887 36634000 MOV BYTE PTR DS:[EDI+406336],AL
00401214 . 83FF 05 CMP EDI,5
00401217 . 75 02 JNZ SHORT crackme.0040121B
00401219 . 33FF XOR EDI,EDI
0040121B > 41 INC ECX
0040121C . 3BCD CMP ECX,EBP
0040121E .^ 72 DA JB SHORT crackme.004011FA 同样运算5次
00401220 > 8D3D 45634000 LEA EDI,DWORD PTR DS:[406345]
00401226 . 33C0 XOR EAX,EAX
00401228 . 85ED TEST EBP,EBP
0040122A . C705 45634000>MOV DWORD PTR DS:[406345],0
00401234 . 76 17 JBE SHORT crackme.0040124D
00401236 > 8BC8 MOV ECX,EAX
00401238 . 83E1 03 AND ECX,3
0040123B . 8A1C0F MOV BL,BYTE PTR DS:[EDI+ECX]
0040123E . 8D340F LEA ESI,DWORD PTR DS:[EDI+ECX]
00401241 . 8A0C02 MOV CL,BYTE PTR DS:[EDX+EAX]
00401244 . 02D9 ADD BL,CL
00401246 . 40 INC EAX
00401247 . 3BC5 CMP EAX,EBP
00401249 . 881E MOV BYTE PTR DS:[ESI],BL
0040124B .^ 72 E9 JB SHORT crackme.00401236
0040124D > 5D POP EBP
0040124E . B9 0A000000 MOV ECX,0A
00401253 . A1 45634000 MOV EAX,DWORD PTR DS:[406345]
00401258 . 33DB XOR EBX,EBX
0040125A > 33D2 XOR EDX,EDX
0040125C . F7F1 DIV ECX
0040125E . 80C2 30 ADD DL,30
00401261 . 8893 49654000 MOV BYTE PTR DS:[EBX+406549],DL
00401267 . 43 INC EBX
00401268 . 85C0 TEST EAX,EAX
0040126A .^ 75 EE JNZ SHORT crackme.0040125A
0040126C . 68 49654000 PUSH crackme.00406549 ; /String = "这里是运算结果"
00401271 . E8 86010000 CALL <JMP.&kernel32.lstrlenA> ; \lstrlenA
00401276 . 33DB XOR EBX,EBX
00401278 > 8A88 48654000 MOV CL,BYTE PTR DS:[EAX+406548] 取反过程
0040127E . 888B 49674000 MOV BYTE PTR DS:[EBX+406749],CL
00401284 . 43 INC EBX
00401285 . 48 DEC EAX
00401286 .^ 75 F0 JNZ SHORT crackme.00401278 逐位取反
00401288 . 68 49674000 PUSH crackme.00406749 ; /String2 = "这里是真正的KEY"
0040128D . 68 49654000 PUSH crackme.00406549 ; |String1 = crackme.00406549
00401292 . E8 5F010000 CALL <JMP.&kernel32.lstrcpyA> ; \lstrcpyA
00401297 . 68 00020000 PUSH 200 ; /Count = 200 (512.)
0040129C . 68 49694000 PUSH crackme.00406949 ; |Buffer = crackme.00406949
004012A1 . 6A 64 PUSH 64 ; |ControlID = 64 (100.)
004012A3 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004012A6 . E8 E5000000 CALL <JMP.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
004012AB . 68 49654000 PUSH crackme.00406549 ; /String2 = "这里是真正的KEY"
004012B0 . 68 49694000 PUSH crackme.00406949 ; |String1 = "这里是错误的KEY"
004012B5 . E8 36010000 CALL <JMP.&kernel32.lstrcmpA> ; \lstrcmpA 进行比较
004012BA . 0BC0 OR EAX,EAX
004012BC . /75 16 JNZ SHORT crackme.004012D4 不相等就提示:Nope, thats not it!
Try again
--------------------------------------------------------------------------------
【经验总结】
我是菜鸟所以就只能分析到这种程度了好多都不知道他在对什么进行运算
知道的可以告诉我
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年01月14日 下午 04:59:50
【文章作者】: 不坏不自在
【下载地址】: http://bbs.pediy.com/attachment.php?s=&attachmentid=4026
【保护方式】: KEY
【使用工具】: 0D W32Dasm
【作者声明】: 对 一个适合初学者的crackme 的分析由于是第一次分析有不对的地方请斑竹指正 我是初学者
--------------------------------------------------------------------------------
【详细过程】
00401141 . E8 4A020000 CALL <JMP.&user32.GetDlgItemTextA> ; 获取用户名
00401146 . 83F8 03 CMP EAX,3 比较用户名长度是否高于3位
00401149 . 77 18 JA SHORT crackme.00401163 高于3或等于3位就跳
0040114B . 6A 10 PUSH 10 ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0040114D . 68 06634000 PUSH crackme.00406306 ; |Title = "Bad boy..."
00401152 . 68 0A624000 PUSH crackme.0040620A ; |Text = "Username must have at least 4 chars..."
00401157 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
0040115A . E8 3D020000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
0040115F . C9 LEAVE
00401160 . C2 1000 RETN 10
00401163 > 8D15 49634000 LEA EDX,DWORD PTR DS:[406349] 用户名放到EDX
00401169 . 52 PUSH EDX ; /String => ""
0040116A . E8 8D020000 CALL <JMP.&kernel32.lstrlenA> ; \lstrlenA
0040116F . 8BE8 MOV EBP,EAX
00401171 . B9 05000000 MOV ECX,5 用户名的后5位
00401176 . 33F6 XOR ESI,ESI 清零
00401178 . 33C0 XOR EAX,EAX 清零
0040117A > 8A0C16 MOV CL,BYTE PTR DS:[ESI+EDX] 取用户名第2位
0040117D . 8AD9 MOV BL,CL
0040117F . 3298 28634000 XOR BL,BYTE PTR DS:[EAX+406328] 第2位与[406328]XOR
00401185 . 40 INC EAX EAX+1
00401186 . 83F8 05 CMP EAX,5 比较 是否5次运算完
00401189 . 881C32 MOV BYTE PTR DS:[EDX+ESI],BL
0040118C . 8888 27634000 MOV BYTE PTR DS:[EAX+406327],CL
00401192 . 75 02 JNZ SHORT crackme.00401196 没运算完跳回去继续运算
00401194 . 33C0 XOR EAX,EAX
00401196 > 46 INC ESI ESI+1
00401197 . 3BF5 CMP ESI,EBP 与注册码位数比较低于跳回去继续运算
00401199 .^ 72 DF JB SHORT crackme.0040117A 跳回去取逐个取用户名3,4,5位去运算
0040119B . 33FF XOR EDI,EDI
0040119D . 33C9 XOR ECX,ECX
0040119F . 85ED TEST EBP,EBP
004011A1 . 76 26 JBE SHORT crackme.004011C9
004011A3 > 8A9F 2D634000 MOV BL,BYTE PTR DS:[EDI+40632D] 第2轮运算也是5次
004011A9 . 8BF5 MOV ESI,EBP
004011AB . 2BF1 SUB ESI,ECX
004011AD . 4E DEC ESI
004011AE . 8A0432 MOV AL,BYTE PTR DS:[EDX+ESI]
004011B1 . 32D8 XOR BL,AL
004011B3 . 47 INC EDI
004011B4 . 881C32 MOV BYTE PTR DS:[EDX+ESI],BL
004011B7 . 8887 2C634000 MOV BYTE PTR DS:[EDI+40632C],AL
004011BD . 83FF 05 CMP EDI,5
004011C0 . 75 02 JNZ SHORT crackme.004011C4
004011C2 . 33FF XOR EDI,EDI
004011C4 > 41 INC ECX
004011C5 . 3BCD CMP ECX,EBP
004011C7 .^ 72 DA JB SHORT crackme.004011A3 跳回去取逐个取用户名3,4,5位去运算
004011C9 > 33F6 XOR ESI,ESI
004011CB . 33FF XOR EDI,EDI
004011CD . 85ED TEST EBP,EBP
004011CF . 76 21 JBE SHORT crackme.004011F2
004011D1 > 8A043A MOV AL,BYTE PTR DS:[EDX+EDI] 第3轮运算5次
004011D4 . 8A8E 32634000 MOV CL,BYTE PTR DS:[ESI+406332] 但是对什么进行运算我就不知道了
004011DA . 32C8 XOR CL,AL
004011DC . 46 INC ESI
004011DD . 880C3A MOV BYTE PTR DS:[EDX+EDI],CL
004011E0 . 8886 31634000 MOV BYTE PTR DS:[ESI+406331],AL
004011E6 . 83FE 05 CMP ESI,5
004011E9 . 75 02 JNZ SHORT crackme.004011ED
004011EB . 33F6 XOR ESI,ESI
004011ED > 47 INC EDI
004011EE . 3BFD CMP EDI,EBP
004011F0 .^ 72 DF JB SHORT crackme.004011D1 同样进行5次XOR运算
004011F2 > 33FF XOR EDI,EDI
004011F4 . 33C9 XOR ECX,ECX
004011F6 . 85ED TEST EBP,EBP
004011F8 . 76 26 JBE SHORT crackme.00401220
004011FA > 8A9F 37634000 MOV BL,BYTE PTR DS:[EDI+406337] 第4次运算
00401200 . 8BF5 MOV ESI,EBP 但是对什么进行运算我就不知道了
00401202 . 2BF1 SUB ESI,ECX
00401204 . 4E DEC ESI
00401205 . 8A0432 MOV AL,BYTE PTR DS:[EDX+ESI]
00401208 . 32D8 XOR BL,AL
0040120A . 47 INC EDI
0040120B . 881C32 MOV BYTE PTR DS:[EDX+ESI],BL
0040120E . 8887 36634000 MOV BYTE PTR DS:[EDI+406336],AL
00401214 . 83FF 05 CMP EDI,5
00401217 . 75 02 JNZ SHORT crackme.0040121B
00401219 . 33FF XOR EDI,EDI
0040121B > 41 INC ECX
0040121C . 3BCD CMP ECX,EBP
0040121E .^ 72 DA JB SHORT crackme.004011FA 同样运算5次
00401220 > 8D3D 45634000 LEA EDI,DWORD PTR DS:[406345]
00401226 . 33C0 XOR EAX,EAX
00401228 . 85ED TEST EBP,EBP
0040122A . C705 45634000>MOV DWORD PTR DS:[406345],0
00401234 . 76 17 JBE SHORT crackme.0040124D
00401236 > 8BC8 MOV ECX,EAX
00401238 . 83E1 03 AND ECX,3
0040123B . 8A1C0F MOV BL,BYTE PTR DS:[EDI+ECX]
0040123E . 8D340F LEA ESI,DWORD PTR DS:[EDI+ECX]
00401241 . 8A0C02 MOV CL,BYTE PTR DS:[EDX+EAX]
00401244 . 02D9 ADD BL,CL
00401246 . 40 INC EAX
00401247 . 3BC5 CMP EAX,EBP
00401249 . 881E MOV BYTE PTR DS:[ESI],BL
0040124B .^ 72 E9 JB SHORT crackme.00401236
0040124D > 5D POP EBP
0040124E . B9 0A000000 MOV ECX,0A
00401253 . A1 45634000 MOV EAX,DWORD PTR DS:[406345]
00401258 . 33DB XOR EBX,EBX
0040125A > 33D2 XOR EDX,EDX
0040125C . F7F1 DIV ECX
0040125E . 80C2 30 ADD DL,30
00401261 . 8893 49654000 MOV BYTE PTR DS:[EBX+406549],DL
00401267 . 43 INC EBX
00401268 . 85C0 TEST EAX,EAX
0040126A .^ 75 EE JNZ SHORT crackme.0040125A
0040126C . 68 49654000 PUSH crackme.00406549 ; /String = "这里是运算结果"
00401271 . E8 86010000 CALL <JMP.&kernel32.lstrlenA> ; \lstrlenA
00401276 . 33DB XOR EBX,EBX
00401278 > 8A88 48654000 MOV CL,BYTE PTR DS:[EAX+406548] 取反过程
0040127E . 888B 49674000 MOV BYTE PTR DS:[EBX+406749],CL
00401284 . 43 INC EBX
00401285 . 48 DEC EAX
00401286 .^ 75 F0 JNZ SHORT crackme.00401278 逐位取反
00401288 . 68 49674000 PUSH crackme.00406749 ; /String2 = "这里是真正的KEY"
0040128D . 68 49654000 PUSH crackme.00406549 ; |String1 = crackme.00406549
00401292 . E8 5F010000 CALL <JMP.&kernel32.lstrcpyA> ; \lstrcpyA
00401297 . 68 00020000 PUSH 200 ; /Count = 200 (512.)
0040129C . 68 49694000 PUSH crackme.00406949 ; |Buffer = crackme.00406949
004012A1 . 6A 64 PUSH 64 ; |ControlID = 64 (100.)
004012A3 . FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004012A6 . E8 E5000000 CALL <JMP.&user32.GetDlgItemTextA> ; \GetDlgItemTextA
004012AB . 68 49654000 PUSH crackme.00406549 ; /String2 = "这里是真正的KEY"
004012B0 . 68 49694000 PUSH crackme.00406949 ; |String1 = "这里是错误的KEY"
004012B5 . E8 36010000 CALL <JMP.&kernel32.lstrcmpA> ; \lstrcmpA 进行比较
004012BA . 0BC0 OR EAX,EAX
004012BC . /75 16 JNZ SHORT crackme.004012D4 不相等就提示:Nope, thats not it!
Try again
--------------------------------------------------------------------------------
【经验总结】
我是菜鸟所以就只能分析到这种程度了好多都不知道他在对什么进行运算
知道的可以告诉我
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年01月14日 下午 04:59:50
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
看原图
赞赏
雪币:
留言: