-
-
SI ObjectBrowser 逆向分析
-
发表于:
2025-5-16 10:03
2158
-
SI ObjectBrowser是一款使用delphi编写的oracle操作工具,首次接触这个工具是2007年,从日本客户手中拿到的,不得不说,性能是真的强,就连后面oracle官方出的工具都不行。
这款软件是日本一家公司开发的,曾经也有过中文版,里面广告满天飞。后来查了一下,12以后再没有官方中文版了,主要是oracle本身只适合银行等大型企业,占有率已经明显不如mysql和postgres了。前两天突然想试试去破解它的注册逻辑,可能是日本盗版没有那么严重吧,软件几乎没有对注册做任何防护。
本文中提到的内容仅用于对汇编、逆向、注册算法的学习,不提供任何注册破解工具。
本文以OB11为例,IDA对于delphi2007的函数解析更精准。
首先,按照惯例,查壳,

无壳,delphi2006/2007编写。
打开IDA,由于整个程序只有一个exe,逻辑全在一个文件里,IDA加载要一段时间。
加载完搜索Tfrm,这个是delphi的界面事件前缀。

登录按钮事件对应的是TfrmRegist_actCommitExecute
查看IDA代码,F5转为C代码
代码内容比较多,sub_52D3BC是检查界面输入是否为空,sub_7179AC为弹窗,可以理解为MessageBox,其它接口下面具体分析。
分析上面代码逻辑:
1、检测当前登录用户是否是管理员,如果不是则报错。
2、检查ProductNo、ProductKey是否为空,为空则报错
3、检查License認証Key是否为空,为空时调用sub_7242FC,如果返回1则报错。sub_7242FC的逻辑会在后面说明
4、调用sub_7245F8,返回0则报错,逻辑在后面会详细说明
5、调用sub_722884获取硬件信息,后面详细说明
6、调用sub_72307C校验license
7、注册信息写入注册表
接下来,我们看一下sub_7245F8的逻辑
具体逻辑如下:
1、ProductKey需要以OB-开头。
2、调用sub_7242A8,判断OB-后面的第4-6位是否是数字,是数字则为旧版本,新旧版本拼接字符串不同,我们以新版本为例,拼接字符串即为"OB11-del2009ent" + ProductNo + "usj"
3、拼接后的字符串间隔8位做异或运算,结果保存在2-1位。并加算每一位的和,结果保留最低1字节,C代码如下
计算结果的低5字节转为16进制字符串。
4、取Key第4-9字节,调用sub_722230进行计算,sub_722230的逻辑转为C代码如下
计算结果转为16进制字符串。
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2025-5-16 10:04
被阿捏利编辑
,原因: