Java破解与加密——开篇

Java破解与加密——开篇

mikasa 219 2021-12-23

背景

近年来由于工作和个人爱好的原因,对Java的加密和破解有一点点研究,随着年龄的增长和跟随技术前沿的脚步需要接触和学习的东西也越来越多,为了避免日后忘记一些细节,决定将其记录下来,其实写这篇文章时我个人还是有一些纠结,决定要不要写,毕竟教会徒弟饿死师傅啊。目前互联网上对于Java字节码加密已经有一些开源的项目,相关的项目请自行搜索。

常见的加密方式:

  • 加密源文件
  • 抽空方法体,将方法体加密存到其他文件中,运行时填充(此方式可以适应Spring等框架的注解扫描)

常见的解密途径:

  • 自定义ClassLoader解密
  • Agent解密

常见的解密方式:

  • Java算法解密
  • 动态链接库解密

从以上不难看出,不同组合的加解密强度也不同,但不外乎一点,由于Java的特殊性,在类加载时总会被解密,在百度/谷歌上搜索相关关键词(Java破解/agent dump class)等,可以搜素出一些破解的资料,但这些资料较为零散,对之前未曾接触过Java破解的同学也不友好,该系列本着学习的角度,将会对Java破解有一个完整的讲解。

同时本系列还会对Java的加密也有一番自己的见解,但无论无何只是提高了破解门槛,对于逆向老手来说,Java的逆向就是很容易!

个人对Java保护更倾向于使用混淆技术,利用asm等框架对打包好的class/jar进行混淆,修改类、方法、字段名称修改为无意义字符甚至修改为关键字,对代码中的字符串进行加密,增加逆向难度,市面上已经有很多java混淆器能够对java起到保护作用,这点就不展开聊了。

搞过逆向破解的人应该都清楚,要想破解肯定不是漫无目的的,一般是根据软件提示的字符串,进行一个搜索,查看字符串附近的代码,找到谁调用输出提示的代码,然后就能找到验证的地方,对验证的地方进行patch,以达到破解的目的,而对字符串加密可以很有效的防止对字符串的一个搜索。

这只是本系列的一个开篇,我会先后完成Java破解系列和Java加密系列。


# Java加密与破解