Re: [問題] Intel的指令機械碼

看板ASM (組合語言)作者 (zha0)時間17年前 (2007/03/17 22:35), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/8 (看更多)
※ 引述《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
文章代碼(AID): #15-_okcD (ASM)
討論串 (同標題文章)
文章代碼(AID): #15-_okcD (ASM)