apk dex java_GitHub - yanchunlei/apksheller: apk一键加固工具(JAVA层加密DEX,防反编译)

这是一个介绍如何使用apksheller工具进行JAVA层DEX加固的教程,通过将原DEX加密并附加到壳DEX尾部,然后替换原APK中的DEX,修改AndroidManifest.xml以实现从壳DEX启动,从而提高APK的安全性,防止反编译。
摘要由CSDN通过智能技术生成

简介

Java层DEX一键加固脚本

使用说明

python -f xxx.apk

加固原理

准备一个壳DEX文件(源码位置:shellApplicationSourceCode),将原APK的DEX文件加密保存到壳DEX尾部,然后将原APK文件中的原DEX文件替换为壳DEX,并修改原APK文件里AndroidManifest.xml的applicationandroid:name字段,实现从壳DEX启动。

解密和加载原DEX的任务交给壳DEX,这样就实现了APK文件防编译保护

一键加固脚本实现步骤

准备原DEX加密算法以及隐藏位置(壳DEX尾部)

"""

1. 第一步:确定加密算法

"""

inKey = 0xFF

print("[*] 确定加密解密算法,异或: {}".format(str(inKey)))

生成壳DEX。(壳Application动态加载原application中需要原application的name字段)

"""

2. 第二步:准备好壳App

"""

# 反编译原apk

decompAPK(fp)

# print("[*] 反编译原的apk文件{}完成".format(fp))

# 获取Applicaiton name并保存到壳App源码中

stSrcDexAppName = getAppName(fp)

# print("[*] 获取原apk文件的Application Android:name=\"{}\" 完成".format(stSrcDexAppName))

save_appName(stSrcDexAppName)

# print("[*] 保存原apk文件的Application Android:name=\"{}\" 到壳App源码的配置文件完成".format(stSrcDexAppName))

# 编译出壳DEX

compileShellDex()

print("[*] 壳App的class字节码文件编译为:shell.dex完成")

修改原APK文件中的AndroidManifest.xml文件的applicationandroid:name字段,实现从壳application启动

"""

3. 第三步:修改原apk AndroidManifest.xml文件中的Application name字段为壳的Application name字段

"""

# 替换壳Applicaiton name到原apk的AndroidManifest.xml内

replaceTag(fp, "cn.yongye.stub.StubApp")

print("[*] 原apk文件AndroidManifest.xml中application的name字段替换为壳application name字段完成")

加密原DEX到壳DEX尾部并将壳DEX替换到原APK中

"""

4. 替换原apk中的DEX文件为壳DEX

"""

replaceSDexToShellDex(os.path.join(stCurrentPt, "result.apk"))

print("[*] 壳DEX替换原apk包内的DEX文件完成")

自动签名

"""

5. apk签名

"""

signApk(os.path.join(stCurrentPt, "result.apk"), os.path.join(stCurrentPt, "demo.keystore"))

print("[*] 签名完成,生成apk文件: {}".format(os.path.join(stCurrentPt, "result.apk")))

问题

【1】libpng error: Not a PNG file:apktool.jar编译smali项目时,如果出现png结尾的GIF文件时,会编译失败,这里我的解决方法时将GIF强行转换成PNG,解决问题。

中途解决该问题时,曾尝试使用AXMLEditor修改二进制Androidmanifest.xml的开源工具直接修改,然后想绕过编译资源步骤,实际不能成功,因为更改过后的application name字段在编译资源过程中,会被记录下来,而直接修改导致没有被记录,android系统是识别不到修改后的这个字段值

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值