首页
社区
课程
招聘
[原创]原创一个适合初学者的crackme 的分析
发表于: 2007-1-14 17:01 4072

[原创]原创一个适合初学者的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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//