论坛首页 逆向工程技术区 阅读主题

[原创]Enigma Virtual Box 分析(KCTF2025 第九题 智斗邪首)

210 浏览 1 回复
#1 楼主 2026-06-01 21:08:55
首先运行htg_Crackme.exe后 附加到进程

然后调试->窗口->模块 列出内存加载的模块

最后保存模块
查看脱壳后的文件,发现.NET.VirtualAddress和.NET.Size都不为0

说明Enigma在运行时修改了0x178和0x17c的值

可以先手动修改.NET.VirtualAddress值为0x400和.NET.Size为0x48,.NET的反编译代码就出来了

虽然可以看到.NET的代码,但是程序无法运行
如何恢复所有的被Enigma修改的PE头,可以在.NET.VirtualAddress的0x00000178处下内存的写断点;
程序断在了sub_1407E5560这个恢复PE头的函数;首先是恢复PE NumberOfSections = 2 的代码然后是.text PointerToRawData对齐.text VirtualAddress 和 .rsrc PointerToRawData对齐.rsrc VirtualAddress最后将.NET.VirtualAddress设置为0x2000和.NET.Size设置为0x48 ,其他的值设置为0;通过分析可知,AddressOfEntryPoint Exception.VirtualAddress Exception.Size TLS.VirtualAddress TLS.Size 这五个的值为硬编码0;其余的值是通过cs:qword_14084D050+偏移地址动态获取的;
继续下内存的写断点,程序断在了loc_1407AD150处;loc_1407AD150是一系列的读值赋值操作动态分析其值的来源发现其来自0x00000001407A8068开始的地址,位于enigma1的TlsCallbacks处;
根据以上的分析可以编写静态脱壳代码:运行结果mov     rax, [rbp+var_28]

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288529.htm
#2 2026-06-01 21:08:55
谢谢分享

请登录后参与讨论

立即登录 注册账号