判断apk是否加固或混淆,Python + dex2jar-2.0实现方法
大致流程如下:
1、解压apk的到classes.dex文件
2、编译获得Jar文件:> .\dex2jar-2.0\d2j-dex2jar.bat classes.dex
3、分析生成的 classes-dex2jar.jar 文件,判断apk是否混淆或加固
个人总结判断依据和部分标准:
1、已加固apk,反编译生成后的class-dex2.jar明显小于class.dex文件;jar文件中的class文件明显被隐藏无法被正常查看
2、未加固的apk,发编译生成后的class-dex2.jar大小接近于class.dex文件大小
3、已加固文件判断混淆,由于得到的jar文件过小获得信息量不多,so 默认判断为已混淆状态
4、未加固的apk,得到的jar文件中信息量充足,通过判断文件目录结构与class文件的名称判断是否混淆
图一:
图二:
图三:
图四:
手动判断分析的流程上面已经展示了,下面展示Python实现自动化判断的模块代码如下
Python代码示例:
def getaAPKDEX(self):dexFile = "classes.dex"jarFile = "classes-dex2jar.jar"if (os.path.exists(dexFile)):os.remove(dexFile)if (os.path.exists(jarFile)): os.remove(jarFile)# 读取文件大小mbdexFilefsize = round(os.path.getsize(dexFile) / float(1024), 0)z_file = zipfile.ZipFile(self.fileAPKPath, "r")dex_file_path = z_file.extract(dexFile)z_file.close()cmdCommond = ".\dex2jar-2.0\d2j-dex2jar.bat " + dex_file_pathself.doCMD(cmdCommond)# 读取文件大小mbjarFilefsize = round(os.path.getsize(jarFile) / float(1024), 0)z_file = zipfile.ZipFile(jarFile, "r")# 读取jar文件中的文件夹与文件信息fileNameStr = ""for f in z_file.namelist(): fileNameStr += fz_file.close()if dexFilefsize > jarFilefsize:if "com/qihoo/util/QHDialog.class" in fileNameStr:dex_jiagu = 1dex_hunxiao = 1else:hunxiaoNum = 0hunxiaoFile = ["/a.class", "/1.class", "/b.class", "/2.class", "a/", "/R.class"]for hunxiao in hunxiaoFile:if hunxiao in fileNameStr: hunxiaoNum += 1dex_hunxiao = 1 if hunxiaoNum > 3 else 0dex_jiagu = 0if (os.path.exists(dexFile)):os.remove(dexFile)if (os.path.exists(jarFile)): os.remove(jarFile)return dex_jiagu, dex_hunxiao
判断apk是否加固或混淆,Python + dex2jar-2.0实现方法相关推荐
- android 加固服务器,Python 脚本构建Android APK 自动加固、打渠道包并上传服务器
Python 脚本构建Android APK 自动加固.打渠道包并上传服务器 常规流程 打出原始apk 使用乐固工具加固并打出响应渠道包 将生成的渠道包上传对应服务器,生成推广链接 因为每一步都需要人 ...
- Android APK的加固方法
有人的地方就有竞争,在Android的发展过程中就伴随着逆向和安固加固的发展.逆向工作者可以通过一些非常好用的软件,如IDA.JEB等,来加快逆向的速度:应用开发工作者也会通过各种手段来阻止逆向工作者 ...
- python的列表的remove()方法、判断if xxx in xx条件比较耗时问题
最近在coding的时候,写的代码中只有一层循环,却很耗时,不明觉厉.不知道是哪里出了问题,于是我就在每一行代码中都打印一下耗时,最终发现了这个罪魁祸首.这里我只说明两个我遇到耗时的场景,当然还有很多 ...
- python中判断列表数据类型_浅谈Python数据类型判断及列表脚本操作
数据类型判断 在python(版本3.0以上)使用变量,并进行值比较时.有时候会出现以下错误: TypeError: unorderable types: NoneType() < int() ...
- h5打包成apk,加固后重新签名(使用java的jdk,使用android的sdk)
温馨提醒:打包时targerSdkVersion设置要大于28,要不然鸿蒙系统拍照后读取不到图片文件 两种方式: 1.使用java的jdk(jdk安装就不做说明了,网上一大堆) cmd进入bin目录下 ...
- python判断输入数字大于0,对python 判断数字是否小于0的方法详解
对python 判断数字是否小于0的方法详解 为了精度更准确 可以使用数字的绝对值 < 1.0e-16 或者 < 1.0e-8来对比 abs(Num) 以上这篇对python 判断数字是 ...
- android apk 360加固11016出错解决
android apk 360加固11016出错解决方案.直接问客服.qq:800178360.沟通后可以解决了.
- apk文件反编译d2j-dex2jar.bat/dex2jar.bat遇到的问题
使用apk反编译软件dex2jar与jdgui时,出现了以下两种情况: I:\Android_decode\APK_decode\dex2jar>dex2jar.bat classes.dexv ...
- 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解
混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...
最新文章
- 大数据-07-Spark之流数据
- Python 必背的42个常见单词,看看你记住了几个?
- 【bitset 技巧 分块】bzoj5087: polycomp
- ComboBox联动
- redhat6.5手动配置网络
- 视差滚动不适合网页的5个原因
- SuperSocket框架命令不被识别的一种原因
- 手rm-linux联网后自动dhcp,Linux操作系统下DHCP简单设置
- Windows移动开发(五)——初始XAML
- Java 序列化与主流编解码技术框架介绍
- vb连接oracle 工程,VB 连接Oracle数据库
- Windows10怎么改分辨率?Win10分辨率设置教程(最新)
- Effective+Java+中文版
- 腾讯入局“低代码”赛道:无需敲码,快速生成一个完整系统!
- 万字带你入门Go语言(建议收藏)
- Raspberry Pi 4 with Debian GNU/Linux 11 (bullseye)
- 基于TIG的云原生系统监控方案
- tf.keras入门系列(一)
- Android studio的下载和安装
- 2019年8月,微信朋友圈发长文字防止被折叠成一行的方法