最近有个朋友说有个java弄的软件是从朋友处拿来的,由于进行了网卡地址绑定,不修改网卡地址无法使用,叫我看看有无办法破解,之前都很少玩这些东西,本着帮忙的心态,尝试了下,便有了一下的笔记内容。
1、使用jd-gui进行反编译,找到核心校验代码,将该b.class文件单独从jar包中抽离出来,由于该jar包编译打包时采用加密混淆,是无法直接使用的,而且代码非常难读懂,也只能将就着看了;
2、将包含b.class的jar包通过winrar解压工具直接打开,根据包名路径找到b.class然后直接删掉里面的b.class;
3、用eclipse建立一个java工程,将处理过的jar包加到项目的引用路径中,再根据b.class所在的包建立一个相同的包,再在包里面建一个b.java文件,将jd-gui反编译后的代码贴进去,然后根据提示修改,如果运气好的话很快修改完,并且编译通过,而且可以使用。我是属于运气不好的,碰到不能使用的。就有了下面的步骤;
4、如果运气好的话编译通过,能正常使用的情况,在将jar包用winrar打开,找到b.class所在的包,将编译修改后的class文件压缩进去,放到项目中即可运行了;
5、运气不好,跑起来居然报错,说缺少方法,网上搜了下说jad反编译是不完整的,有bug,没法子,只能自己去看java的字节码了,
6、将分离后的b.class放在“d:\decode\” 文件夹中,然后调用cmd窗口,先切换到“d:\decode\”目录,
然后输入命令:javap b.class > d:\decode\b1.java,javap将会根据b.class生成b的所有方法属性,包括公有,私有的(主要用于对比缺少的方法);
再输入命令:javap -verbose b.class > d:\decode\b2.java,javap将会根据b.class生成对应的java字节码,先通过b1.java找出jd-gui反编译后缺少的方法,
然后根据b2.java中找到对应的方法,然后看里面的JVM是怎么跑的,将方法还原即可。
至此结束。。。。。
附上java字节码的一些解释:
http://blog.csdn.net/ygc87/article/details/12953421
http://blog.163.com/lihui_2000/blog/static/665969402012194530772/
http://tieba.baidu.com/p/1947057129