Re: [問題] Intel的指令機械碼
先聲明: 我是路人甲
※ 引述《jeunder ()》之銘言:
: ※ 引述《zha0 (zha0)》之銘言:
: : 如果今天要產生 INC EAX 他可以用亂數去跑那些垃圾指令,
: : 可以用隨機的方法產生 >_<
: : (設定 REG = 多少, 丟給 SEH 去跑,跑到條件成立就跳出來,
: : 然後把那個產生的結果 Copy 過去 .
: : (在跑的次數(1000 or 1000xxx...)中如果都沒成功,那就用自己的方式讓他成功 XD)
: 老實說, 這個方法我以前使用過了. :p
我也招了... 我也幹過... :D
: 產生亂指令, 紀錄 register 屬性 (可否任意破壞, 值是否確定... 等)
: 然後將產生的指令跑過一遍, 紀錄結果是否是自己想要的...
: 不一樣的是我沒有用 int 1 (or SEH), 而且只使用在設 register 初值時.
: 這方法終究有些限制, 例如無法精確掌握暫存器的值,
: 所以也不可能拿暫存器的值當成存取記憶體的 index,
: 除非你是分段來做...
: 但是你還必須掌握記憶體的屬性, 哪些地方是可寫的? 可讀的? 或者值是確定的?
: : 不過在想一點,那就是如果今天是多型或亂体,其實一看就知道他是有問題的。
: : 再想之後可能會把多型作的很像正常的程式 >___<
: 沒錯, 其實長得像正常程式, 又要維持多變的形體, 比隨便產生垃圾指令困難多了.
: 最厲害的就是可以做到完全沒有多餘指令, 確又能有很多變化.
我的想法: 那就不要垃圾指令... 從頭到尾都不要了...
直接在宿主的開頭的程式碼取一段來分析, 並將解碼程式與其相結合, 我印象中
在 64 位元的環境下很好做到! 但是要附上兩個 tab 紀錄分解組裝的位址...
程式一開始會先 run 解碼與宿主的結合體, 等解碼完畢後, 在將該區域修改的部
份在改回來, 在轉出控制權...
那些部份可以改: 初級的像 jxx call loopxx ... 等指令 , 及其前後幾個指令
都可以改掉... 進階的保留 jxx call loopxx 等指令只改其 disp , 這樣一來就
不就搞定了... :-)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.186.240
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章