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

看板ASM (組合語言)作者 (秀樹)時間17年前 (2007/03/17 20:18), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/8 (看更多)
先聲明: 我是路人甲 ※ 引述《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
文章代碼(AID): #15-zo5L_ (ASM)
討論串 (同標題文章)
文章代碼(AID): #15-zo5L_ (ASM)