检测APK是否混淆

目录

  • 为什么要检测APK是否混淆
    • 混淆的优点
    • 混淆的缺点
    • APK的混淆的分类
  • 检测工具
  • 检测
    • 人工检测
    • 自动化检测

为什么要检测APK是否混淆

apk代码混淆就是为了保护代码安全,防止被反编译拿到源码做审计找出危险漏洞,现在大部分的APK都会做混淆。

下面分析混淆APK后的优缺点。

混淆的优点

  • 防止被恶意破解逆向分析
  • 代码可阅读性降低
  • 减少apk体积(也是瘦身的方法)

混淆的缺点

  • 调试不方便(可以配置mapping变得方便)
  • 测试不充分,可能导致部分功能不能使用(比如注解相关等)

APK的混淆的分类

  • 代码混淆
  • 资源混淆

检测工具

反编译的工具众多,编译出的源码效果也不太相同,使用自己熟悉的就好;

  • Jadx-gui-0.8.0.exe(下载地址:https://github.com/skylot/jadx)
  • smali2java(下载地址:http://www.hensence.com/cn/smali2java/#Overview)
  • Android逆向助手2.2 (下载地址:http://www.funytao.com/?p=430)
  • dex2jar
  • apktool

如果你有有更好的工具推荐 请在评论里分享一下 :)

检测

人工检测

  1. 检测代码是否混淆
    使用工具打开APK,查看反编译后的代码如果类名、方法名大部分都为A、B、C字母,那就说明混淆了,反之就说明未混淆。

代码混淆前:
1552062-20190228172141556-91729321.png

代码混淆后:
1552062-20190228172134688-1093714342.png

  1. 检测资源是否混淆
    资源混淆是可以解决apk瘦身,主要就是压缩了资源文件及修改了文件名字及映射关系。

资源混淆前:
1552062-20190228172106098-1904449743.png

资源混淆后:
1552062-20190228172113896-518126875.png

  1. 有开发源码可以看是否加混淆proguard

    有如上两个步骤,基本上不需要代码审计了,不过你有代码的话,可以看看;

在build.gradle文件中是否配置混淆规则:

buildTypes {debug {//加载默认混淆配置文件proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'...}release {// 如果没有提供混淆规则文件,则设置默认的混淆规则文件(SDK/tools/proguard/proguard-android.txt)pseudoLocalesEnabled true...}}

自动化检测

使用程序检测的话,应该检测什么特征呢?

1.下载apktool工具

2.运行apktool.bat d xxx.apk,把apk反编译成smali

3.如果想要进一步查看源码,可下载smali2java

4.使用smali文件的文件名进行分析,如果存在1个或1个以上的资源类的smali文件,就可以证明该apk没有被混淆过。如下图所示
1552062-20190709195133066-867129506.png

程序遍历 smali文件夹,只有存在1个或1个以上R$~就判定为未混淆。

备注:是apk的核心代码下的资源文件在混淆后不应该出现上述文件,反之则说明该apk没有进行混淆;使用方案一也是要进入核心代码

转载于:https://www.cnblogs.com/mysticbinary/articles/10446019.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于asp.net的Web开发架构探索(转)

问题由来 最近在研究适合团队开发的web架构解决方案,该架构即要适合分工协作又要有一定扩展性,适合不同的数据库需要,因此我查阅了一些资料,初步构想出了一套架构,请各位多多指教。 探索 web开发架构最经典莫过于三层架…

ubuntu要更新18.04了,lei了lei了~~~

Ubuntu 18.04 LTS将于2018年4月26日发布。开发商现在有六个月的时间来打造“Bionic Beaver 仿生海狸”。 对于那些你不知道Ubuntu 4 (xx.04)版本遵循27周的时间表(而不是10月发行的25周时间表,由于圣诞节和新年的小事情&#xff0…

SkipList 以及高度的确定

转载:https://www.cnblogs.com/lnlvinso/p/8848883.html 结果:skiplist的高度是个随机值。 SkipList理解 记下自己对跳表SkipList的理解。 SkipList采用空间换时间的思想,通过增加数据间的链接,达到加快查找速度的目的。 数据库L…

20个正则表达式,举一反三,相信对你很有用

转载:https://www.cnblogs.com/wxd0108/p/5580772.html 正则表达式经常被用于字段或任意字符串的校验,如下面这段校验基本日期格式的JavaScript代码: var reg /^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})$/; var r fieldValue.match(reg); if(rnull)a…

约瑟夫环问题---循环单链表

约瑟夫环问题是比较经典的问题,原来做的题目是依次输出数字,而原来的循环链表结构不改变,今天遇到一道题是要求按照顺序重新组成一个循环单链表。 题目:一些人围坐一圈报数,形成一个循环单链表,当报数是m或…

IIS AppCreate子目录的错误(0x80020006)

这几天做了升级用的安装包,需要在原来的ASP 的虚拟目录下,再创建一个新的ASPNet 虚拟目录。上网查了C# iis设定的资料,按照上面一路做下来,还是无法成功过。 代码只有两行,如下:DirectoryEntry siteVDir new Director…

网络通信TCP协议三次握手

刚刚看linux公社看见里面一个讲TCP的文章,文章讲的很有意思生动形象,很有助于对TCP协议的理解和掌握,所以转载过来方便以后看一下HAHA~~~TCP是什么? TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 …

聊聊RocksDB Compact

导语 对于 LevelCompact 策略,RocksDB会根据每一层不同的策略计算出CompactScore,根据CompactScore大小来决定那一层将会优先进行Compact,然后选择Level-N 和Level-(N1)的文件进行Compact。如何计算CompactScore? 如何…

Android入门逆引手册 - 12 评分条(RatingBar)的使用

这里介绍评分条android.widget.RatingBar类的使用。 ● 评分(星)的最大数的设置,调用setNumStars()方法。● 现在的评分的设置,调用setRating()方法。 例程源码(Java)[java]RatingBar ratingBar (RatingBar)findViewById(id.rati…

数据库事务的四大特性以及事务的隔离级别

本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别。 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务包含…

程序员面试的一些注意点

一、前言 自己即将踏上求职的征程,所以整理一篇有关于程序员面试的小窍门,帮助自己和正在求职、即将求职的一些小伙伴跳过一些坑。 二、简历制作1. 不要放头像普通人大概率都不是帅哥美女,所以不想让外观成为评判标准的就不要放照片上去了。2…

如何解决数据倾斜问题?

转载:https://blog.csdn.net/Mr_HHH/article/details/89399518 今天在工作中遇到了数据倾斜的问题,一条SQL执行了8小时才执行完,看计划是先join再做distinct,卡在了join上,数据量比较大,并且重复数据比较多…

白盒测试不是测试,更不高级

测试不仅仅是软件概念,但白盒测试仅仅是软件概念。 上面这句话足以说明白盒测试不是测试,至少不等同于测试。 认为白盒测试更牛逼的一个常用论据是白盒测试需要对代码本身更高的熟悉程度,但说这样的话的人往往没有搞清楚测试究竟需要什么样的…

剑指Offer题解(Python版)

https://blog.csdn.net/tinkle181129/article/details/79326023# 二叉树的镜像 链表中环的入口结点 删除链表中重复的结点 从尾到头打印链表 斐波那契数列 跳台阶 变态跳台阶 矩形覆盖 把字符串转换成整数 平衡二叉树 和为S的连续正数序列 左…

Paypal 在线支付接口应用从零开始,第2节,[支付API原理及流程]

今天看看Paypal支付流程和简单的认证原理,我画了一张图.应该能表达这两点意思了我们的站点名字,为了好理解,暂且就定为西狐的网站吧.点此查看清晰原图恩,理论知识很重要哈,先把这图理解了,下一步我们编程使用沙盒测试就很简单了.如果想更多研究一下还可直接查看Paypal官方提供的…

C语言指针深度理解

指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大…

PLSQL DEVELOPER 使用技巧

为什么80%的码农都做不了架构师?>>> 1、右键菜单 在PL/SQL Developer(下面简称PLD)中的每一个文本编辑窗口,如SQL Window,Command Window和Porgram Window,右键点击某个对象名称,会…

为什么不能同时用const和static修饰成员函数?

const修饰的函数: 表示在该函数体内不能修改成员的值,会在函数中添加一个隐式的参数const this*. static修饰的函数没有this指针,与const的用法冲突。 但可以使用static和const修饰成员。 例子如下: class Singleton { public: stati…

对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。

typedef struct TNode { int data; TNode* left; TNode* right; TNode* next; }; //时间复杂度为O(n)&#xff0c;空间复杂度为O(n) void addNext(TNode* root) { if (!root) { return; } queue<TNode*> q; q.push(root); while (!q.empty()) { int levelL…

T-SQL DML学习笔记

1. select 语句的基本结构是 select -->From-->where group By Having Order By 2. Exists 条件 Exists 后面括号内的条件语句如果为真的话 这此次查询继续 &#xff0c;如Exists跟的条件语句没有查询到数据则前面语句块的查询不再执行下去 select province…