作者zha0 (zha0)
站内ASM
标题Re: [问题] Intel的指令机械码
时间Mon Mar 5 14:09:08 2007
※ 引述《final01 (牛顿运动定律)》之铭言:
: Intel X86指令的机械码是不公开吗?
: 我想找好像都找不到~
: 有人知道哪有提供吗?
推 jeunder:愿闻其详 :) 03/04 20:42
→ jeunder:这方面的发展, 我最後知道的是利用 反组译+重组译 技术. 03/04 20:43
→ jeunder:太久没接触, 不知道还有没有新的技术出现? 03/04 20:44
回 D 大大 >_<
你把反组译+重组译都搬出来了,这样我的想法就变的很弱小了 >_<
不过还是打上来让你笑一笑好了,如果有错或是要指导,还是大大多多见量.
我的想法是类似,记录每个 Register
然後利用 tunnel 的技术,来产生垃圾码,除了特权指令外的 Opcode 都能拿来用.
(为什麽用 tunnel 呢?因为懒得自己写反组译,用现成 CPU 去跑 :P)
DOS 下有 INT 1,Windows 下有 SEH.
O_REG_Bitmap; // 所以 REG 的 Bitmap,记录使用与未用,未用来拿产生 Junk code
O_REG_SET; // 在记忆体里面建立一组暂存器(存暂存器运算的资料)
BaseAddr;
EIP;
Non_Privilege_Opcode[nnn]; // 所有不是特权指令的 Opcode 可以用特权指令的来反查
拿一个乱数取回圈 {
产生 Opcode+Operand[Unuse_REG];
丢到 SEH_Signel_Step 执行,执行结果回存到O_REG_SET,
如果有错误(方法存取)再产生一次或产生一个 SEH 包往他;
// 抽原始码的 Code 交换,或用 EPO 的支术 :P
交换使用与未使用的 REG(O_REG_Bitmap, O_REG_SET)
}
这样用 Signel_Step 的好处是 ..
如果今天要产生 INC EAX 他可以用乱数去跑那些垃圾指令,
可以用随机的方法产生 >_<
(设定 REG = 多少, 丢给 SEH 去跑,跑到条件成立就跳出来,
然後把那个产生的结果 Copy 过去 .
(在跑的次数(1000 or 1000xxx...)中如果都没成功,那就用自己的方式让他成功 XD)
不过在想一点,那就是如果今天是多型或乱体,其实一看就知道他是有问题的。
再想之後可能会把多型作的很像正常的程式 >___<
SORRY 很久没有打东西了,表达能力变差了.
PS. D 大 (Zxxx 没要完成吗?现在 NT 还没有 BOOT+PE 的 >__< )
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.73.218.130