无壳,64位
什么是WER:
Windows 错误报告 (WER) 是一种灵活的基于事件的反馈基础结构,旨在收集有关Windows可以检测、向 Microsoft 报告信息以及为用户提供任何可用解决方案的硬件和软件问题的相关信息。
参考:关于 WER - Win32 apps | Microsoft Docs
其关键函数如下:
1 | DWORD WINAPI ApplicationRecoveryCallback( |
应用程序定义的回调函数,用于在应用程序遇到未处理的异常或无响应时保存数据和应用程序状态信息。
参考:ApplicationRecoveryCallback callback function (Windows) | Microsoft Docs
1 | HRESULT WerReportHang( |
返回值:返回S_OK函数是否能够在失败时启动报告或错误代码。请注意,S_OK并不一定意味着“无响应”报告已成功完成,而只是表示已启动。
参考:WerReportHang function (errorrep.h) - Win32 apps | Microsoft Docs
主要运行逻辑为:
1.在初始化注册ApplicationRecoveryCallback函数
2.在OnExit调用WerReportHang触发异常
3.运用ApplicationRecoveryCallback进行真正的逻辑处理。
本题OnExit函数就在main函数里面,调用WerReportHang就会关闭调试器,调试不起来
解题:
搜索关键函数,在import表里面找到,放在了一个dll里面
然后交叉引用找到:
这里的sub_14000F3B0就是我们要找的关键函数
也可以通过MessageBox函数来找。
1 | data = [ 0x05, 0x03, 0x55, 0x05, 0x04, 0x07, 0x5E, 0x54, 0x05, 0x07, 0x50, 0x02, 0x03, 0x53, 0x5F, 0x50, 0x53, 0x50, 0x53, 0x05, 0x55, 0x00, 0x54, 0x55, 0x57, 0x03, 0x05, 0x02, 0x52, 0x50, 0x51, 0x53] |
异或写脚本得到flag