Re: [問題] Intel的指令機械碼
※ 引述《final01 (牛頓運動定律)》之銘言:
: Intel X86指令的機械碼是不公開嗎?
: 我想找好像都找不到~
: 有人知道哪有提供嗎?
推 jeunder:願聞其詳 :) 03/04 20:42
→ jeunder:這方面的發展, 我最後知道的是利用 反組譯+重組譯 技術. 03/04 20:43
→ jeunder:太久沒接觸, 不知道還有沒有新的技術出現? 03/04 20:44
回 D 大大 >_<
你把反組譯+重組譯都搬出來了,這樣我的想法就變的很弱小了 >_<
不過還是打上來讓你笑一笑好了,如果有錯或是要指導,還是大大多多見量.
我的想法是類似,記錄每個 Register
然後利用 tunnel 的技術,來產生垃圾碼,除了特權指令外的 Opcode 都能拿來用.
(為什麼用 tunnel 呢?因為懶得自己寫反組譯,用現成 CPU 去跑 :P)
DOS 下有 INT 1,Windows 下有 SEH.
O_REG_Bitmap; // 所以 REG 的 Bitmap,記錄使用與未用,未用來拿產生 Junk code
O_REG_SET; // 在記憶体裡面建立一組暫存器(存暫存器運算的資料)
BaseAddr;
EIP;
Non_Privilege_Opcode[nnn]; // 所有不是特權指令的 Opcode 可以用特權指令的來反查
拿一個亂數取迴圈 {
產生 Opcode+Operand[Unuse_REG];
丟到 SEH_Signel_Step 執行,執行結果回存到O_REG_SET,
如果有錯誤(方法存取)再產生一次或產生一個 SEH 包往他;
// 抽原始碼的 Code 交換,或用 EPO 的支術 :P
交換使用與未使用的 REG(O_REG_Bitmap, O_REG_SET)
}
這樣用 Signel_Step 的好處是 ..
如果今天要產生 INC EAX 他可以用亂數去跑那些垃圾指令,
可以用隨機的方法產生 >_<
(設定 REG = 多少, 丟給 SEH 去跑,跑到條件成立就跳出來,
然後把那個產生的結果 Copy 過去 .
(在跑的次數(1000 or 1000xxx...)中如果都沒成功,那就用自己的方式讓他成功 XD)
不過在想一點,那就是如果今天是多型或亂体,其實一看就知道他是有問題的。
再想之後可能會把多型作的很像正常的程式 >___<
SORRY 很久沒有打東西了,表達能力變差了.
PS. D 大 (Zxxx 沒要完成嗎?現在 NT 還沒有 BOOT+PE 的 >__< )
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.218.130
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章