一直听人吹enigma打包器,什么“可以把exe变成只有4kb大小的tmp文件还能运行”,“防提取exe很强”。
我就试了下,1小时09分就提取出来了。
先说一下enigma打包器运行虚拟exe的操作:
1.对一堆API下钩子,监控各种注册表读取,exe运行的API
2.调用这些API时,会经由钩子跳到enigma的代码。
3.在C:\Users\Administrator\AppData\Local\Temp目录放一个原程序的pe文件(后缀为tmp),但是这个tmp文件没有区段数据以及各种资源数据,就仅仅只是一个pe架子。
4.挂起方式createprocess这个tmp文件
5.把区段数据及其各种资源数据全部写回到tmp模块里面
6.调用NtResumeThread恢复主线程运行。
提取方法:
1.下断NtResumeThread,并运行断到这里
2.打开ce,对tmp进程的oep写入jmp oep
例如oep是0x405000,那就是写入jmp 0x405000。
(什么?你说你不知道tmp文件的oep?这个简单,拿pchunter对tmp模块的内存进行dump,dump下来再丢进dbg一看,oep就知道了)
3.运行到ret 0x8
4.开dbg附加tmp进程
5.在oep处下断点(此时oep已经是jmp oep了,而且他的主线程一直在这条代码跑死循环呢)
6.F9运行,会断在oep这里
7.取消断点,将oep处的jmp改回原来的代码
8.拿x64dbg的scally进行dump并修复iat(建议在win7系统操作,由于我是在win10进行的dump,所以在7系统出现了不兼容)
8.或者拿pchunter直接dump tmp模块的内存也可以