摘要: 主要有两种反调试方法 第一种在 sub_A01990 中,检查各种标志位 第二种在 sub_A01930,sub_A01950 中,检查执行时间 通过分析可知,main 函数加载了一个 PE 文件,在其中找到导出的 getflag 函数并调用。 解密部分在 sub_A01F00,比较复杂,可以动态调 阅读全文
posted @ 2025-12-13 14:07 矛盾空间 阅读(1) 评论(0) 推荐(0)
摘要: 记录一下如何用 pywin32 加载 exe 的资源。 import win32api import win32con import os import subprocess def load_resource(filename): password = '' hModule = win32api. 阅读全文
posted @ 2025-12-12 21:36 矛盾空间 阅读(7) 评论(0) 推荐(0)
摘要: std::vector<Ty> struct std::vector<Ty> { Ty *_Myfirst; Ty *_Mylast; Ty *_Myend; }; std::string struct std::string { union _String_val { char _Buf[16]; 阅读全文
posted @ 2025-12-03 21:11 矛盾空间 阅读(3) 评论(0) 推荐(0)
摘要: 先用 DIE 检查,是汇编写的 exe 程序 把中间的一大段数据转成数据,是 base64 编码。Shift + E 导出,把换行删掉 明显是 png 图片 stegsolve 查看图片,没有多余的数据。但是在 RGB 的 panel 0 上方明显和其他地方不一致,猜测 LSB 隐写 感觉开头像 D 阅读全文
posted @ 2025-12-02 02:09 矛盾空间 阅读(14) 评论(0) 推荐(0)
摘要: 在 C++ 标准 RTTI(dynamic_cast / typeid)普及之前,MFC就通过 DECLARE_DYNAMIC,IMPLEMENT_DYNAMIC 等宏实现了一套 RTTI。 CRuntimeClass 是核心部分,用于描述每个 class 信息。每个继承 CObject 的 cla 阅读全文
posted @ 2025-12-01 23:48 矛盾空间 阅读(10) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2025-10-30 01:37 矛盾空间 阅读(0) 评论(0) 推荐(0)
摘要: main 分析 main 函数。创建一个新线程,它的参数是主线程的句柄。主线程检查输入是否正确,如果错误执行 if 里面的内容,如果正确执行 sub_1400093B0()。 把字符串串算出来,方便理解程序。顺便把其他函数重命名一下 StartAddress StartAddress 里面前两个函数 阅读全文
posted @ 2025-10-25 14:35 矛盾空间 阅读(20) 评论(0) 推荐(0)
摘要: 用 DIE 打开,是一个 dll 用 ida 打开,简单分析一下,是一个记录键盘按键的程序。里面的每个虚拟键码都有一个函数返回字符串 那么 flag 在哪里呢?看到左边函数窗口里看到有一个 DialogFunc,按 X 查找交叉引用,最后找到按下 "m" 对应的函数 执行 sub_10001240 阅读全文
posted @ 2025-10-02 20:16 矛盾空间 阅读(34) 评论(0) 推荐(0)
摘要: 一个程序的入口不是 main(),而是 mainCRTStartup()。在 MSVC 编译器中,mainCRTStartup() 调用 __scrt_common_main(),由这个函数最终调用 main()。 由于使用了 __forceinline,__scrt_common_main 一般会 阅读全文
posted @ 2025-09-28 21:49 矛盾空间 阅读(24) 评论(0) 推荐(0)
摘要: 是无壳 Unity 程序,直接动调。 直接用 x64dbg 调试会有问题 (具体为什么我也不清楚),用 scyllahide 插件隐藏调试器即可。 随便输入一个flag,它会弹出一个错误提示窗口,我们可以从这个窗口入手。 创建一个窗口,一般会用 CreateWindowEx MessageBox 等 阅读全文
posted @ 2025-09-28 16:58 矛盾空间 阅读(13) 评论(0) 推荐(0)