花指令入门操作实践
根據逆向相關資料;下面有2段ASM代碼;
1;
start_:xor eax, eaxtest eax, eaxjz label1jnz label1db 0E8h ;垃圾指令 label1:xor eax, 3add eax, 4xor eax, 5ret2;
start_:xor eax, eaxtest eax, eaxjz label1jnz label0 ;指向無效的跳轉指令 label0:db 0E8h label1:xor eax, 3add eax, 4xor eax, 5ret end start_代碼1添加了垃圾指令;
代碼2添加了更垃圾一些,一個指向無效地址的跳轉指令;
會迷惑反匯編器;導致反匯編出錯;
?
在反匯編的過程中,存在幾個關鍵問題;代碼與數據的區分,匯編指令長度,多種多樣的間接跳轉實現形式;
反匯編算法必須恰當處理,保證反匯編結果的正確性;
主要的兩類反匯編算法是:線性掃描Linear Sweep,遞歸行進Recursive traversal;
?
下面先來鼓搗一下;把這兩段代碼構建為exe文件;再用反匯編器打開;看有沒有干擾的效果;
本機是win10;安裝有masm32;
如果masm32環境變量沒搞的話;先set path=g:\masm32\bin;%path%;
先把代碼直接存為asm,然后ml;
出現兩個錯誤:
1.asm(1) : error A2034: must be in segment block
1.asm(2) : error A2085: instruction or register not accepted in current CPU mode
那就還是要加以下幾句在頭部:
?? ??? ?.386
?? ??? ?.model flat,stdcall
?? ??? ?option casemap:none
?? ??? ?.code
?
因為代碼看上去像是DOS匯編;執行如下;
ml /c 1.asm
link 1.obj
提示錯誤:
1.obj : warning LNK4033: converting object format from OMF to COFF
LINK : fatal error LNK1561: entry point must be defined
試驗幾次后;還是要如下圖;才能構建出exe;
ml要帶 /c /coff;link要帶 /subsystem:windows;
然后1.exe,2.exe構建出來了;
根據逆向資料;1.exe會被W32DASM錯誤識別;
W32DASM在win10下使用;要先搞一下兼容性;
打開1.exe,看一下,果然反匯編錯誤;迷惑到了;
1.exe會被ollydbg正確識別;如下;加的??db 0E8h ? ;垃圾指令 這條,被識別;
根據逆向相關資料;代碼2會迷惑到ollydbg;打開看一下;
但是沒有迷惑;正確識別了;應該是工具進步了;上面用的是ollydbg 2.x;
然后用ollydbg 1.x打開2.exe;識別錯了;如下;
把這個花指令放到VC++嵌入匯編里面運行看看;
不能運行;嵌入匯編只能運行匯編代碼塊;不能帶db和標號;
這兩個exe不要運行它;只是用它看一下花的效果;
注意1.exe和2.exe被ollydbg反匯編后,只有00401006地址處略有差別;
總結
- 上一篇: UPX命令行压缩、反汇编动画进入、Oll
- 下一篇: Hyper-V安装ReactOS未成功