IDA教程_IDA逆向訓練


ZC: IDA新的模式"proximity view",快捷鍵:"-"觸發"proximity view"(應該是小鍵盤減號),"+"放大返回到 函數

1、

  【01:30】笨笨雄(nemo314@gmail.com) 寫的教程

  【03:22】重新載入exe,關閉時 的設置  【03:28】重新載入的時候,IDA會自動定位到程序入口

  【03:36】IDA -->Options-->General...-->標簽頁"Disassembly"-->將"Line prefixes (graph)" 勾上,將"Number of opcode bytes (graph)"(操作碼)設置為6 --> OK  【04:20】"Graph overview"

  【05:00】注釋 的快捷鍵 分號";"

  【05:36】將 脫殼點 記錄一下,用OD將它脫殼  【07:52】用LoadPE "糾正鏡像大小"-->"完全脫殼"  【08:42】ImportREC_chs修復IAT

  【10:45】介紹IDA功能,如何使用。以后單獨一課再講...

  【13:11】見一下什么叫 交叉引用:程序中相互調用的地方。導入表 里面肯定是交叉引用的

    【13:35】RegQueryValueExA,有"↑"的地方 就是交叉引用,雙擊"↑"處 隨表來到一個交叉引用的地方

    【】ZC: 上面這段 沒聽怎么明白...

  【15:25】快捷鍵

  【16:50】IDC(腳本)(這個部分 可以暫時 跳過,比較復雜)

  【18:00】下節課 "靜態脫殼",里面有一些 被混淆過的代碼,反匯編出現混亂

  【未完畢,有未聽懂的部分】

2、

  【00:55】看雪上面的一個例子

  【01:25】靜態脫殼的優點

  【02:05】dump 【02:10】dump之后的程序是不能直接運行起來的 【02:13】dump 和 脫殼 是不一樣的(ZC: 哪里不一樣??)

  【02:50】IDA 分析完畢

    【03:03】兩句一個jmp,兩句一個jmp,這就很想是 被混淆過,被VM過的(ZC: 你確定是 被VM過?這里確實是在 破VM??)

    【03:13】IDA 中出現:"start endp ; sp-analysis failed" 分析失敗了,它無法再往下分析了,能分析出來的代碼 也就這么多了

  【03:30】看到 "pusha",找一下"popa"

    【04:10】拖來拖去 沒找到 "popa"

    【04:15】用OD來找,看看是不是反調試的。這個(ZC: 是指這個正在被研究的exe程序嗎?)應該是沒有反調試 這么強大的功能

    【04:38】直接在 OD中,"查找命令" 來找 "popad"

      【04:40】這里 有 "popad",在"0045A5BF"附近

      【04:50】看到這里,連續兩組"pushad"和"popad",它明顯是花指令 它就是為了不讓你一下子定位到 "pushad"&"popad" 附近。所以說 我們這里 直接通過 "pushad"&"popad" 的方法是不可以的

  【05:15】"popad" 在 "start endp ; sp-analysis failed" 的下面,再往下走 (ZC: 如何證明你說的?能看到 現在分析到的地方的地址嗎?)

  【05:38】把鼠標放到 最后一行。  IDA--> "IDA Options"--> Disassembly--> "Line prefixes" √上,"Number of opcode bytes"填入"6"--> OK (ZC: 這下 顯示匯編地址了)

    【05:45】然后,按 空格鍵 切換一下

      【06:05】來到 "start endp ; sp-analysis failed"的地方,下面有一個 紅色的交叉引用,紅色的交叉引用 說明 代碼中分析有沖突。上面 或者 下面 不管哪個地方,程序中肯定是有沖突的 【06:18】看 導航帶,它有 很多深紅色的地方,表示 代碼被混淆過的。

  【06:25】ZC: 可以看到,紅色代碼地址部分是 004560FF,下面一句代碼"call sub_4560FF"的地址是 00456104,下面的函數開始的地址是 00456109 。

  【06:40】首先 選到 紅色"sub_4560FF endp; sp-analysis failed"的上面(ZC: 貌似 地址是一樣的)(ZC: 注意,不是 "start endp ; sp-analysis failed"!!)

    【06:52】把它轉成數據,這里 按 鍵盤鍵"D"(ZC: 提示是"Directly convert to data?")

    【07:07】轉換成數據之后,是這個樣子的,機器碼(ZC: 怎么感覺 把下面的指令也一起轉了?見【06:25】) 可以看到機器碼 【07:17】IDA--> "IDA Options"--> Disassembly--> "Line prefixes" √上,"Number of opcode bytes"填入"6"--> OK

    【07:20】E8 Eb ...,E8 其實就是一個"call"(ZC: 也就是CALL 00000CEB?注意call后面跟的是偏移值),根本就沒有這個地址 這個地址是錯誤的。【07:40】這里 其實就是一個短的jmp(0xEB)

    【07:50】在 地址00456100處,按 鍵C,將 數據 轉成 代碼,是這4個:"E8 0C 00 00"(ZC: 從地址低位-->高位))(ZC: jmp指令 一共4位?)【08:05】這里看起來,jmp指令一共就2位?(ZC: 還是說 短jmp是 E8+1字節偏移,長jmp是E8+4字節偏移?段間跳轉呢?jmp 段:偏移?具體說明指令?)

  【08:22】00456104處的代碼 " call near ptr byte_4560FF" 也是一個錯誤的 迷惑反匯編工具的 地方,它直接call到上面的004560FF 然后就來到 "sub_4560FF endp; sp-analysis failed"處(亂碼,IDA分析不出來的地方)

   【08:40】這里 也轉換成 數據(ZC: 轉出來是 00 00 E8 F6 FF FF FF)

  【08:55】其實 它的亂碼已經分析出來了 其實就是這個樣子的(ZC: 納尼?這就算分析出來了?)

 

  【09:10】將 花指令  【09:26】剛才的這一段"00 00 E8 F6 FF FF FF" 就是 花指令(上面的那個 單獨的 0E8h也是花指令)

  【09:35】統計出來 就是這樣

  【09:45】用記事本進行整理

   【10:10】先在這一句上 "call sub_456109",然后 "db 0E8h"就是花指令 【10:37】然后 "jmp short loc_45610E" 也是(花指令),接下來 2句"db 0" + "db 0E8h" + "db 0F6h" + "db 0FFh" "db 0FFh" "db 0FFh"  【11:52】這里的花 是很簡單的花,像VM過的花 簡直跟天書一樣 很難讀懂

    【12:15】這一段 已經搞定了 (ZC: 沒明白啊...這一段怎么就 花 了?如何去掉花指令?為什么是那樣操作來去掉花指令?)

  【12:18】接下來 一個 "call label2",其實就是代碼里面的"call loc_456100" 它又跳轉回來了

  【13:10】添加 標號  【14:25】配合着 原教程的Word內容 一起講解  比較能接受了

  【14:40】這就是 第1段花指令

  【15:12】它是向正常代碼中插入一些 花指令,然后 IDA誤認為 這個"E8"是個call 其實 就是一個垃圾數據。【15:23】IDA 將 "E8"誤認成call后 后面的FFFFFFF6 就是要call的函數 但是FFFFFFF6是無效的,於是IDA分析不下去了 就無法再往下匯編了

    ZC: 我的理解:∵ IDA 是靜態的反匯編器,∴它不知道哪些指令會實際被執行到 哪些不會被實際執行到,於是 它只能將所有指令都分析一下,而 花指令就是利用這個特點 來誤導欺騙IDA。這種的花指令的話,應該使用OD等動態分析工具 就可以應付了,但是用OD的話 又會有另外的問題 如調試器檢測退出等,需要很好的隱藏OD。

 

  【15:35】接下來 解決 第2段花指令

    【15:45】通過4段花指令,寫出來腳本,將花指令排除掉,將整個程序的花指令全部脫干凈

  【16:20】ZC: 如何知道這一段是花?如何定位的?

  【16:30】先不管這一段 花指令,∵這2句並沒有被混淆過。被混淆過的應該是 紅色的地方。

    【16:45】首先 先看 0045611F的地方,將它轉換成 數據

    【16:55】00456119處 明顯也是被混淆過的,也轉換成 數據

    【17:07】00456117處 明顯也是被混淆過的,也轉換成 數據

    【17:20】00456115處 明顯也是被混淆過的,也轉換成 數據

    【17:30】選擇 00456117處 

  【17:35】ZC: 他這里 是看了 Word教程 才去 00456117處 的,如果沒有這個Word教程的話,我們如何定位到 00456117處?00456117處 有何特殊?【17:39】ZC: 可以看到 00456113處 也有一個 紅色區域

  【17:41】00456115處 的 "EB 02" 並不是 jmp,00456117處 的 "EB 01" 才是jmp,jmp到 00456119處(ZC: 為何 前者不是jmp,后者是 jmp?)【17:51】00456117處 轉換成 代碼(鍵盤C),變成"jmp short loc_45611A"

 

  【未完】

3、

4、

5、

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM