作者zha0 (zha0)
站内ASM
标题Re: [问题] Intel的指令机械码
时间Sat Mar 17 22:35:24 2007
※ 引述《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