随着最近的几节课学习,那么我想大家已经有了一定的心得了。
怎么逆向呢?首先你得脱壳,然后你要去找到注册机制的验证机制,找到了它怎么验证的,这个软件我们就能搞定逆向了。
那么在之前的课里我们都是根据一定的特征去找到验证机制的,今天我们来学习下,怎么从一个没有弹窗的软件里找出关键位置。
这是我写的一个小软件,中间这个数字会一直变啊变啊变啊变……我们此次的目的是让这个数字不要再变了。
查壳,没壳,丢到 dnSpy 里走一波。
因为没有啥太好的思路,所以直接 F5 让它跑起来。
既然变化发生在这个窗口,那么我们不妨在这里中断,看一下它的调用堆栈。
堆栈里从 Main 方法开始就调用了系统的各种 dll,看起来我们只能从 Main 入手了,双击进入。
在这里我们能看到一个对窗口的初始化,说明这个程序在运行后显示了 Form1 窗口。
点击 Form1,我们能找到这个窗口的初始化信息。
点击 InitializeComponent 方法,看一下这个窗口有哪些元素。
如上图,引起我们注意的有两个元素,一个是 500 毫秒执行一次的 Timer1(时钟 1),另一个是一个 label2(标签 2)
那么我们大概能猜到,是时钟 1 每隔 500 毫秒改变了一次标签 2 的内容。
为了验证我们这个想法,我在 39 行的 label2 上点击右键 -> 分析
在下方的分析器里,我们可以找到它的一些分析内容
双击跟进 Timer1_Tick 去看看
发现这个方法里写了对 label2 的 Text 属性和 ForeColor 属性的修改。
右键编辑方法,把不需要的语句注释掉
编译,保存。
课后作业是,想想明明 laber2 被赋值了文本内容和颜色,但为什么我们在被赋值里找不到它而是在被读取里找到了?
本章课件第七课:https://www.lanzous.com/i3r1yuf
感谢本文作者:慕若曦