大致流程如下:

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文件的名称判断是否混淆

图一:

通过ZIP压缩方式打开文件,查看class文件大小判断是否加固

图二:

分别找了同一个apk,已加固和未加固的class.dex对比截图

图三:

class-dex2jar(未加固但已混淆) 截图

图四:

class-dex.jar(已加固)截图

手动判断分析的流程上面已经展示了,下面展示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实现方法相关推荐

  1. android 加固服务器,Python 脚本构建Android APK 自动加固、打渠道包并上传服务器

    Python 脚本构建Android APK 自动加固.打渠道包并上传服务器 常规流程 打出原始apk 使用乐固工具加固并打出响应渠道包 将生成的渠道包上传对应服务器,生成推广链接 因为每一步都需要人 ...

  2. Android APK的加固方法

    有人的地方就有竞争,在Android的发展过程中就伴随着逆向和安固加固的发展.逆向工作者可以通过一些非常好用的软件,如IDA.JEB等,来加快逆向的速度:应用开发工作者也会通过各种手段来阻止逆向工作者 ...

  3. python的列表的remove()方法、判断if xxx in xx条件比较耗时问题

    最近在coding的时候,写的代码中只有一层循环,却很耗时,不明觉厉.不知道是哪里出了问题,于是我就在每一行代码中都打印一下耗时,最终发现了这个罪魁祸首.这里我只说明两个我遇到耗时的场景,当然还有很多 ...

  4. python中判断列表数据类型_浅谈Python数据类型判断及列表脚本操作

    数据类型判断 在python(版本3.0以上)使用变量,并进行值比较时.有时候会出现以下错误: TypeError: unorderable types: NoneType() < int() ...

  5. h5打包成apk,加固后重新签名(使用java的jdk,使用android的sdk)

    温馨提醒:打包时targerSdkVersion设置要大于28,要不然鸿蒙系统拍照后读取不到图片文件 两种方式: 1.使用java的jdk(jdk安装就不做说明了,网上一大堆) cmd进入bin目录下 ...

  6. python判断输入数字大于0,对python 判断数字是否小于0的方法详解

    对python 判断数字是否小于0的方法详解 为了精度更准确 可以使用数字的绝对值 < 1.0e-16  或者 < 1.0e-8来对比 abs(Num) 以上这篇对python 判断数字是 ...

  7. android apk 360加固11016出错解决

    android apk 360加固11016出错解决方案.直接问客服.qq:800178360.沟通后可以解决了.

  8. apk文件反编译d2j-dex2jar.bat/dex2jar.bat遇到的问题

    使用apk反编译软件dex2jar与jdgui时,出现了以下两种情况: I:\Android_decode\APK_decode\dex2jar>dex2jar.bat classes.dexv ...

  9. 混淆概念详细解析:Python中类、对象、方法、函数和属性的区别和理解

    混淆概念详细解析:Python中类.对象.方法.函数和属性的区别和理解 前言 一.类.对象.方法.函数和属性的区别和理解 二.一个类的简单案例和对各种概念的理解 三.总结 欢迎学习交流! 邮箱: z- ...

最新文章

  1. 大数据-07-Spark之流数据
  2. Python 必背的42个常见单词,看看你记住了几个?
  3. 【bitset 技巧 分块】bzoj5087: polycomp
  4. ComboBox联动
  5. redhat6.5手动配置网络
  6. 视差滚动不适合网页的5个原因
  7. SuperSocket框架命令不被识别的一种原因
  8. 手rm-linux联网后自动dhcp,Linux操作系统下DHCP简单设置
  9. Windows移动开发(五)——初始XAML
  10. Java 序列化与主流编解码技术框架介绍
  11. vb连接oracle 工程,VB 连接Oracle数据库
  12. Windows10怎么改分辨率?Win10分辨率设置教程(最新)
  13. Effective+Java+中文版
  14. 腾讯入局“低代码”赛道:无需敲码,快速生成一个完整系统!
  15. 万字带你入门Go语言(建议收藏)
  16. Raspberry Pi 4 with Debian GNU/Linux 11 (bullseye)
  17. 基于TIG的云原生系统监控方案
  18. tf.keras入门系列(一)
  19. Android studio的下载和安装
  20. 2019年8月,微信朋友圈发长文字防止被折叠成一行的方法

热门文章

  1. 常见的前端考试面试题目【vue,react,css,six】
  2. 检样用计算机时间,怎么检查电脑用了多久?
  3. 【计算机视觉】光照及阴影(持续更新中)
  4. 为网页中的图片添加水印的效果
  5. 为何腾讯云在云服务市场败给了阿里云?
  6. 软件测试面试题全网独家没有之一的资深测试工程师面试题集锦
  7. cluster by、group by操作
  8. python画三维(3D)图
  9. Tomb.finance每周更新(11.29-12.5)
  10. 使用Zeppelin时出现sh interpreter not found错误的解决办法(图文详解)