X86逆向2:提取按钮通杀特征码

本章我们将学习特征码的提取与定位,特征码是软件中一段固定的具有标志性的代码片段,特征码的用途非常广泛,最常见的就是杀毒软件的查杀了,查杀就是根据特征码定位技术实现的,再比如木马的免杀也是修改了特征码的一些特征片段而躲避查杀的啦。

本章的内容对于软件破解非常的有用,比如你需要破解一个程序,但你无法定位到关键按钮的事件中去,此时你可以先查看待破解程序使用了那种编程语言来写的,然后自己用对应的编程语言编写一个简单的小程序,并放入容易搜索到的字串,然后提取针对特定语言特定版本的通杀特征,最后应用到需要破解的程序中去。

------------------------------------------------------------
本章难度:★☆☆☆☆☆☆☆☆☆
本章课件:CM_02.zip
------------------------------------------------------------

MFC:      sub eax,0a
VC++6.0:  sub eax,0a
VB语言:   81 6C 24
易语言:   FF 55 FC 5F 5E或 (e-debug)
万能断点: F3 A5 8B C8 83 E1 03 F3 A4 E8 Z(User32模块下断)
Delphi:   74 0E 8B D3 8B 83 ?? ?? ?? ?? FF 93 ?? ?? ?? ??
蓝屏保护特征码: 55 8B EC BB 06 00 00 00
蓝屏防御特征码: 55 8B EC 81 EC 14 00 00 00 68 0C 00 00 00

1.先来看一下这个CM例子,当我们点击按钮1的时候,会提示一个MessageBox信息框,而点击按钮2则程序没有反映,我们现在要做的就是通过按钮1提取到按钮事件的特征码,然后下断点并定位到按钮2的按钮事件中。

2.打开OD直接将这个CM拖入OD中,默认会停在程序的OEP位置,这次我们不用字符串来找了换个思路,我们下一个MessageBox弹窗断点,直接选择【设置API断点】,选择消息框,然后选择MessageBoxA就可以了。

3.接着我们按下【F9】让程序跑起来,然后点击CM程序中的【弹出窗口】按钮,发现OD断在了系统领空,系统领空的东西是不能改的,我们直接出这个CALL。

4.通过单步【F8】出CALL后,看到以下代码,并没有段首,我们继续F8出这个call.

5.再次出CALL ,并没有首的符号,这里还在函数的内部,我们继续单步到【retn】出这个call.

6.最后看到了。

7.直接断首下一个【F2】断点,然后运行程序,再次点击弹窗按钮,OD再一次断下了。

8.这只是一个独立的弹窗过程并不是按钮的按钮事件,按钮事件一定是调用了这个过程,所以我们需要找到是谁执行了这里的代码。

由于,调用call指令会将当前指令的下一条指令的地址压入栈存储,所以我们就直接观察堆栈中的参数就能够定位到按钮事件的上一层代码的位置了。

9.OD直接搜索这个地址,看一下是不是有call 调用了他。

10.果然,我们果断在这里下一个【F2】断点,然后直接【F9】运行程序。

11.点击【测试定位效果】按钮,程序会被断下,这更能确定,这就是按钮的调用源头。最后提取这段通杀特征【FF 55 FC 5F 5E】。

12.直接按下【F7】,进入按钮二的核心代码处。

13.如果要使用特征码定位的话,可以在OD反汇编窗口按下【ctrl + B】,直接搜索即可。

总结:学会了这一个小技能,对于软件的破解大有帮助,虽然简单,但很实用

写教程不容易,转载请加出处,您添加出处,是我创作的动力!

原文地址:https://www.cnblogs.com/LyShark/p/11137442.html