Myeclipse2022注册码逆向分析实录

查看 135|回复 10
作者:denglintao   
Myeclipse2022注册码逆向分析实录
前言:之前为了注册52破解论坛的账号,写了一篇tongweb7容器破解的文章,结果给通报了,文章给移动了,管理员觉得怕我的小心脏受伤,还将该篇文章给了一个”精华”。随着在52破解网玩了一段时间后,发现好像精华的文章还是比较少的,忽然感觉自己被认可了,这个精华给足了我满满的虚荣心。随后我开始观察什么样的文章可以拿精华,总结发现,只有分析软件许可,最后破解的文章比较容易得精华。
随后我就一直在思考要写一篇破解什么的比较好,思考过后,我记得N久前好像安装过一个Myeclipse2022,但是启动后,许可过期了,马上2022就结束了,希望管理员能够给个精华,再次满足我小小的虚荣心!
声明:
本人对此次逆向分析只是为了分析学习软件安全是如何防范的,知道如何逆向分析软件,我们才知道如何更好的防范他人逆向破解。本文仅研究分析myeclipse的许可安全激活算法,不提供传播注册激活码生成相关脚本,包括使得他人能注册破解myeclipse的相关程序,其实文中关系到完全破解myeclipse的关键操作都已删减,
[color=]希望所有同学都支持正版。
开始正题。
启动Myecipse提示已经过期53天了


image.png (216.07 KB, 下载次数: 0)
下载附件
2022-12-27 18:32 上传

接下来,我们开始找到这个校验逻辑的程序代码,可以使用jvm参数 -verbose开启日志
修改myeclipse.ini文件,新增class加载日志(目的是用于定位lic许可相关的class在哪个jar),将javaw修改为java是有个控制台,方便看见日志输出


image.png (135.76 KB, 下载次数: 0)
下载附件
2022-12-27 18:32 上传

重新启动myeclipse随便输入一个许可号


image.png (150.66 KB, 下载次数: 0)
下载附件
2022-12-27 18:33 上传

查看class加载日志,简单的搜索下lic字符,观察分析


image.png (524.03 KB, 下载次数: 0)
下载附件
2022-12-27 18:33 上传

在看一张大图,可以看见许可的弹框Dialog相关类


image.png (597.61 KB, 下载次数: 0)
下载附件
2022-12-27 18:34 上传

我们就去找这几个jar都拿出来反编译分析下(主要是这下也不知道许可相关代码在什么位置,先拿出来分析下)D:/ProgramFiles/Myeclipse/configuration/org.eclipse.osgi/35/0/.cp/libs/genuitec-gson-2.8.5.jar/D:/ProgramFiles/Myeclipse/plugins/org.eclipse.jdt.ui_3.25.0.v20211115-1252.jar/D:/ProgramFiles/Myeclipse/plugins/com.genuitec.eclipse.core_16.0.0.202203221716.jarD:/Program Files/Myeclipse/plugins/com.genuitec.eclipse.ui.common.platform_13.0.0.202203221713.jar 使用eclipse(我的eclipse有自带反编译插件JAD之类的)新建一个工程,用于破解myeclipse测试,静态分析相关代码,写测试用例


image.png (120.52 KB, 下载次数: 0)
下载附件
2022-12-27 18:34 上传

查看com.genuitec.eclipse.core_16.0.0.202203221716.jar这个jar就发现如下图所示,有混淆的代码(那些A.class之类的),还有公钥,非对称加密算法工具类RSA,看来许可控制相关程序就在整个包下了,有了这些我们就可以逆向分析注册算法了


image.png (309.69 KB, 下载次数: 0)
下载附件
2022-12-27 18:35 上传

反编译一份代码


image.png (223.61 KB, 下载次数: 0)
下载附件
2022-12-27 18:35 上传

根据弹框信息关键字搜索
[color=]Invalid license, please double check your ID and code


image.png (150.66 KB, 下载次数: 0)
下载附件
2022-12-27 18:35 上传

搜索得到了一个许可验证正确与否的方法如下图:
com.genuitec.eclipse.core.ui.wizard. UpdateLicenseDialog. Validate()


image.png (293.18 KB, 下载次数: 0)
下载附件
2022-12-27 18:36 上传

破解的关键其实就是下断点,如在OD中调试我们都喜欢在不同的win都是弹框函数下断点,然后出栈找到调用的方法,然后就是CMP、JE、JMP等关键比较的地方进行分析,如果补丁就是等于暴力破解该程序。总的静态分析代码只能做到缩小分析范围,方便调试时候下断点,接下来,这里先反编译class代码(原本代码给混淆了,肯定是不能正确编译的),且修正java代码达到可以编译打包进行补丁原本的程序。在修正java代码需要耐心,这里还是需要一些时间的,可以使用多个反编译工具逆向的结果进行对比结合,然后修正(比较耗时,要耐心)修补后如下图所示:


image.png (236.46 KB, 下载次数: 0)
下载附件
2022-12-27 18:37 上传

其实我们只需要修正几个需要调试的class即可,然后用于替换原本jar包中的class文件,然后替换到myeclipse中开启动态调试,再次输入ID与注册码


image.png (177.18 KB, 下载次数: 0)
下载附件
2022-12-27 18:38 上传

发现我们动态调试可以查看到输入的信息了,当K是false代表s与s2都是我们输入的ID与激活码,true的时候就是公钥私钥认证机器指纹的那条线,我们开始分析


image.png (341.05 KB, 下载次数: 0)
下载附件
2022-12-27 18:38 上传

这时候感觉我们已经成功一半的感觉了,只要可以动态调试说明接下来就可以暴力破解,或者分析激活算法编写注册机了,但是会发现,几秒钟过后,
myeclipse会自动关闭退出了,猜测可能是myeclipse有反调试的程序,或者是因为我们修改替换了class,myeclipse有相关完整性验证签名的机制,检测到有修改了class代码,然后就直接退出了。


image.png (212.51 KB, 下载次数: 0)
下载附件
2022-12-27 18:40 上传

手写一个findClass,使用javaAgent技术用来替换verbose检索class加载,将日志输出到文件检索日志中也有体现


image.png (339.96 KB, 下载次数: 0)
下载附件
2022-12-27 18:40 上传

接下来就是如何去除完整性校验,直接全局搜索找关键字,将所有jar解压,好多文件


image.png (224.63 KB, 下载次数: 0)
下载附件
2022-12-27 18:42 上传

利用搜索工具全局搜索class文件,properties文件、xml文件,所有文件夹都不放过,搜索” This product did not pass the MyEclipse integrity check” 好庞大的检索当然我们运气不错,搜索结果如下:


image.png (134.42 KB, 下载次数: 0)
下载附件
2022-12-27 18:42 上传

分析重点开始查看这几个类com.genuitec.eclipse.meexplorer_13.0.0.202203221713\com\genuitec\eclipse\meexplorer\filter\MEFileNameFilter$2.classcom.genuitec.eclipse.server.core_13.0.0.me202203171613\com\genuitec\eclipse\server\core\ServerLaunchClasspathProvider$2.classcom.genuitec.eclipse.ui.common_13.0.0.202202011855\com\genuitec\eclipse\core\ui\preference\MECPListContentProvider.class确定了,就是这个几个类,如下图(这里就只贴一张吧),


image.png (267.2 KB, 下载次数: 0)
下载附件
2022-12-27 18:43 上传

接下来就是利用暴力破解的那套,你CMP,我JMP,”我不管你如何比较判断,反正我强制跳转”,Java还是比汇编指令舒服的,起码指令可以随意添加,要是汇编,可能指令过长,还得另外寻找一个空的代码段用于编写补丁程序,跳过去补丁程序,然后补丁程序在跳回来。(我可能破解太激动了,走到隔壁win程序破解了,偏了,我的错,我们继续回到主线)修改好相关的类,然后补丁修改到相应的jar包,然后又可以重启myeclipse了


image.png (187.18 KB, 下载次数: 0)
下载附件
2022-12-27 18:43 上传

三个jar补丁后,我以为已经去除完整性校验了, 结果还是没完全去除,可能是没有检索完全


image.png (443.34 KB, 下载次数: 0)
下载附件
2022-12-27 18:44 上传

接下来的几个代码完整性校验的逻辑就不贴了(因为涉及是否能破解,且大致完整性校验的逻辑都是一样的)
在这里可以给myeclipse公司的开发一些建议,可以将这些字符串使用加密形式存储到某个常量里面,那么在源程序中使用字符串检索就无效了,这样可以加大破解的难度,提高了破解的门槛。
同上去除完整性代码操作,补丁后,再次启动myeclipse,正常了,没有完整性校验错误提示了,这下我们可以随心所欲的动态调试分析算法了。


image.png (480.2 KB, 下载次数: 0)
下载附件
2022-12-27 18:46 上传

到这里一波三折,感觉myeclipse破解这差点把人弄劝退,不过好在坚持了,也成功了。这里题外分享以下:如果仅仅只是为了分析算法,动态调试,其实还有一种办法是可以不去除完整性.也可以让myeclipse是不会退出的,在控制台窗口,myeclipse刚好启动完毕后,鼠标点击它(win11等于阻塞该线程),那么myeclipse是不会退出的。当然我们是奔着精品贴,所以必须去除完整性校验了,否则就没意思了。再次输入激活码如下图所示:


image.png (133.08 KB, 下载次数: 0)
下载附件
2022-12-27 18:48 上传

开始动态跟踪调试,发现一个关键的算法


image.png (119.83 KB, 下载次数: 0)
下载附件
2022-12-27 18:48 上传

很遗憾,第一次跑到异常里去了,按照提示,可能是位数太少了


image.png (250.69 KB, 下载次数: 0)
下载附件
2022-12-27 18:48 上传

那这次我们加大A的值长度


image.png (257.74 KB, 下载次数: 0)
下载附件
2022-12-27 18:49 上传

结果还是不行


image.png (236.81 KB, 下载次数: 0)
下载附件
2022-12-27 18:49 上传

看来也不能太长了,因为下面代码21字节后面的要转换为int,且这个分支不能进入,我们要让他相等


image.png (206.9 KB, 下载次数: 0)
下载附件
2022-12-27 18:49 上传

到这里我们主要要分析方法如下,两个加密解密算法A()可以理解位一个亦或,明文进去变成密文,密文进去变成明文


image.png (197.79 KB, 下载次数: 0)
下载附件
2022-12-27 18:49 上传



image.png (81.56 KB, 下载次数: 0)
下载附件
2022-12-27 18:50 上传

我们手写一个测试用例(其实就是注册机,我们会一直完善该类知道生成合法的注册码),找出ID和code的关系,自动生成


image.png (176.64 KB, 下载次数: 0)
下载附件
2022-12-27 18:50 上传

进入调试,发现我们随便写的ID是不符合规程的,但是不影响我们继续分析


image.png (236.04 KB, 下载次数: 0)
下载附件
2022-12-27 18:51 上传

7-13位应该是个数字类型的,第1位的字符应该是Y或者T,我们继续生成ID与code继续调试如下:


image.png (196.7 KB, 下载次数: 0)
下载附件
2022-12-27 18:51 上传

到这里,ID还要修改


image.png (112.49 KB, 下载次数: 0)
下载附件
2022-12-27 18:51 上传

反正以上都是不断的补ID的规则一直尝试(一位一位的调试补充),直到我看见这串代码,我感觉应该是一个合法的ID,那么我就拷贝一个且生成code后


image.png (227.15 KB, 下载次数: 0)
下载附件
2022-12-27 18:52 上传

再次输入验证,忽然发现这是一个过期的,但是是一个合法的ID


image.png (321.7 KB, 下载次数: 0)
下载附件
2022-12-27 18:52 上传

简单的分析了下这个注册码格式后,14到20位应该表示的是注册码过期时间,重新生成后(是不是有丝丝的小激动了,感觉我要成功了),再次注册如下图所示:


image.png (356.58 KB, 下载次数: 0)
下载附件
2022-12-27 18:52 上传

接下来就是破解激活码了


image.png (146.07 KB, 下载次数: 0)
下载附件
2022-12-27 18:53 上传

相同方法找到激活码校验的方法,如下所示


image.png (213.55 KB, 下载次数: 0)
下载附件
2022-12-27 18:54 上传

这个方法是系统解析用户输入的激活码信息                  -RSA公钥解密激活码串,等会我们需要重新生成公私密钥对,用于加密(明文激活码)         -解析机器指纹         -解析用户code         -许可有效期


image.png (207.59 KB, 下载次数: 0)
下载附件
2022-12-27 18:54 上传

读取公钥文件


image.png (129.94 KB, 下载次数: 0)
下载附件
2022-12-27 18:55 上传

下图红色框推出激活码里面的code的位置


image.png (88.85 KB, 下载次数: 0)
下载附件
2022-12-27 18:55 上传

这里可以看出系统id的长高度和组合规则,一个共是19位


image.png (158.6 KB, 下载次数: 0)
下载附件
2022-12-27 18:55 上传

我们可以做一个假的先进行调试,用于跟踪我们输入的信息与程序获取的系统信息比较,当debug到下图方法时候,我们知道了程序获取当前系统的指纹信息是create();返回的SystemId,该方法可以用来编写注册机使用


image.png (121.58 KB, 下载次数: 0)
下载附件
2022-12-27 18:56 上传

到这里我们就开始编写注册机了脚本了,原本的RSAUtil可以直接使用,生成公钥和私钥(工程左侧的红框俩个文件)


image.png (174.24 KB, 下载次数: 0)
下载附件
2022-12-27 18:56 上传

机器指纹的算法,参考
SystemIdFactory.create(),主要逻辑如下:


image.png (50.18 KB, 下载次数: 0)
下载附件
2022-12-27 18:57 上传

下图的脚本运行生成了一个注册码激活码(完整的注册激活码生成算法的细节就不展示了)


image.png (131.01 KB, 下载次数: 0)
下载附件
2022-12-27 18:58 上传

再次验证,这次的ID和code我们修改位了2099年12月31日


image.png (203.28 KB, 下载次数: 0)
下载附件
2022-12-27 19:00 上传

点击激活后,有三种验证方式,我们脚本都编写好了


image.png (261.9 KB, 下载次数: 0)
下载附件
2022-12-27 19:00 上传

输入激活码


image.png (176.53 KB, 下载次数: 0)
下载附件
2022-12-27 19:00 上传

最后看看成果,成功了


image.png (190.41 KB, 下载次数: 0)
下载附件
2022-12-27 19:00 上传

另外URL自己访问的形式注册的,可以看出注册的http服务请求url如下


image.png (216.62 KB, 下载次数: 0)
下载附件
2022-12-27 19:01 上传

我们也编写的注册脚本可以大家http服务用于其他机器安装myeclipse时候可以计算出激活码,我这里就是简单的截取url的参数生成激活码


image.png (89.64 KB, 下载次数: 0)
下载附件
2022-12-27 19:02 上传

下载次数, 下载附件

denglintao
OP
  


denglintao 发表于 2022-12-28 12:20
大佬费心了,这帖子的文本编辑器不太熟悉,所以从word复制过来后,就发生变形了,最后几张图可能是在中 ...

编辑贴子后点附件那,你之前上传的地方进行编辑,我不太敢给你删除,你图片名字居然都一样,我分不清怕删错了。。。
sanshenghepan   

大佬费心了,这帖子的文本编辑器不太熟悉,所以从word复制过来后,就发生变形了,最后几张图可能是在中间的,可能错版了,我这边点击编辑文章后,好像图片会消失了,如果可以的话,您在帮忙下,最后三张图 就保留代码的那张吧,另外两张就删除了。
wkx1975   

文章我给你编辑了一下,图片文字换行了一下,去掉了不合适发的内容,最后面好像有3张图没贴入正文中,看看是不是哪漏了?
smallmin   

这是大佬啊
baiyujianyi   

真的是看不懂
78zhanghao87   

虽然很久不用myeclipse了,但也看得津津有味
shay520   

java破解的思路相当赞
jjghaa1234   

虽然现在基本不用这玩意了,但还是挺牛逼的呀
78zhanghao87   

Java的破解方法和Win程序破解方法不一样,思路是值得学习的。大佬写得很全,学到了。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部