windows逆向4
C++数据结构-map
C++-MFC 程序
C++-MFC 程序分析-00
010Editor 分析
WinRAR 去广告分析
-
虚函数的调用在反汇编中有什么形式?
① 类对象.虚函数,反汇编和调用普通成员函数一样,call offset
② 类对象->虚函数,反汇编中使用的是寄存器调用,访问了虚函数表中的函数 -
数据结构逆向的重点在于分析什么?
重点分析数据,数据的引用、数据的变化,从而推理数据的结构
C++数据结构-map
Map 的特点就是查询速度快
stl 库的中 Map 是平衡二叉树的一种,叫做红黑树
C++-MFC 程序
MFC 程序,可能藏匿初始化代码或是反调试代码的地方:
① 全局对象的构造函数
C 运行的 inittem 函数
② theApp 对象中的 InitInstance
image.png
③ 对话框对象中的 OnInitDialog
image.png image.png
return pDlg->OnInitDialog();
00D3786E 8B 4D FC mov ecx,dword ptr [ebp-4]
00D37871 8B 11 mov edx,dword ptr [ecx]
00D37873 8B F4 mov esi,esp
00D37875 8B 82 80 01 00 00 mov eax,dword ptr [edx+180h]
00D3787B 89 45 F8 mov dword ptr [ebp-8],eax
00D3787E 8B 4D F8 mov ecx,dword ptr [ebp-8]
00D37881 E8 72 2C FB FF call @_guard_check_icall@4 (0CEA4F8h)
00D37886 8B 4D FC mov ecx,dword ptr [ebp-4]
00D37889 FF 55 F8 call dword ptr [ebp-8]
④ 按钮响应事件
image.pngDebug 版,静态编译
(pTarget->*mmf.pfnCmd_v_v)();
00D36821 8B F4 mov esi,esp
00D36823 8B 4D F8 mov ecx,dword ptr [mmf]
00D36826 89 4D B8 mov dword ptr [ebp-48h],ecx
00D36829 8B 4D B8 mov ecx,dword ptr [ebp-48h]
00D3682C E8 C7 3C FB FF call @_guard_check_icall@4 (0CEA4F8h)
00D36831 8B 4D 08 mov ecx,dword ptr [pTarget]
00D36834 FF 55 B8 call dword ptr [ebp-48h]
Release 版静态编译
(pTarget->*mmf.pfnCmd_v_v)();
010F7491 8B 4D 14 mov ecx,dword ptr [ebp+14h]
010F7494 E8 D9 0D 13 00 call 01228272
010F7499 8B CE mov ecx,esi
010F749B FF 55 14 call dword ptr [ebp+14h]
VS2013 Debug 静态编译
CALL DWORD PTR SS:[EBP-0x8]
VS2013 Release 版静态编译
CALL DWORD PTR SS:[EBP+0x14]
C++-MFC 程序分析-00
点亮按钮
image.png
分析:
① 下 API 断点,EnableWindow
② 字符串”开启 MFC 之门”
③ 激活按钮工具
④ 根据资源 ID,查找窗口句柄,再使用 API EnableWindow 点亮
查找和资源 ID 有关的代码
在每个代码上设置断点
image.png
⑤ 使用资源工具修改资源
image.png
010Editor 分析
- 信息收集(踩点)
找到注册对话框,测试输入信息
菜单-Tools-Register
测试有弹窗信息,可以从两个方向入手:
① API 下断, 和窗口、对话框有关的 api
② 搜索弹窗的字符串
安装目录的扫描:
image.png
- 逆向分析
① 字符串分析
010 Editor
Invalid name or password. Please enter your name and password exactly as given when you
purchased 010 Editor (make sure no quotes are included).
&OK
② API 下断
image.png image.png在多个 API 下断,当输入假的序列号时,单击检测序列号按钮,看是否会断下。
运气比较好,在 CreateWindowExW 断下,接下来栈回溯分析每一个调用。
有一个地方,有很多字符串提示,猜测这个地方离关键跳转比较接近。
-
破解程序
① 找到了关键跳转,只改关键跳转不行。
image.png
特征:8B0D????????68894300006A09E8834363FF8B0D????????8BF881FFDB000000
② 在关键跳转附近,找到了关键函数
③ 在关键函数中找到了真正的验证函数,验证函数中有计算序列号的算法
image.png
如果想要计算序列号,需要跟踪验证函数,每一条语句,找出序列号计算的逻辑,提取算法。
image.png
WinRAR 去广告分析
CreateWindowEx 下断,找到广告窗口,修改代码,跳过创建窗口 API