Re: [問題] Intel的指令機械碼
※ 引述《amjads (秀樹)》之銘言:
: 先聲明: 我是路人甲
: ※ 引述《jeunder ()》之銘言:
: : 老實說, 這個方法我以前使用過了. :p
: 我也招了... 我也幹過... :D
: : 產生亂指令, 紀錄 register 屬性 (可否任意破壞, 值是否確定... 等)
: : 然後將產生的指令跑過一遍, 紀錄結果是否是自己想要的...
: : 不一樣的是我沒有用 int 1 (or SEH), 而且只使用在設 register 初值時.
: : 這方法終究有些限制, 例如無法精確掌握暫存器的值,
: : 所以也不可能拿暫存器的值當成存取記憶體的 index,
: : 除非你是分段來做...
: : 但是你還必須掌握記憶體的屬性, 哪些地方是可寫的? 可讀的? 或者值是確定的?
: : 沒錯, 其實長得像正常程式, 又要維持多變的形體, 比隨便產生垃圾指令困難多了.
: : 最厲害的就是可以做到完全沒有多餘指令, 確又能有很多變化.
: 我的想法: 那就不要垃圾指令... 從頭到尾都不要了...
: 直接在宿主的開頭的程式碼取一段來分析, 並將解碼程式與其相結合, 我印象中
之前還滿多人在寫 LDE (Length Disassembler Engine) 最小好像 1xx~2xx bytes
: 在 64 位元的環境下很好做到! 但是要附上兩個 tab 紀錄分解組裝的位址...
: 程式一開始會先 run 解碼與宿主的結合體, 等解碼完畢後, 在將該區域修改的部
: 份在改回來, 在轉出控制權...
PE : TLS Callback, ELF : PIC, PIE
看完上面的感覺好像?程式碼的每個指令都插到宿主去,還是我認知有錯 XD
因為想用 OEP (Entry-Point Obscuring) 插程式碼,宿主程式碼如果一大,
因該會很懶得,去追,跟去柝出來 >__<
/////
插入的每一個指令都是用來填入記憶体,把整個 infect+insert code 都填出來,
然後再跳過去執行。 ( 如果遇到 NX, XD 因該會死 )
(不過話說 AV 的 Engine 好像對指令模擬的不是很完整,
用些怪指令下面的 Code 就都直接不掃了 XD)
/////
這樣因該會比插入的執令,在那裡處理來的簡單。
: 那些部份可以改: 初級的像 jxx call loopxx ... 等指令 , 及其前後幾個指令
: 都可以改掉... 進階的保留 jxx call loopxx 等指令只改其 disp , 這樣一來就
: 不就搞定了... :-)
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.77.232
討論串 (同標題文章)
ASM 近期熱門文章
PTT數位生活區 即時熱門文章