本人小菜一个,欲求邀请码一枚,奋斗数日,发现挂机实在不行,写文章才是王道啊。于是便有了本文,第一次写,不足之处请指出,谢谢!文章技术含量不高,废话太多了,不过勉强看吧,求邀请码呐!
SDemo乃视频录制必备工具,美中不足的是多了个密码功能,有些视频教程居然要密码,小菜那个怒啊。操起OD载入视频文件,按下F9运行程序。
随便输入一个密码试探一下,程序弹出个消息框,提示说密码错误,如图。
既然有错误提示,那我们用OD的字符串查找工具即可,或者下消息框函数断点也行(在命令行输入“Bp MessageBoxA”)。用OD载入程序,点击菜单“插件”—>“超级字符串参考”,找到“Password Wrong!”。双击它,即可跳到调用它的地方,到了调用它的地方后,我们往前看看,如图。
这里就是破解的切入点,粗略地看了下,发现了经典的比较语句,在00402005处下断点。F9运行程序,随便输入一个密码,程序断下在玩吗刚刚下的断点上。F8单步步过,我们在经过转移语句的时候要分外注意,步过之前先看看它是跳向哪里的,如果不是跳向失败,那就让它跳。
哪要怎么判断它是否跳向失败呢?跳向失败一般可分为两类,一种是弹出错误提示,二是直接退出程序或无反应。不过除了这两类,还有一些特殊的,例如下个注册失败标志位等等,就不多说了。F8走到00401FF9遇到了个转移语句( JE 00402056),来看看它跳向哪里,如图。
这里程序调用了SDemo自己的函数OnOK,从字面上看,貌似是成功的意思,凭直觉认为是开始播放,那就让它跳,试试看。把JE改为JMP,F9运行,果然成功播放了。
我们再回到刚刚的地方去看看,如图。
在转移语句前有一句判断XX是否为零的语句,综合修改后的反应,我们可以得出结论,这里的判断语句是用来判断动画是否加了密码,没有则直接播放。现在我们已经发现了一处爆破点,但这并不是我们的最终目标。
上面的语句已经判断完动画是否有密码,那程序下面会做应该就是取出加密后的密码,并对其解密,再与我们输入的密码对比。我们继续单步步过,现在我们应该注意堆栈窗口的变化,看看能不能发现我们输入的假密码。还有就是要注意Call语句,但不是所以的Call语句都要注意,只需要注意形如Call XX.address(XX代表我们调试的程序)的就行了,这样的代码是用于执行程序内部的一段代码的,因为这很有可能就是算法的入口。
单步步过到00402025处,一直没有在堆栈窗口看到我们输入的假密码,倒是看到了一些莫名其妙的东西,有点像加密过的东西。刚才我们已经知道,我们应该在注意堆栈信息时,还需要注意Call语句。于是我们在00402025处停下,F2下断点,再F7单步步入。这里就是算法了,由于我们的目的不是分析算法,所以这些代码都可以不看,一直F8步过,步过时注意堆栈信息。
在步过的同时,我们看到了许多莫名其妙的字符串,不过我们都可以不用管它,或者我们可以干脆直接步过这个算法。我们出了算法,马上就看见了经典的比较语句,如图。
我们现在不用着急往下走,我们刚从算法出来,难道算法就没有算出什么东西吗?这不,我们抬头一看,就在堆栈信息中发现了“123”。这就是真正的密码了(嘿嘿,我自己设的,我还不知道!)。好了,我们继续往下走。
在步过经典的比较语句的时候,我们在S2处,可以看到我们输入的假密码——“”,因为我没有输入任何东西,所以这里显示就是为空了,如图。
我们在文档中可以查到关于这个比较语句的相关信息。这个语句的功能就是比较我们给它的两个数据,是否相同,然后修改标志位EAX来表示结果。若EAX为1,则表示两个数据不一样;若为0,则表示一样。
这时我们只需要将EAX改为0就行了,但这只是一个权宜之计。我们不可能每次都用OD来修改标志位,所以我们可以将比较语句(这里说的是“TEST EAX,EAX”)中的EAX,改为其他的存储器。我们可以用ESP,它绝对不会为零,因为在这比较语句前有一句“ADD ESP,20”,这是给ESP加上20的意思。或许我们可以将跳转语句中(JE 00402056)的JE改为绝对跳(JMP)。
到此,破解就完成了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课