CM--CrueHead.3

繼續160個新手CM系列,今天破的是KeyFile保護的一道題,以爲最坑的就是最後破解成功的提示框,竟然寫着「Now try the next crackme」。。。我這英文0級的覺得這道題還有後續。。就又搞了半天最後發現它的意思是你能夠去作其餘的題了。。。⊙﹏⊙‖∣app

言歸正傳,仍是先打開程序,結果發現什麼都沒有,什麼輸入框了啥的都沒有。。。emmm具體就像下圖同樣spa

好吧咱們直接打開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;關鍵,跟下去瞅瞅

下面就是比較文件中的內容了code

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這個值。blog

這道題剛開始分析還有點難度,可是分析完以爲也不是那麼難。。。emmmm畢竟稱爲新手CM ⊙﹏⊙‖∣內存

相關文章
相關標籤/搜索