android黑科技系列——Android中新型安全防护策略
一、前言
最近有一个同学,发给我一个设备流量访问检测工具,但是奇怪的是,他从GP上下载下来之后安装就没有数据了,而在GP上直接安装就可以。二次打包也会有问题。所以这里就可以判断这个app应该是有签名校验了,当然还有其他的校验逻辑,我们打开这个app界面如下,没有任何数据:
二、应用分析
下面就来简单分析这个app,不多说直接使用Jadx工具打开:
我们在使用的过程中会发现需要授权VPN权限,所以就断定这个app利用了系统的VPNService功能开发的,直接在xml中找到入口,然后进入查看配置代码:
继续跟踪查看内部逻辑:
在Worker类中,看到有一些核心的Native方法,开发过VPNService都知道,拦截数据等操作一般都会放到native去做,主要原因是性能会高点。不多说直接使用IDA打开libwebd.so文件,直接搜索NativeInit函数,为什么搜索这个函数呢?因为一看这个是初始化操作,而没有数据的话那些校验判断只会在这里,所以直接看这个函数实现:
继续往下看,他到底做了哪些验证,这里主要包括了三处验证,具体如下:
第一处验证:验证安装渠道是否为GP,这里利用了系统的getInstallerPackageName方法来做判断,这个方法在很早的Android版本就有了,但是这个方法有很大使用问题,后面会介绍。因为GP安装器包名是:com.android.vending,这里直接判断如果安装器不是GP就不进行拦包操作了。
第二处验证:应用签名校验,这个已经是最普遍的校验方法了,这里不多解释了,直接使用kstools工具进行爆破即可破解签名校验。
第三处验证:这个主要验证xml中的android:debuggable=”true”这个属性值,我们之前如果想调试这个app的话,一般都会手动反编译改这个属性为true的。但是我们现在不需要调试,也没必要进行修改。这个验证对于我们来说没什么影响。
看到上面的三处验证,其实对于我们现在掌握的技术来说,都不难,特别是签名校验,完全可以使用kstools工具来搞定,一键化操作,不了解kstools工具的同学可以看这篇文章:Android中自动爆破签名校验工具kstools;这里同学自己使用工具操作一下即可过了这个验证。而第三处验证可以说没什么影响,不用管它。主要来看第一处验证。有的同学说破解也简单,直接修改CBZ指令即可。但是这个就缺失了一些技巧,我们要的不是结果,而是学习的过程。接下来看看我是怎么破解这个校验的。又要多介绍一些知识点了。
三、破解方案
破解这个安装渠道大致有两个方案,一个是利用kstools工具源码修改一下,拦截getInstallerPackageName方法,然后修改返回值即可,如下:
直接返回这个包名的的安装器就是GP的,这样在打包就可以给多人使用了。这个不多介绍了,感兴趣的同学去下载源码自己操作实践一下即可:https://github.com/fourbrother/kstools
还有一种超级简单的方式,直接使用命令 pm install -i[指定安装器包名] apk文件,这个命令应该又很少人知道,但是这个简单的一个命令就可以在这里很方便的破解,可以指定一个app的安装器。
我们安装之后,可以在系统的 /data/system/packages.xml 中查看应用对应的安装器名称:
而这里又说道一个知识,就是系统的这个packages.xml文件,他就是设备安装成功的应用的一些详细信息,包括使用到的权限,签名信息,安装渠道,各种标志等。之前有人问怎么获取设备中的应用安装渠道来源,其实可以从这个文件中获取到。从这里看到这个应用现在的确是从GP上安装的了,也说明了上面的那个pm命令的确有效。
这时候我们再看看应用的拦截是否有效果了:
看到了,这里开始拦截设备的数据包了,从这里看这款app的确很有用,对于我们开发来说,也算是一个很好的工具了,破解之后可以珍藏使用了。
对于第一种方式破解是最好的,因为那样可以给多个人使用,而对于第二种命令指定安装器的安装方式,一般小白用户肯定不知道。对于第一种方式破解只需要修改kstools源码即可。
四、总结
好了到这里我们就破解成功了,可以愉快的使用这个app了,但是从上面来看了解到了新的防护策略就是判断应用是否来自于指定应用市场。有的同学可能立马想到了,为了防止二次打包,可以在应用中判断是否来自于主流的应用市场渠道,如果不是就不走正确的逻辑了,这个也算是一个防护策略了,不过可惜的是这个想法是不可行的,如果可行就有很多app早这么干了。原因是因为这个系统方法:getInstallerPackageName,大家可以自己测试这个方法,会发现:如果一个app是系统应用,那么这个返回值可能是设备自带的应用市场。如果一个app是第三方应用,从GP上安装,这个值一定是com.android.vending;而如果是其他渠道,比如国内的应用包,手机助手,豌豆荚等。就有可能是null值,而是用pm这样的命令,或者系统自带的安装器安装的第三方应用也有可能是null值,也就是说:这个系统api返回的应用安装器名称极不稳定,完全就是不靠谱的方法,至少在国内没法使用的。所以几乎可以忽略这个方法的。但是为何这个app敢这么干呢?其实我也很好奇。不过有一点可以说明就是这个app开发商就认定了此app只在GP上发布,其他渠道都不发布,这样只认定GP上下载的app才算是合法的。比如一个国外用户,用了华为手机使用非GP渠道下载了这个app,那么可惜这个人也是不能使用的。我也很好奇这个app的开发商为何要这么做?反正国内的app应该都不会这么做的。因为这个方法的返回值极不稳定。
但是不能说这个方法不靠谱,我们在后面的逆向就要忽略这个防护,后面我们在破解app依然遵从不变法则:全局搜索signature字符串来判断是否有签名校验,全局搜索getInstallerPackageName方法是否有安全渠道验证。不管是在IDA还是Jadx中搜索,都是如此。
android黑科技系列——Android中新型安全防护策略的更多相关文章
- android黑科技系列——爆破一款应用的签名验证问题
一.前言 在之前的文章中说过Android中的安全和破解是相辅相成的,为了防止被破解,很多应用做了一些防护策略,但是防护策略也是分等级,一般简单的策略就是混淆代码和签名校验,而对于签名校验很多应用都是 ...
- android黑科技系列——修改锁屏密码和恶意锁机样本原理分析
一.Android中加密算法 上一篇文章已经介绍了Android中系统锁屏密码算法原理,这里在来总结说一下: 第一种:输入密码算法 将输入的明文密码+设备的salt值,然后操作MD5和SHA1之后在转 ...
- android黑科技系列——微信抢红包插件原理解析和开发实现
一.前言 自从几年前微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导 ...
- android黑科技系列——Apk的加固(加壳)原理解析和实现
一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk, ...
- android黑科技系列——实现静态的默认安装和卸载应用
一.访问隐藏的API方式进行静态的默认安装和卸载 1.系统安装程序 android自带了一个安装程序—/system/app/PackageInstaller.apk.大多数情况下,我们手机上安装应用 ...
- android黑科技系列——破解游戏之修改金币数
我们在玩游戏的时候总是会遇到一些东东需要进行购买的,但是我们可能又舍不得花钱,那么我们该怎么办呢?那就是用游戏外挂吧!我们这里说的是Android中的游戏,在网上搜索一下移动端游戏外挂,可能会找到一款 ...
- android黑科技系列——分析某直播App的协议加密原理以及调用加密方法进行协议参数构造
一.前言 随着直播技术火爆之后,各家都出了直播app,早期直播app的各种请求协议的参数信息都没有做任何加密措施,但是慢慢的有人开始利用这个后门开始弄刷粉关注工具,可以让一个新生的小花旦分分钟变成网红 ...
- android黑科技系列——手机端破解神器MT的内购VIP功能破解教程
一.前言 在破解app的时候,我们现在几乎都是在PC端进行操作,但是之前bin神的MT管理器,可以在手机端直接破解,不过也有很大的局限性,但是对于一些简单的app破解没问题的.这个工具其实原理也很简单 ...
- android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)
一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...
随机推荐
- SOUI界面库 添加 windows系统文件图标皮肤
最近在学习soui界面库.其中有用到SListCtrl这个控件来现在文件信息.控件用法基本上和mfc 的CListCtrl差不多.也支持图标显示.但是图标是要自己加入图标图片的.这个就有点不好弄.于是 ...
- 21.使用rescoring机制优化近似匹配搜索性能
一.match和phrase match(proximity match)区别 1.match:只要简单的匹配到了一个term,就会将term对应的doc作为 结果返回. 2.phrase ...
- python爬虫14 | 就这么说吧,如果你不懂python多线程和线程池,那就去河边摸鱼!
你知道吗? 在我的心里 你是多么的重要 就像 恩 请允许我来一段 freestyle 你们准备好了妹油 你看 这个碗 它又大又圆 就像 这条面 它又长又宽 你们 在这里 看文章 觉得 很开心 就像 我 ...
- 【Codeforces 466C】Number of Ways
[链接] 我是链接,点我呀:) [题意] 让你把数组分成3个连续的部分 每个部分的和要一样 问你有多少种分法 [题解] 先处理出来num[i] 表示i..n这里面有多少个j 满足aft[j] = af ...
- Android音乐、视频类APP常用控件:DraggablePanel(1)
Android音乐.视频类APP常用控件:DraggablePanel(1) Android的音乐视频类APP开发中,常涉及到用户拖曳视频.音乐播放器产生一定交互响应的设计需求,最典型的以You ...
- mysql参数设置与查看
查看默认的参数设置(包含读取到的参数文件中的设置) mysqld --verbose --help 查看默认的参数设置(不包含参数文件中的设置) mysqld --no-defaults --ve ...
- [Usaco2014 Mar]Sabotage
[Usaco2014 Mar]Sabotage 题目 Farmer John"s arch-nemesis, Farmer Paul, has decided to sabotage Far ...
- PHP中Session和Cookie 快速了解与使用
SessionPHP的$_SESSION可以存储当前用户数据信息,用户访问WEB网站的时候,PHP会给每个访问的用户创建一个session ID,该ID是唯一ID,保存在客户机上,而用户的会话数据是保 ...
- angular的又一本好书
MANNING出的<ANGULAR.JS IN ACTION>. 比上本看完的书<ANGULAR ESSENTIAL>多了一些有全局性的东东. 八个关键概念:MODULE,CO ...
- hdu_1005_Number Sequence_201310222120
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...