例如,我想用这个
替换这个
PUSH EBP
MOV EBP,ESP
...
PUSH DWORD [0x0BEE]
PUSH 3
CALL <check>
TEST EAX,EAX
JE <0xabcd>
PUSH <text1>
PUSH [EBP+5]
CALL <MessageBox>
0xabcd:
PUSH <text2>
PUSH [EBP+5]
CALL <MessageBox>
执行相同的操作。
#1 楼
我认为代码态射不是这个问题的答案或答案。问题是通过使用不太常见或未记录的汇编指令来混淆算法实现。启用广泛的优化后,某些编译器实际上可以完成此操作。例如,当英特尔C编译器,GCC或PGI之类的编译器与某些内部模式(归约,矩阵乘法等)匹配时以及目标体系结构支持矢量化时,它们可以自动对循环进行矢量化处理。其他优化可能导致极其棘手的汇编代码,但由于编译器未进行任何明确的混淆,并且编译器所做的大部分工作都是模式匹配,因此总可以逆转。当然,如果将高级模式与低级模式相关联,那么,您会迷惑不解,并且您的代码很容易被反转。因此,您要寻找的技术只能通过使用编译器内在函数和替代结构编写高级代码或在汇编级别上手动执行。
如果您真的对混淆技术感兴趣,我建议您阅读Jan CAPPAERT的博士学位论文:https://www.cosic.esat.kuleuven.be/publications/thesis-199.pdf,它涵盖了一些不错的技术不仅用于恶意软件,而且还用于工业软件。参考书目非常丰富。
您也可以查看Defcon的Sean Taylor的演讲,内容涉及如何使编译器进行混淆:https://www.defcon.org/images/defcon-17/dc- 17-presentations / defcon-17-sean_taylor-binary_obfuscation.pdf。
关于多态,这是一种很好的混淆技术,尽管由于多种原因,如今它很少在恶意软件中使用。其中之一就是,即使没有,也几乎没有恶意软件作者以汇编形式编写代码,并且大多数使用框架和引擎。您必须记住,编写混淆的汇编代码是一门艺术……现在,它被用于强化逆向工程过程,以谋取利益,而不是挑战。
我一直在努力一个GCC插件,该插件添加了一个优化遍历,该优化遍历在代码的IR(内部表示(GIMPLE))上执行了代码模糊处理,然后在汇编级别应用了另一次模糊处理遍历。这种方法的有趣之处在于,您在编译时就具有程序的CFG(控制流图),并且可以应用许多混淆算法和技术,以便将其分解为其他等效的CFG,然后评估最佳套件并使用在其余的整个编译阶段中。
希望我的帖子对您有所帮助。
#2 楼
这些使代码发生变异(并在语义上仍然保持等效)的技术称为多态代码。可以实现代码变异的软件通常称为多态引擎。逃避反病毒软件的模式匹配检测是恶意软件设计中一种非常广泛使用的技术。有了这些关键词(并感谢Google),您将可以找到有关该主题的大量文献。但是,这里有一些建议:
Dark Avenger(已知是第一个使用多态编码的病毒)。
白痴指南由Trigger [SLAM] '97编写多态引擎。
Mental Driller的高级多态引擎构造。
多态病毒-实现,检测和保护。
使用频谱分析改进多态引擎的指南
使用频谱分析改进多态Shellcode引擎。
...
您还可以找到准备启动的多态引擎。只要找就可以。
评论
仅供参考,如今,多态性在恶意软件中极为罕见。尽管上世纪90年代的许多病毒都具有多态引擎,并且有一些恶意软件家族使用服务器端多态,但如今却很少见到恶意软件使用多态引擎。
–詹森·格夫纳(Jason Geffner)
2014年2月4日14:38
我必须承认,我对恶意软件的经验来自90年代...:o)因此,我相信您对此的评价。
–恐怖
2014年2月4日15:14
我注意到更多很棒的技巧,例如变形和时间难题。
– Stolas
2014年2月4日15:30
@Jason,我认为现在说恶意软件很少搭载该引擎会更正确。多态本身本身仍在使用中,特别是在脚本空间中。
–彼得·弗里
2014年2月4日23:40
@peterferrie您是否将一般混淆与多态性分组?
–詹森·格夫纳(Jason Geffner)
2014年2月5日,0:08