zoukankan      html  css  js  c++  java
  • CM--CrueHead.3

    继续160个新手CM系列,今天破的是KeyFile保护的一道题,觉得最坑的就是最后破解成功的提示框,居然写着“Now try the next crackme”。。。我这英文0级的以为这道题还有后续。。就又搞了半天最后发现它的意思是你可以去做其他的题了。。。⊙﹏⊙‖∣

    言归正传,还是先打开程序,结果发现什么都没有,什么输入框了啥的都没有。。。emmm具体就像下图一样

    好吧我们直接打开OD调试。

    00401000 >/$  6A 00         push    0                                ; /pModule = NULL
    00401002  |.  E8 7D040000   call    <jmp.&KERNEL32.GetModuleHandleA> ; GetModuleHandleA
    00401007  |.  A3 E9204000   mov     dword ptr [4020E9], eax
    0040100C  |.  C705 F9204000>mov     dword ptr [4020F9], 0
    00401016  |.  6A 00         push    0                                ; /hTemplateFile = NULL
    00401018  |.  68 80000000   push    80                               ; |Attributes = NORMAL
    0040101D      6A 03         push    3;OPEN_EXISTING
    0040101F  |.  6A 00         push    0                                ; |pSecurity = NULL
    00401021  |.  6A 03         push    3                                ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
    00401023  |.  68 000000C0   push    C0000000                         ; |Access = GENERIC_READ|GENERIC_WRITE
    00401028  |.  68 D7204000   push    004020D7                         ; |FileName = "CRACKME3.KEY"
    0040102D  |.  E8 76040000   call    <jmp.&KERNEL32.CreateFileA>      ; CreateFileA
    00401032      83F8 FF       cmp     eax, -1;创建失败,不能让他创建失败,所以自己建一个CRACKME3.KEY
    00401035      75 0C         jnz     short 00401043
    00401037  |>  68 0E214000   push    0040210E                         ;  ASCII "CrackMe v3.0             "
    0040103C  |.  E8 B4020000   call    004012F5
    00401041  |.  EB 6B         jmp     short 004010AE
    00401043  |>  A3 F5204000   mov     dword ptr [4020F5], eax
    00401048  |.  B8 12000000   mov     eax, 12
    0040104D  |.  BB 08204000   mov     ebx, 00402008
    00401052  |.  6A 00         push    0                                ; /pOverlapped = NULL
    00401054  |.  68 A0214000   push    004021A0                         ; |pBytesRead = Cruehead.004021A0
    00401059  |.  50            push    eax                              ; |BytesToRead => 12 (18.)
    0040105A  |.  53            push    ebx                              ; |Buffer => Cruehead.00402008
    0040105B  |.  FF35 F5204000 push    dword ptr [4020F5]               ; |hFile = NULL
    00401061  |.  E8 30040000   call    <jmp.&KERNEL32.ReadFile>         ; ReadFile
    00401066      833D A0214000>cmp     dword ptr [4021A0], 12  ;比较读出的文件内容是不是18个字节
    0040106D  |.^ 75 C8         jnz     short 00401037
    0040106F  |.  68 08204000   push    00402008
    00401074  |.  E8 98020000   call    00401311;关键,跟下去瞅瞅

    下面就是比较文件中的内容了

    00401311  /$  33C9          xor     ecx, ecx;清0
    00401313  |.  33C0          xor     eax, eax
    00401315  |.  8B7424 04     mov     esi, dword ptr [esp+4];文件读出来的内容
    00401319  |.  B3 41         mov     bl, 41
    0040131B  |>  8A06          /mov     al, byte ptr [esi]
    0040131D  |.  32C3          |xor     al, bl;将文件中读出来的第一个字节与41h异或
    0040131F  |.  8806          |mov     byte ptr [esi], al
    00401321  |.  46            |inc     esi
    00401322  |.  FEC3          |inc     bl
    00401324  |.  0105 F9204000 |add     dword ptr [4020F9], eax
    0040132A  |.  3C 00         |cmp     al, 0
    0040132C  |.  74 07         |je      short 00401335;当文件第一个字节为41h时跳
    0040132E  |.  FEC1          |inc     cl
    00401330  |.  80FB 4F       |cmp     bl, 4F
    00401333  |.^ 75 E6         jnz     short 0040131B
    00401335  |>  890D 49214000 mov     dword ptr [402149], ecx
    0040133B  .  C3            retn
    00401079  |.  8135 F9204000>xor     dword ptr [4020F9], 12345678
    00401083  |.  83C4 04       add     esp, 4
    00401086  |.  68 08204000   push    00402008
    0040108B  |.  E8 AC020000   call    0040133C
    0040133C  /$  8B7424 04     mov     esi, dword ptr [esp+4]           ;  Cruehead.00402008
    00401340  |.  83C6 0E       add     esi, 0E
    00401343  |.  8B06          mov     eax, dword ptr [esi]
    00401345  .  C3            retn
    
    
    00401090  |.  83C4 04       add     esp, 4
    00401093  |.  3B05 F9204000 cmp     eax, dword ptr [4020F9];将12345678与文件中最后4个字节比较,注意字节在内存中的保存位置
    00401099  |.  0F94C0        sete    al;当相等时将al置为1,不相等置为0
    0040109C  |.  50            push    eax
    0040109D  |.  84C0          test    al, al
    0040109F  |.^ 74 96         je      short 00401037;当al为1时不跳,跳就gg了

    下面就是找窗口注册窗口的过程了,就不继续分析了,还有一点注意文件中最后四个字节用16进制编译器写入,因为你自己写txt的话写不了12这个值。

    这道题刚开始分析还有点难度,但是分析完觉得也不是那么难。。。emmmm毕竟称为新手CM ⊙﹏⊙‖∣

  • 相关阅读:
    jq的stop
    mouseover,mouseout与mouseenter,mouseleave
    jq的load
    KeyUp 和KeyDown 、KeyPress之间的区别
    jq的error
    $(function() {....}) ,(function($){...})(jQuery)
    delegate事件委托
    将项目提交到git
    linux下安装jenkins
    手写简单的linkedlist
  • 原文地址:https://www.cnblogs.com/Anony-WhiteLearner/p/8659187.html
Copyright © 2011-2022 走看看