说实话,没得几年的功夫,要破解一款大型的软件,真的很难。也没得什么武功秘籍帮你快速打通任督二脉,如果你真一两周就能搞定,那只能说明你是破解奇才~
破解思路其实都一样,就是分析程序,找到破解点,写相应的破解补丁。其实最难的点便是分析程序,因为你需要去分析字节码(跟汇编类似),了解程序逻辑。可能有的同学会说,我直接用反编译工具,直接就能看到源码,你有这种想法,那也正好证明你根本没有搞过jar包的逆向分析,目前那种牛逼的软件,基本上都会混淆,加各种迷惑代码,基本上都是搞得面目全非,见下图~
说实话,分析起来真的很头疼~
所以,本文我就不教你怎么找破解点了,等以后有时间了在私密的圈子再聊,接下来咱们主要来讲讲如何用IDEA的插件来查看字节码,因为这个步骤的内容相对简单,不复杂。
# 字节码是什么?
说得直白一点,就是JVM执行的固定格式指令。你用java编译后的class文件,便是字节码文件,如下图
它便成就了Java的“一次编译,到处运行”。
如果你想去了解关于Java字节码的更多知识,建议去官网查看:
https://docs.oracle.com/javase/specs/jvms/se7/html/index.html
# 如何查看相应的字节码?
1、javap
其实java给咱们提供了一个查看字节码的工具 javap,见下图
执行如下指令
javap -verbose -p Inst10.class
有的同学可能觉得敲指令,这也太麻烦了,一点也不智能,有没有更好的方法呢?
肯定是有的啊,咱们强大的IDEA插件库里有两款插件可以使用,有所差异,各位同学可以根据自己的需求来把玩~
2、jclasslib bytecode viewer
这是一个可以可视化查看已编译字节码的工具。另外,它还提供一个库,可以让开发人员读写Java类文件和字节码。
开源地址:https://github.com/ingokegel/jclasslib
打开插件中心,搜索“jclasslib”,点击安装即可
使用前需要先编译java文件,再选择 View --> Show Bytecode With jclasslib进行查看,见下图
可以查看基本信息、常量池、接口、属性、函数等~
写破解补丁,咱们主要就看红色框内的字节码,它是写补丁的关键,关于怎么写补丁?这又是一个有趣的话题了~
3、ASM Bytecode Viewer
它是ASM官方开发了一款IDE插件,可以将 Java代码转换成ASM字节码类型代码。这简直就是小白的利器~
开源地址:https://github.com/elitegit/asm-intellij-plugin
打开插件中心,搜索“asm”,点击安装即可
在当前类文件上,右击菜单上选择 Show Bytecode outline
之后,便会出现当前Java代码对应的字节码文件
面板下有三项内容:
-
Bytecode 表示对应的class字节码文件
-
ASMified 表示利用ASM框架生成字节码对应的代码
-
Groovified 对应的是class字节码指令
有了这个工具,你不懂字节码,也能写出漂亮的asm代码~