新CrackMe160之047 - surre

与旧版139相同

Delphi写的就直接使用IDR反编译, 按钮事件代码如下:

 crackme::TStatus.Button1Click
 00429D20    push       ebp
 00429D21    mov        ebp,esp
 00429D23    add        esp,0FFFFFEAC
 00429D29    push       ebx
 00429D2A    push       esi
 00429D2B    push       edi
 00429D2C    xor        ecx,ecx
 00429D2E    mov        dword ptr [ebp-154],ecx
 00429D34    mov        esi,eax
 00429D36    xor        eax,eax
 00429D38    push       ebp
 00429D39    push       429E13
 00429D3E    push       dword ptr fs:[eax]
 00429D41    mov        dword ptr fs:[eax],esp
 00429D44    mov        edx,429E2C; 'Status: Unregistered'
 00429D49    mov        eax,esi
 00429D4B    call       TControl.SetText
 00429D50    xor        ebx,ebx
 00429D52    mov        eax,dword ptr [esi+1E0]; TStatus.OpenDialog1:TOpenDialog
 00429D58    mov        edx,dword ptr [eax]
 00429D5A    call       dword ptr [edx+34]; TOpenDialog.Execute
 00429D5D    test       al,al
>00429D5F    je         00429D83
 00429D61    lea        edx,[ebp-154]
 00429D67    mov        eax,dword ptr [esi+1E0]; TStatus.OpenDialog1:TOpenDialog
 00429D6D    call       TOpenDialog.GetFileName
 00429D72    mov        edx,dword ptr [ebp-154]
 00429D78    lea        eax,[ebp-150]
 00429D7E    call       @Assign
 00429D83    mov        edx,1
 00429D88    lea        eax,[ebp-150]
 00429D8E    call       @ResetFile
 00429D93    call       @_IOTest
>00429D98    jmp        00429DB4
 00429D9A    lea        edx,[ebp-1]
 00429D9D    lea        eax,[ebp-150]
 00429DA3    call       @ReadRec
 00429DA8    call       @_IOTest
 00429DAD    xor        eax,eax
 00429DAF    mov        al,byte ptr [ebp-1]
 00429DB2    add        ebx,eax			;;;;;;;;;;;;;;;;;;关键算法, 累加所有字符
 00429DB4    lea        eax,[ebp-150]
 00429DBA    call       @EofFile
 00429DBF    call       @_IOTest
 00429DC4    test       al,al
<00429DC6    je         00429D9A
 00429DC8    lea        eax,[ebp-150]
 00429DCE    call       @Close
 00429DD3    call       @_IOTest
 00429DD8    cmp        ebx,20A9	   ;;;;;;;;;;;;;关键对比
>00429DDE    jne        00429DEE
 00429DE0    mov        edx,429E4C; 'Status: Registered - Well done'
 00429DE5    mov        eax,esi
 00429DE7    call       TControl.SetText
>00429DEC    jmp        00429DFA
 00429DEE    mov        edx,429E2C; 'Status: Unregistered'
 00429DF3    mov        eax,esi
 00429DF5    call       TControl.SetText
 00429DFA    xor        eax,eax
 00429DFC    pop        edx
 00429DFD    pop        ecx
 00429DFE    pop        ecx
 00429DFF    mov        dword ptr fs:[eax],edx
 00429E02    push       429E1A
 00429E07    lea        eax,[ebp-154]
 00429E0D    call       @LStrClr
 00429E12    ret
<00429E13    jmp        @HandleFinally
<00429E18    jmp        00429E07
 00429E1A    pop        edi
 00429E1B    pop        esi
 00429E1C    pop        ebx
 00429E1D    mov        esp,ebp
 00429E1F    pop        ebp
 00429E20    ret

从代码中很容易知道, 只要文件中所有字符和=0x20A9就成功了, 示例如下:
示例1: 68个z + 1个A, (单一组合)
示例2: 32个0xFF + 1个0xC9, 这个需要16进制写入 (全乱码组合)
示例3: 261个空格0x20 + 1个Tab0x09 (全空白组合)
示例4: azaz' (两组a~z + 1个单引号, 优雅组合)

 
 
本节高手录制的视频,点击前往查看

 
 
 

使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-12-19 13:46  hankerstudio  阅读(4)  评论(0)    收藏  举报