1. 程式人生 > >墨者學院 - 逆向分析實訓-exe(第1題)

墨者學院 - 逆向分析實訓-exe(第1題)

 

OD載入
00401293   .  E8 B8FEFFFF   call game.00401150  跟入
00401246  |.  E8 F5000000   call game.00401340  輸出函式  也跟入
在輸出完一些說明字元之後  後面還有一個call
00401394  |.  E8 57FFFFFF   call game.004012F0  決定跟入
一步一步往下走  便發現了一些貓膩

004012F0  /$  55            push ebp   
004012F1  |.  89E5          mov ebp,esp
004012F3  |.  57            push edi
004012F4  |.  53            push ebx
004012F5  |.  83EC 10       sub esp,0x10
004012F8  |.  C70424 280000>mov dword ptr ss:[esp],0x28              ; |
004012FF  |.  E8 2C060000   call <jmp.&msvcrt.malloc>                ; \malloc
00401304  |.  FC            cld
00401305  |.  89C3          mov ebx,eax
00401307  |.  B9 0A000000   mov ecx,0xA
0040130C  |.  31C0          xor eax,eax
0040130E  |.  89DF          mov edi,ebx
00401310  |.  F3:AB         rep stos dword ptr es:[edi]
00401312  |.  31FF          xor edi,edi
00401314  |.  EB 0D         jmp short game.00401323                                 進入迴圈
00401316  |>  0FB687 003040>/movzx eax,byte ptr ds:[edi+0x403000]
0040131D  |.  34 55         |xor al,0x55                                                進行異或運算(開始不懂異或運算,自己專門計算了一下)
0040131F  |.  88041F        |mov byte ptr ds:[edi+ebx],al                            將轉換後的ascii碼存入移位存入ebx中
00401322  |.  47            |inc edi                                                               edi++
00401323  |>  C70424 003040> mov dword ptr ss:[esp],game.00403000    ; |>0,u<&ue6gm6`7ag0e`6a61c30dfac364a0c030          這就是需要進行異或運算的字元
0040132A  |.  E8 F9050000   |call <jmp.&msvcrt.strlen>               ; \strlen      計算的字串的長度
0040132F  |.  39C7          |cmp edi,eax                                                          判斷是否計算完畢
00401331  |.^ 72 E3         \jb short game.00401316
00401333  |.  83C4 10       add esp,0x10
00401336  |.  89D8          mov eax,ebx                                                           迴圈結束之後ebx儲存的就是轉換後的key
00401338  |.  5B            pop ebx
00401339  |.  5F            pop edi
0040133A  |.  5D            pop ebp
0040133B  \.  C3            retn
 

 

執行一下c程式,進行27次異或 0x55運算即可

#include <stdio.h> 
#include <string.h>
int main(){     
int i; char key[40] ={};    
char str[] = ">0,u<&ue6gm6`7ag0e`6a61c30dfac364a0c030"; 
for ( i = 0; i < strlen(str); ++i )    
 key[i] = str[i] ^ 0x55;     printf("%s",key);     return 0; 
}

 

轉自 https://bbs.pediy.com/thread-189563.htm