网站首页 > 开源技术 正文
简介
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系统是识别不到修改后的这个字段值
参考
[1] Dex简单保护 :
https://xz.aliyun.com/t/5789
[2] DexShell:https://github.com/Herrrb/DexShell
[3] dexshellerInMemory:https://github.com/yongyecc/dexshellerInMemory
- 上一篇: Android关于Gradle构建流程,简单易懂,收获满满
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-09-09 Android关于Gradle构建流程,简单易懂,收获满满
- 2025-09-09 monkey大全!可直接运用在项目中的常规monkey命令
- 2025-09-09 Android的基本世界观——系统简介,组件逻辑及其他
- 2025-09-09 运行Android应用的“艺术”_android应用程序结构有哪些
- 2025-09-09 视频:Win10手机开发移植安卓应用有多方便
- 2025-09-09 浅谈xaingce apk样本分析_安卓样本分析
- 2025-09-09 7款优秀的App安全测试工具_安全测试工具appscan
- 2025-09-09 34.如何获取app(apk和ipa)中的资源
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)