天天看點

#逆向分析系列#逆向0X01

       簡單來講,對軟體進行分析并搞清楚其行為的工作就叫做“逆向工程”。逆向是指對軟體進行分析,其對象不僅限與惡意軟體,是以也不一定和計算機安全相關,譬如:license的繞過、遊戲金手指等。都屬于通過逆向分析繞過或篡改内部資料達到所需目标。

       逆向工程可分為靜态分析與動态分析。靜态分析是:在不允許目标程式的情況下進行分析。動态分析:在運作目标程式的情況下進行分析。靜态分析可用于了解全局資訊,動态分析可用于了解局部資訊,動靜結合效果倍增!

      靜态分析常用工具包括:winhex(二進制編輯器)、IDA Freeware版(反彙編工具)等。 動态分析常用工具包括:Process Monitor(系統程序螢幕)、OllyDbg(動态追蹤工具)、Wireshark(資料包分析軟體)等。 形形色色各種工具都有,再次不一一介紹。

       工欲善其事必先利其器,在具有“趁手武器”後,我們需要對彙編指令有所了解(了解常用關鍵指令即可),便于通過工具展示出的内容進行分析。沒必要一行行仔細閱讀,重要的部分花時間仔細了解,其餘部分了解大概即可。

指令 示例 含義 說明
MOV MOV EAX,ECX EAX=ECX 将ECX的值存入EAX
ADD ADD EAX,ECX EAX+=ECX 将EAX的值加上ECX的值
SUB SUB EAX,ECX EAX-=ECX 将EAX的值減去ECX的值
INC INC EAX EAX++ 将EAX的值加1
DEC DEC EAX EAX-- 将EAX的值減1
LEA LEA EAX,[ECX+4] EAX=ECX+4 将EAC值加4存入EAX
CMP CMP EAX,ECX

IF(EAX==ECX)

  ZF=1

ELSE

  ZF=0

對兩值進行比較并根據結果設定标志

若EAX與ECX值相同,ZF=1

TEST TEST EAX,ECX

F(EAX==0)

  ZF=1

ELSE

  ZF=0

将值與0進行比較并根據結果設定ZF值
JE(JZ) JE 04001000

if(ZF==1)

GOTO 04001000

若ZF=1,則跳轉到04001000
JNE(JNZ) JNE 04001000

if(ZF==0)

GOTO 04001000

若ZF=0,則跳轉到04001000
JMP JMP 04001000 GOTO 04001000 無條件跳轉到04001000
CALL CALL lstrcmpW 調用lstrcmpW
PUSH PUSH 00000001 壓棧
POP POP EAX 出棧并将擷取的值存入EAX寄存器

 示例分析

    我寫了一段非常簡單C++代碼,根據判斷2019彈出不同對話框。

#逆向分析系列#逆向0X01
#逆向分析系列#逆向0X01
#逆向分析系列#逆向0X01

下面我們就來通過動靜态來分析該EXE程式!

   1.靜态分析

     首先可通過IDA進行全局檢視,通過對源代碼反彙編,可大概了解程式的邏輯代碼。下圖關鍵方法包括:lstrcmp、GetActiveWindow、MessageBox,通過三個方法我相信你已經基本明白代碼邏輯規則是什麼了?。

#逆向分析系列#逆向0X01

  2.動态分析

     通過靜态對代碼有全局了解後,可通過動态分析進行局部深入了解,下圖是通過OllyDbg進行深入了解,call調用了lstrcmp方法,jnz進行判斷,如果不包含指定比對字元串将跳轉到01141787位置,即hello word的代碼段中。

#逆向分析系列#逆向0X01

我通過在lstrcmp位置設定斷點,執行至jnz時跳轉至01141787位置,繼續執行至011417A5時(彈出框)棧的内容如上圖右下角。

#逆向分析系列#逆向0X01

     由此我們完成了對該exe程式的簡單動靜分析。後期我們将結合Process Monitor、Wireshark等多種分析方法對軟體進行逆向分析。

繼續閱讀