一个无壳程序的注册破解问题
本帖最后由 maclvern 于 2021-6-28 15:48 编辑首先介绍下程序的大致组成:
db是数据所在文件,可执行文件相当于阅读器,然后受限前几十页可读,注册后才可全部
注册窗口如图所示,初步判断注册码是通过机器码计算得出的数字,估计注册码是16位
2021.06.28最新进展:通过大家的指导,知道了关键CALL的段首,对应找到了堆栈中在EAX内存储的真码,现在我正在学习:1.怎么找到这个关键CALL;2.本程序是通过什么算法依据机器码计算出注册码的3.如何在知道关键验证语句后回溯来查出本语句的前面的语句是哪些。
目前(6.28以前)的情况是找到的messageboxa都不是注册弹框相关的,而且通过中文搜索找到“注册成功”和“注册失败”相关的两处都是与注册码没关联的单纯的是给弹出的对话框输出文字内容的(因为我试过将“注册失败这句NOP后弹窗中就没有内容了”),目前瓶颈就在找关键节点找不到的各种尝试无果状态中……
此图中就是相关注册弹窗的搜索结果,下两图为相应转到程序中的语句
————————————————————————————————————————————
以下是原文内容
在破解开头就遇到了滑铁卢,能找到相关对话框的弹出字段,分别为失败和成功,但是找不到messagebox这个字段
如下图所示
首先说软件无壳很简单,没基础建议重头学起,
可以注册一下,堆栈中有真码
本帖最后由 maclvern 于 2021-6-28 16:28 编辑
abao991 发表于 2021-6-28 11:53
第一个问题,如果采用的是同样的验证方式,可以用特征码内存补丁(具体可以自己百度),这个是通用的。
...
这个程序里面有十几处跳验证,这难度算是很大的了吧
那不是有文字啊大哥~~~~ 你还没有理解messagebox是什么东西 od载入,运行,输入注册码,别点击注册
插件,API断点设置,messagebox打勾
返回软件点击注册
od已经已经在这个注册信息框出现前断点了
暂停的地方回溯,就是这个信息框call 新手,大家请见谅,确实一直不理解这些函数,就像我虽然知道这个程序是borland c 但我还是找不到这个对话框的断点。我按照API如图设置后,出现了多个断点位置,但位置模块不是这个程序而是我系统中的文件
遇到调试过程中模块出现了多个系统中的模块,并且关键的断点都在系统模块而不是程序模块的情况怎么办呢?是因为我找错了关键字段吗? maclvern 发表于 2021-6-20 13:52
新手,大家请见谅,确实一直不理解这些函数,就像我虽然知道这个程序是borland c 但我还是找不到这个对话 ...
首先,你搜索字符串可以看到注册成功的字样,那么在注册成功的附近,通常就会有一个跳转,改变跳转的条件,使他不跳转,这样就可以达到逆向的目的,其次,如果找不到字符串,也应多学习灵活变通来达到想要的目的 本帖最后由 maclvern 于 2021-6-20 21:21 编辑
罗萨 发表于 2021-6-20 21:13
首先,你搜索字符串可以看到注册成功的字样,那么在注册成功的附近,通常就会有一个跳转,改变跳转的条件 ...
你说的这个是我开始用的办法,但是都没成功,才转而找messagebox,来看看是不是我哪里操作不对。我在注册成功和注册失败两条逆着找都可能找的不对估计,因为语句不是每次都一致,并且很多次上一步就是程序的入口,也就是OD打开的所处位置。不知道为什么会这样 maclvern 发表于 2021-6-20 13:52
新手,大家请见谅,确实一直不理解这些函数,就像我虽然知道这个程序是borland c 但我还是找不到这个对话 ...
bp会直接断在API函数内部(系统领空),bpx对程序调用API的地方下断(程序领空)
如果你想断在程序调用信息框的地方,这样写:bpx MessageBoxA 而不是 bp MessageboxA
如果使用bp MessageboxA,需要F9运行程序,断下来后按Alt+F9返回程序领空或者F8单步回程序领空,回到程序领空的上一行代码就是程序调用信息框的地方。
这些东西应该在各类视频破解的基础教程里都有讲到,加油。 abao991 发表于 2021-6-21 16:00
bp会直接断在API函数内部(系统领空),bpx对程序调用API的地方下断(程序领空)
如果你想断在程序调用 ...
好的,看来我还是这块没搞清楚尤其是下断和回溯。多谢指导 我感觉这个程序和我原先想的不一样,好像它这个注册码校验与弹窗提示没有直接联系,通过新手教程的有些方式找到弹窗节点但是没法实现注册通过