本帖最后由 ajm3 于 2016-8-7 20:29 编辑
楼主发现jar在某些领域用到还是挺多的
比如,网页版的程序可以把授权放入jar文件里,这样的话 就算别人能看到html代码也破解不了,大多数人都想不到关键点在jar里面
楼主就遇到了几个,搞定了,分享一下思路给大家,就不点名是什么软件了
一个网页版的erp打开需要注册的,经过楼主各种分析,发现关键点在jar里面
方法
1.用rar解压jar,同时用jd-gui打开jar【目的是可以看到C#代码,但是不能修改】
2.用JavaByte.exe打开解压后的*.class文件修改
具体思路
jd-gui打开jar看到的是C#代码,所有好分析,如图红色框内
对应的汇编码在JavaByte里面,修改方法右键,和re有点像,也不全像,比如要增加新的string需要在Constant Pool里面右键增加【UTF8】编码8,再右键增加ldc对应刚刚的编码8,然后在Methods里面选择刚刚增加的ldc,不能直接在代码里面写string,这是个技巧。
[Asm] 纯文本查看 复制代码 String strMsg = new String(bos.toByteArray());
String dogId = "";
String function = "";
int usernum = 0;
if ((strMsg != null) && (strMsg.contains("userCode:"))) {
for (String str : strMsg.split(";")) {
if (str.contains("userCode")) {
dogId = str.substring(9, str.length());
}
if (str.contains("usernum")) {
usernum = Integer.parseInt(str.substring(8, str.length()));
}
if (str.contains("function")) {
function = str.substring(9, str.length());
}
if (str.contains("pcserial")) {
String pcserial = str.substring(9, str.length());
String pcserial2 = "";
File file = new File(destPath + "/bin/CallHardDll.dll");
if (file.exists())
pcserial2 = CallHardAPI.readHard();
else {
pcserial2 = SoftWareUtils.getPCSerial();
}
if (!pcserial.equals(pcserial2)) {
BaseEnv.log.error("该软加密文件不能在这台电脑上使用");
return false;
}
SystemState.instance.dogId = dogId;
SystemState.instance.userNum = usernum;
SystemState.instance.function = function;
}
}
关键点分析
[Asm] 纯文本查看 复制代码
if (!pcserial.equals(pcserial2)) { //!pcserial.equals(pcserial2) 把前面!去掉就达到某种破解效果了
BaseEnv.log.error("该软加密文件不能在这台电脑上使用");
return false;//或者把这里修改为true
在JavaByte.exe找到上面需要修改的地方修改上面关键点对应如下图
上图是楼主修改过的,原来是ifne00001C4 ,意思是不等则飞到000001C4【会提示注册】,改ne为eq就是相等才跳,这样的话,就算授权码是其他任意电脑的,都可以用了具体修改方法,右键选
改好后把class文件拖入jar包对应的目录
再用jd-gui打开看,!pcserial.equals(pcserial2)前面的!是不是不见啦,说明修改成功啦
忘记说, 需要java和jdk环境下才能编译
完整界面如图
修改好后点右键save ,然后把*.class压缩替换回jar就好啦,比安卓简单多了不需要签名。就是JavaByte.exe的代码比较难看懂,估计没有基础的人不行。
能想到的就这些啦,有人遇到么,jar文件,java语。需要做个详细视频教程么。
我相信如果有人遇到的话,看了我的思路肯定会有所帮助,至少不会连用什么工具都不知道
|