一别两宽丶 发表于 2019-7-9 16:07

某恢复软件,超详细追码过程。(教程谈不上,不对之处还望指正)

先查壳吧,帮助很大的。像我这样的小白,OEP未熟记。知道啥语言编写方便对症下药,啊呸是对症下断。

无壳,丢OD直接运行熟悉下软件过程。运行起来点了注册提示“注册码与注册名不匹配”

搜索“注册”。什么都没搜到,应该就是被加密了。

搜不到字符串,既然是VC++的那就下API断点吧,回到反汇编窗口快捷键Ctrl+F9输入“messagBoxA”也可以直接输入个“mess”我们选择“messagBoxA”也可以。中文意思好像是“对话框”“消息框”吧

下好断,返回到程序,再次点击注册。程序被成功断下。接着要回溯,快捷键Alt+F9(执行到用户代码),至于为什么要回溯,这就牵扯系统领空和程序领空了。有机会再说。

回溯后,找可以跳过错误提示call的跳转。

440F25处的jnz,可以跳过“错误提示的call(子程序)”我们要让他实现,所以改成jmp(无条件跳转)。改了jmp测试后也不成功而是提示“退出程序,下次启动时激活”这就说明改好了,还有个重启验证。保存一份改了jmp的程序。在OD载入已修改的程序(jnz改jmp)的那一个。

既然是重启验证,那还要下断点。(重启验证常见的是ini文本和注册表验证)经查找,这款用的是注册表验证。那接着下注册表验证断点。

载入修改的程序,在OD依次点击,插件——》注册表处理函数——》RegOpenKeyA——》确定

下好断点后F9运行程序,程序成功被断下,接着Alt+F9执行到用户代码,然后就是F8单步跟他走,看看玩什么鬼把戏。



一路向下单步,看到43C2B7处的jnz没跳过,且堆栈窗口出现了程序名未注册字样,基本可以判断jnz为验证关键跳转,那么临近jnz的call就是关键call了。


在43C2B0处的call F2下断。重新运行程序,程序断在43C2B0处。接着就是F7单步步入,进去看看能不能找到真的注册码。进call后又出现两个call,(在关键call里面)经分析,4756DC处的call取了假的注册名和注册码,4756E3的jnz开始判断(有注册名和注册码跳转实现,跳过4756E7处的jmp,开始运行4756F7处的call(核心验证)。没有注册名和注册码则跳转不实现,运行4756E7处的jmp跳过4756F7处的call,退出重启验证。)那简单了,我们要进的就是4756F7处的call(F7单步步入)

进call后发现了两个循环,分别运行到循环的位置时,选中下一行代码F4一下,打断他的循环(鬼知道他要循环多久,所以不让他循环,打断他)在经过第二个循环的时候寄存器窗口出现了假的注册码(这时候,就要注意了)


两个循环都打断后,接着单步F7,不出所料出现了疑似真的注册码和假的注册码对比。

那就复制下来吧,尝试注册一下。

关闭软件,重新打开。惊喜还是失落就看着一哆嗦了

成功,追码到此结束。


策士 发表于 2019-7-9 16:29

期待超级硬盘数据恢复软件的追码教程

涛之雨 发表于 2019-7-10 01:20

一别两宽丶 发表于 2019-7-9 19:51
算法?太深奥了,学习中。内存注册补丁应该也够用。不过学到老,活到老
咳咳既然都走到这一步了。
百尺竿头更进一步呢。。。
再说了,内存注册机看起来多low。。。
注册机多装b{:17_1068:}看起来就高大上。。
咳咳虽然过程更痛苦,但是结果肯定也是更开心的。。。
有空可以看看{:17_1088:}

呼啦啦刮风了 发表于 2019-7-9 16:19

感谢楼主分享

f23258 发表于 2019-7-9 16:21

还是相当详细的教程,谢谢分享。

kevin95 发表于 2019-7-9 16:24

破解思路很奇特

disikejj 发表于 2019-7-9 16:28

学习学习{:301_975:}

伴凄凉゛ 发表于 2019-7-9 16:29

mark一下下

mhaitao 发表于 2019-7-9 16:34

我算看明白了吾爱会员这么多主要是大神太多

迷失自我 发表于 2019-7-9 16:40

策士 发表于 2019-7-9 16:29
期待超级硬盘数据恢复软件的追码教程

已经有超级的注册机了

hxp.china.sh 发表于 2019-7-9 16:42

MArk,不错,厉害呀,
页: [1] 2 3 4 5 6 7 8
查看完整版本: 某恢复软件,超详细追码过程。(教程谈不上,不对之处还望指正)