tnt543210 发表于 2018-5-16 12:40

(个人经验)里诺进销存单机版655-记一次破解经历

官网下载的软件,http://www.lenosoft.net 里诺进销存管理软件6.55(单机版)。出于个人爱好破解,过程如下:谨供参考,不成教材。

1、安装原安装包,完成后直接运行,了解软件运行情况,本软件为重启认证模式,可以试用,有记录条数限制。点击注册按钮,弹出注册窗口,此时发现机器码为乱码,输入任意注册码,提示注册码不正确。
2、开工,peid查壳,发现无壳,Borland Delphi 6.0 - 7.0语言编写。

3、载入OD,走起来,首先右键-中文智能搜索,查找“注册码”,发现集中注册验证代码段,双击“注册成功。。。”代码行,进入反汇编窗口查看。

4、很明显找到关键跳,nop掉保存测试,不再提示注册失败,提示注册成功,重启后拥有完整功能,关掉再打开还是来到这个注册窗口,说明破解不成功。

5、打开原程序,输入假注册码,跟踪一下,看有没有明码。
6、点击OD菜单-插件-API断点设置工具-常用断点设置,F9运行程序。

7、奇怪的事情发生了,机器码正常显示了,不再是乱码,这个问题在接下来到最后也没想明白,软件破解完后,单独运行还是乱码,载入OD一切正常,如果有哪位友人指教一二说说为什么,在此多谢。

8、输入1234567890,点击“注册”,在错误窗口弹出前断下,要想查看正确注册码,或者追踪注册码算法,就要往前找,此时,按F4,运行到本段返回行,再按F8返回。因为出错误窗口是系统窗口,是在系统领域,要返回到软件自身程序领域,找程序自身的代码段才行。

9、当反汇编窗口出现“主线程,模块-jxc”的时候,就是回到了程序自身领域,否则要一直F4-F8返回。

10,返回到这一段,就可以往上找,通过在上面某行F2下断点,F8步进,F7步入,发现此软件是通过两个Call分别换算注册码和验证注册码,通过F7步入注册码验证段,F8步进,会在寄存器窗口反复看到我输入的假码“1234567890”和“JXCw-6363268d5-5303”,此时是不是应该高兴一下呢?

11、我们记下真码,回到桌面,常规打开程序,开始注册,却发现真码也不对,仔细一看,机器码还是乱码。再次进入OD,运行的时候却发现一切正常,机器码也不乱了,注册码也对了,不再弹出未注册窗口,进入程序查看关于,也是正常的注册信息。这一点还是没想明白,OD里正常,单独运行不正常。

12、既然是注册信息通不过,要不要试试爆破掉注册窗口,让他提示成功呢,要行动的时候想起来,一开始就已经做过这个事情了,行不通。

13、看来这次不能用正常注册的方式了,只能爆破,下边要爆破的就是程序所有检查未注册志的地方,(个人认为:这种验证方式有注册表、注册文件、机器狗三种,如有不当敬请更正。)软件在一开始就提示,注册窗口只有在未注册的时候才会出现,所以在注册窗口出来前,肯定要有判断的代码段。还要去程序开头摸索一番。

14、重新OD载入程序,停留在程序入口。F8步进,找到未注册窗口CALL行,以及上面的cmp(判断)jnz(选择跳转)组合。此时右键编辑jnz行,换成jmp,不让程序出现未注册窗口。保存后运行,程序直接闪退,说明此一处改动行不通。

15、重新进入OD,再次观察cmp判断的是一个[常量],所谓常量就是程序一旦开始运行就不会再变直接结束退出,
cmp byte ptr ds:,0x1
jnz short 0081BDDD
cmp比较常量等于1时,寄存器Z位置1,此时jnz跳转不成功,弹出未注册窗口,要想cmp不等于1,就要把程序内所有给这个常量赋值的行都改为0x0,按照这个思路,反汇编窗口-cmp行的常量上-右键-查找参考-地址常量,找到所有与本[常量]有关的行,发现只有一个mov byte ptr ds:,0x1,果断双击编辑为0x0,保存为新文件,运行后发现,还是闪退了。此[常量]更改也行不通。

16、再往程序段上面找,此一段上面还有一个cmp-je组合,也是一个常量,按上步的方法,发现这个常量要为0时,可以直接跳过出现未注册窗口这一大段代码,大胆尝试,右键点击常量-查找参考-地址常量,发现有多个mov行,我们把所有mov行的0x1更改为0x0。共有3行。右键-复制到可执行文件-所有修改,右键-保存文件,再次测试。

程序正常进入,没有弹出注册窗口,点开关于,可以看到
注册名居然为:烫烫烫烫烫烫烫烫烫烫
注册码为:JXCw-6363268d5-5303
此时测试帮助文件菜单下的注册,点击注册时还是提示失败,此时软件可以正常使用,为了看起来更像正版,我们把第4步里更改的地方再次nop掉,就直接提示注册成功了,只不过是注册码随便填什么都行。当然不填也能用。
18、完整测试的时候,还有“弹出单据数量已达到了限制,。。。”的提示。因为在改常量的时候看到这句话,找到后,看到一个cmp-jl组合,就是判断常量与0x32(50)比较结果,我们不管他,直接改jl为jmp。
19、上面还有一段“您使用的是试用版,”提示,找到关键句,直接nop掉。最后右键-复制到可执行文件-所有修改-右键-保存文件,测试正常。

20、至此,破解之旅完成。

问题1,机器码是乱码,进入OD反而正常显示,没想明白,咨询客服,客服说不影响注册,只是问我购买了吗?
问题2,第11步时,正常运行填过注册码后,虽然提示错误,但是进入OD运行时是已经成功注册的状态,保存为新文件试试,提示说没有任何修改,退出OD再次运行,还是没有注册。很是想不通,这也算是工程师对程序的包装吗?离开OD就不能用?或者可以通过打补丁的方式注册?

tzd12000 发表于 2018-10-14 23:42

0个CrakeMe程序之006        海天一色001        https://www.52pojie.cn/thread-610580-1-1.html
76        一个非常简单的.net程序的爆破        肥牛        https://www.52pojie.cn/thread-610619-1-1.html
77        对仿《中华人民共和国最高人民检察院》钓鱼APP详细分析 后续分析,基于web--持续更新        mmji        https://www.52pojie.cn/thread-610805-1-1.html
78        开心消消乐lua脚本解密        wmsuper        https://www.52pojie.cn/thread-611248-1-1.html
79        ISCC 2017 Reverse WP+题目        Macc        https://www.52pojie.cn/thread-611256-1-1.html
80        [原创] WannaCry深度详细分析报告(偏重策略)        anhkgg        https://www.52pojie.cn/thread-611500-1-1.html
81        Frida使用和Hook代码整理        藿香正气        https://www.52pojie.cn/thread-611938-1-1.html
82        【汉化教程】--第1课:批量文件目录扫描(需要Notepad++软件)        呱呱生        https://www.52pojie.cn/thread-612179-1-1.html
83        D-RecoveryForExfat破解过程,注册算法追踪        肥牛        https://www.52pojie.cn/thread-612557-1-1.html
84        一款建立家谱的软件注册算法分析(附成品注册机)        pj2020        https://www.52pojie.cn/thread-613305-1-1.html
85        国产流氓软件“火球”全球作恶 受害者众多引起公愤        此生长唸        https://www.52pojie.cn/thread-613568-1-1.html
86        初练160个CrakeMe程序之007

无闻无问 发表于 2018-5-17 20:32

本帖最后由 无闻无问 于 2018-5-18 15:09 编辑

我的简要分析:此时软件注册时,将机器码与注册码放入注册表中,启动程序时0065A8B8地址处和点击注册按钮时007C45EE地址处都会调用注册验证call(jxc.0065A520)验证。如果爆破,需将两处调用call返回后下方的跳转nop(0065A8CB和007C460E)。还有就是处理真码假码比较call中跳转,即call jxc.00404F50中关键跳00404F59|. /0F84 8F000000 je jxc.00404FEE为jmp,此比较 call jxc.00404F50有上百次调用验证…处理了这三处,即可完美爆破…

无闻无问 发表于 2018-5-17 20:49

注册码貌似关键只有8个,268d5前4和最后4个,其它的好像是固定的…JXCw-xxxx268d5-xxxx,没有深入跟踪,大家可跟踪下。

无闻无问 发表于 2018-5-18 14:32

本帖最后由 无闻无问 于 2018-5-20 19:28 编辑

机器码在虚拟机中运行正常在实系统中运行异常,是因为虚拟机是xp,如果是win7以上系统,需要用管理员身份运行……因为所谓的机器无非是获取硬盘编号等然后经过处理变成机器码……它没有权限自然获取不到,而获取不到,即使注册码正确,也是不会成功的……这个程序没有加壳,字符串也没加密,还能在内存中找到注册码……算法也不是很难……练练手真得不错……

Aeneid 发表于 2018-5-18 16:58

感谢分享

dtzhb 发表于 2018-5-18 19:35

这个找到真码就可以破解了。软件应该是重启验证的,读取的是注册表信息,只是当你输入假码时,已经写入注册表。找到真码再次注册时不会更新原有假码。所以只需删除注册表再注册,或者直接修改注册表就完美破解了。

tnt543210 发表于 2018-5-19 12:18

dtzhb 发表于 2018-5-18 19:35
这个找到真码就可以破解了。软件应该是重启验证的,读取的是注册表信息,只是当你输入假码时,已经写入注册 ...

修改注册表在OD里老是断不起来,指教指教

tnt543210 发表于 2018-5-19 12:20

无闻无问 发表于 2018-5-17 20:32
我的简要分析:此时软件注册时,将机器码与注册码放入注册表中,启动 ...

怎么知道注册码放在这个注册表值里的,我老是断不到访问注册表。指教一下

tnt543210 发表于 2018-5-19 12:21

无闻无问 发表于 2018-5-17 20:49
注册码貌似关键只有8个,268d5前4和最后4个,其它的好像是固定的…JXCw-xxxx268d5-xxxx,没有深入跟踪,大 ...

汇编基础差,追 码头都大,跟踪不出来。。。

无闻无问 发表于 2018-5-19 13:36

可以透露给你:注册表操作就在某个call下…而算法也比较简单,关键就是你要找对位置。它无外乎是提取机器码中某几位的16进制ascii,然后逆序,分两组,一组加—和268d5之间,另一组放最后,就是上面中xxxxxxxxx上。不能说破了,自己跟踪分析出来,才能有成就感…呵呵呵呵呵
页: [1] 2 3
查看完整版本: (个人经验)里诺进销存单机版655-记一次破解经历