Java层APK一键加固工具:实现防反编译保护

需积分: 50 8 下载量 29 浏览量 更新于2024-11-18 1 收藏 95KB ZIP 举报
资源摘要信息:"Java层反编译源码保护工具-apksheller是一套用于Android应用加固的工具集,其主要功能是在JAVA层对APK文件中的DEX文件进行加密处理,以此来防止反编译,从而保护源码不被轻易获取。本工具使用Python脚本作为操作接口,通过指定的命令行参数来完成加固操作。apksheller工具的工作原理是准备一个壳DEX文件,将原APK的DEX文件加密后存放到壳DEX文件的尾部,替换掉原APK中的DEX文件,并修改APK的AndroidManifest.xml中的application android:name字段以指向壳DEX,实现从壳DEX启动应用程序。解密和加载原始DEX的任务完全由壳DEX负责,达到防反编译的保护效果。本文档提供了对apksheller工具的简介、使用说明、加固原理以及一键加固脚本的实现步骤。" 一、Java层反编译源码保护 Java层反编译源码保护是指在应用程序的Java层面对代码进行加密处理,以此来防止逆向工程人员通过反编译手段获取到应用程序的原始源码。在Android开发中,DEX(Dalvik Executable)文件包含了应用的编译后的Java字节码,是APK的核心组成部分。通过加密DEX文件,可以有效提高应用的安全性,防止源码泄露。 二、apksheller工具介绍 apksheller是一个一键加固工具,它的主要功能是通过一个预定义的壳程序(壳DEX文件),对APK中的DEX文件进行加密和替换,从而达到加固效果。加固后的APK在运行时,会先加载壳DEX,然后壳DEX负责解密和加载原始的DEX文件,最终启动应用程序。这个过程对用户是透明的,应用的使用和加载速度不会受到影响。 三、使用说明 apksheller工具通过Python脚本进行操作,用户需要准备一个壳DEX文件和原APK文件。通过指定的命令行参数执行加固操作,这些参数包括: -f xxx.apk:指定要加固的APK文件。 加固原理涉及到几个关键步骤,包括确定加密算法、准备壳DEX、替换原DEX文件和修改AndroidManifest.xml文件。 四、加固原理 加固原理的关键步骤包括: 1. 确定加密算法:选择一个加密算法对原DEX文件进行加密,例如使用异或(XOR)操作。示例中的inKey为0xFF,这意味着加密时使用0xFF作为密钥进行异或操作。 2. 准备壳App:生成壳DEX文件,这个壳文件将包含启动原应用所需的代码,并能够加载解密后的DEX文件。 3. 反编译原APK:通过脚本对原APK进行反编译,获取原始DEX文件。 4. 替换和修改:将加密后的DEX文件替换到壳DEX文件尾部,并修改原APK的AndroidManifest.xml文件,更改application的android:name字段以指向壳DEX。 五、一键加固脚本实现步骤 1. 第一步:确定加密算法,比如上述示例中的inKey,这是一个固定值,用于加密和解密过程。 2. 第二步:准备好壳App,这个壳App会动态加载原始的应用程序,并负责解密过程。 3. 第三步:反编译原APK,获取到原始的DEX文件。 4. 第四步:将加密后的DEX文件嵌入到壳DEX中,并对原APK进行修改,使其指向壳DEX。 六、系统开源 apksheller作为一个开源工具,其源代码可被社区开发者访问并进行改进,这有利于工具的不断完善和扩展。开源的特性也意味着用户可以自主检查加固脚本的安全性和可靠性,根据自己的需求进行定制化操作。 七、压缩包子文件的文件名称列表 由于提供的信息有限,未能详细列出压缩包子文件的文件名称列表,但是根据文件名“apksheller-master”可以推测,这是一个主版本或核心版本的压缩包文件,包含了apksheller工具的所有相关文件和脚本,用户可以通过解压这个文件来获取使用apksheller所需的资源和文件。
1635 浏览量
众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。 Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作用了,但是现在到底有没有好的办法呢? 市场上现有的几款防止反编译工具其实都是改进了加载过程。但是加载到JAVA虚拟机后一样可以得到CLASS字节码的。 只要懂JAVA原理的人其实很用意破解的. JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass 也得不到可以用来反编译字节码。 真正意义上保护了JAVA知识产权。 个人版限制编译30个CLASS文件,文件打包方式下载。
1954 浏览量
众所周知,Java编译后的Jar包和Class文件,可以轻而易举的使用反编译工具(如JD-GUI)进行反编译,拿到源码。为了保护自己发布的Jar包和Class文件,采用的方式大多是混淆方式,这种方式对于Class文件的加密是不彻底的,还是能够通过分析得出核心算法。本工具是采用jvmti方式对Class文件进行加密,使用C++生成加密和解密库,先用加密库对Jar包进行加密,将加密后的Jar包及解密库文件发布出去,执行时候需要JVM引入解密库文件,解密后执行。c++的.dll文件和.so文件的破解难度是很大的,这就能有效的保护软件和代码的知识产权. 使用方法: 1.打开windows命令行(运行=>cmd=>回车),在命令行中 进入 EncryptJar目录 2.执行 java -jar encrypt.jar 3.输入h,然后回车,可以看到帮助菜单 4.输入3,然后按回车键,进入加入jar文件功能 5.输入要加密的jar文件的路径 6.提示输入秘钥(key)的时候,直接回车,不要输入任何字符(否则后面classhook将不可解密加密后的jar包) 7.输入目标路径(加密后的jar文件路径,此处要注意:jar文件名要保持相同,将加密后的文件保存到不同的目录) 8.将加密后的jar包,替换原来的没有加密的jar包,与要发布的程序一起进行发布.(一般替换lib目录下对应的jar包即可) 9.加密后的jar包运行方法: windows下: 拷贝libClassHook.dll文件到程序的根目录(通常为要执行的jar程序的根目录) 使用以下命令启动程序: java -agentlib:libClassHook -jar xxxxxxxxxxx.jar 则在运行过程中会自动进行解密操作(解密过程是运行过程中用c++的dll进行解密的,可以有效防止破解class文件) 如果执行过程报错,可将程序根目录添加到环境变量path中去 Linux下: 拷贝libClassHook.so到程序的根目录(通常为要执行的jar程序的根目录) 使用以下命令启动程序: java -agentlib:ClassHook -jar xxxxxxxxxxx.jar (这里要删除掉lib,linux系统下会自动补全) 则在运行过程中会自动进行解密操作(解密过程是运行过程中用c++的dll进行解密的,可以有效防止破解class文件) 如果执行过程报错,可以在程序根目录下执行以下语句:export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH 或将libClassHook.so 拷贝到/usr/lib目录中去。 支持操作系统:加密请在windows64位系统并安装了64位jdk环境下进行。 需要解密运行的程序支持LINUX(64位)和windows(64位)安装了JDK1.8以上的系统。 测试程序: (t_lib目录下的jar包为经过加密的jar包) java -agentlib:libClassHook -jar test.jar