#逆向分析系列#逆向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彈出不同對話框。

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

   1.靜態分析

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

  2.動態分析

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

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章