主流安卓APP反作弊及反反作弊的一些思路和经验汇总
作弊检测
基于设备
1.检测是否存在危险APP包名
主要检测hook框架,模拟点击工具,magisk,supersu等root工具
2.检测是否存在危险Class
主要检测hook框架的安卓框架层包
3.检测是否存在root权限
一般通过是否存在bin、sbin目录里的su文件,kingroot权限管理apk
4.检测是否有调试状态
default.prop文件的ro.secure=1、ro.debuggable=1状态,/proc/self/status文件的TracerPid值
5.检测是否设备是否出厂ROM
一般通过android.os.Build的各类参数值来判断,如Build.fingerprint
6.一些设备常规信息,比如电量状态,usb状态,屏幕亮度,地理位置,wifi或者sim卡信息,ip,mac等。
一般批量操作或者抹机操作的时候这些值更改难度和成本比较大,所以这些指标能伪造会大大降低被风控
基于行为
1.Log日志搜集
开发时有Log.i Log.e等运行日志,大部分APP用这个来调试或者检测APP的运行情况,并且release版本一般有个boolean值来开关,如果能hook掉这个开关就容易检测APP。
2.Exception栈信息搜集
大部分APP的日志会搜集Exception,如果栈里有hook框架的包路径就会把自己给杀死,让hook难以长久执行,怕APP变成一个微型服务器抓包工具。
3.统计sdk的信息,如talkingdata、umeng等
一般阿里系的会用umeng来做统计工具,一般这些sdk都有自己的唯一编号,有些app引用这个编号来做一个指标去判断app的安装唯一性,有的会通过统计数据来判断批量作弊行为,因为这些sdk会搜集一些设备指纹并且技术和破解还原难度比较大的。
4.异常上报sdk,比如buggly等
异常上报sdk一般记录运行时所有的异常情况,并且会记录设备指纹,通过这些也能检测到作弊的一些设备。
反反作弊方法及思路
当前主流APP的反作弊策略
1.搜集设备指纹
如数美易盾或者一些大的app都会内嵌搜集设备指纹的模块,通过设备指纹来确定设备的唯一性,如imei、android_id、mac、其他设备信息结合起来就能变成一个唯一的标志。
2.搜集IP、MAC地址、蓝牙MAC、WIFI等网络指纹
大量的搜集后跟其他搜集的信息结合并且不断地完善代理ip和黑ip、mac库,就能不断地能识别作弊源头。
3.地理位置、下载渠道、授权登录
地理位置和ip是否对应、基站信息是否对应、或者设备型号跟下载渠道对应、一般小米手机的软件大部分应该小米商城下载的,比如微信授权登录,QQ授权登录等、如果模拟授权登录需要破解其他给权的APP的一些协议。
4.参数签名、参数加密
一般APP会把get或者post的参数通过某种算法去签名,并且这个签名难还原。比如抖音的x-gorgon,有的把post或者get参数直接加密,一般通过aes、rsa、des等
5.私有网络协议、protobuf等协议、私有网络证书、反代理抓包
目前比较流行protobuf协议替代json,还有一些私有TCP/Socket协议,这些协议不可直接读,需要一个解析工具或者分析还原。私有网络证书需要证书密钥配合代理抓包工具才能抓包分析,这种其实难度在于找到证书密钥和判断是否用了私有证书,一般聊天APP的IM协议常用。还有反代理抓包,比如集成OkHttp框架等的时候用Proxy.NO_Proxy来防止抓包。
6.dex代码混淆,native层ollvm编译、webview的js混淆
其实dex代码混淆还原或者分析难度比较容易,并且各种反编译软件来分析难度不是那么大,主要难度在于rxjava等异步框架,接口实现类查找上。native层的话主要难度是还原基于ollvm的各种混淆的代码,其他还原或者理解难度其实并不大,并且大部分APP把一些加解密和签名等算法用native方式实现并用ollvm混淆,其他的native层的都是一些媒体或者网络等库。webview一般用在验证码上,并且用js的java层接口一起使用,把滑动或者图片顺序识别之类的路径日志通过贾母方式网络提交的,javascript代码一般混淆的比较厉害,不过AST反混淆等方法或者下载后nginx本地搭建并chrome自行调试归纳后通过脚本也能还原,如极验、易盾等验证码插件。
7.APP加壳、安全sdk、私有安全插件
加壳其实纸老虎,安卓里dex文件总能运行内存中dump出来的,除非操作系统从底层设计上更改了,所有hook或者fart等修改的ROM都能搞定。360,腾讯,棒棒等等好多。安全sdk也可以纸老虎这么说,不过安全sdk一般跟机器学习,大数据匹配等相关,越来越有难度去应付,不过一般在社交电商类的反虚拟登录时用,这些SDK搜集指纹设备,并保存到自己的服务器,会识别代理IP,打码平台的卡号,风险设备,不过把加解密算法还原后可以伪造设备和其他数据,能绕过。还有一些大APP有自己开发的安全相关的模块,这些其实跟安全sdk类似,主要还是设备信息伪造和加解密算法破解后都能绕过。数美、易盾等。
反反作弊工具和策略
1.逆向工具
- java:dex2jar,jadx,jeb,android-killer等等很多
- so文件:IDA,jeb,Gidra
- js:其实nodejs加谷歌或者火狐就能搞定
- 其他:unicorn,unidibug等基于qemu虚拟机的工具
2.抓包工具
- Charles、Fillder:这两个其实差不多,用于http、websocket等应用层抓包
- WireShark:各种协议都能支持,需要更深入的网络协议技术基础
- BurpSuite:可以开发一些插件,会开发就各种神操作把。
3.hook框架
- xposed:用户比较多,尤其云控、群控、那些化妆品,教育类、保险等销售类的都在用,市场规模大。
- frida:一般开发者使用的多,快,无需重启,会js就会玩吧。
- cydia:hook Native层的时候多一点,老开发者用的多。
- inlinehook,xhook:这两个类似,inlinehook多用于hook b跳转的,xhook多用于系统函数。
- magisk:安卓8以上xposed或者其他一些证书安装等工具都基于这个,这个其实未来深入研究的东西。
4.模拟点击
- uiautomator :很多模拟点击软件基于这个,跟xposed结合开发比较合适,理解安卓开发的入门比较简单。
5.行业难度
- ollvm混淆:逆向行业目前应该最头疼的就这个吧,主要原理时if-else改成while(true){switch() case:}了,但是逆向成本变高了,并且各种延申的东西越来越多,需要经验和技术积累才能100%还原或破解。
- 机器学习风控策略:这个没有多年经验或者没有相当长的时间去摸索或者没跟班一个APP的成长的话很难对应,并且大部分都是通过养号,养设备等方式去对应,还有的是破解协议,并且伪造大量的设备信息,通过IP代理池,卡商和打码平台等第三方服务来维持。不过随着法律的完善和APP自身的风控体系健全对应成本越来越高,现在很难实现大批量账号登录注册。
结尾
总结的一些经验,有些没写,有些漏了,后期一个个细说。
主流安卓APP反作弊及反反作弊的一些思路和经验汇总相关推荐
- android 反编译 重打包,一键轻松反编译解包+重打包安卓APP 神器~
一提到反编译,对于很多童鞋一定会赶脚很复杂很高大上的酱紫,在安卓平台上,对APK的反编译其实是非常简单的.今天菲菲君要为大家准备一枚APP反编译解包打包神器,真正实现一键自动搞定,新人也能分分钟会用哟 ...
- APP渗透—查脱壳、反编译、重打包签名
APP渗透-查脱壳.反编译.重打包签名 1. 前言 1.1. 其它 2. 安装工具 2.1. 下载jadx工具 2.1.1. 下载链接 2.1.2. 执行文件 2.2. 下载apktool工具 2.2 ...
- Android APP破解利器Frida之反调试对抗
本文讲的是Android APP破解利器Frida之反调试对抗,在我发表了关于Frida的第二个博文后不久,@muellerberndt决定发布另外一个新的OWASP Android 破解APP,我很 ...
- 如何反编译,防止反编译,常见问题总结
本文对如何反编译,防止反编译,和常遇到的问题做了个总结,并略有修改. 资源来自:http://blog.csdn.net/sunboy_2050/article/details/6727581 htt ...
- 常见的反爬措施:UA反爬和Cookie反爬
本文分享自华为云社区<Python爬虫反爬,你应该从这篇博客开启,UA反爬,Cookie 特定参数反爬>,作者:梦想橡皮擦. 通过前面的爬虫程序,你或许已经注意到,对于目标站点来说,爬虫程 ...
- android+反调试+方案,Android反调试笔记
1)代码执行时间检测 通过取系统时间,检测关键代码执行耗时,检测单步调试,类似函数有:time,gettimeofday,clock_gettime. 也可以直接使用汇编指令RDTSC读取,但测试AR ...
- 【反编译系列】反编译so文件(IDA_Pro)
概述 安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发.使用NDK开发能够编译c/c ...
- 超详细!apk安装包快速反编译,多种反编译及失败的解决方案(包含classes.dex的反编译,新增加快速反编译)
如要转载,请贴出原地址:https://blog.csdn.net/Nobody_else_/article/details/83996441 众所周知,我们开发所用的手机App安装包都是apk文件, ...
- unity3D 如何提取游戏资源 (反编译)+代码反编译【P.M.出品】
转自:https://blog.csdn.net/LANGZI7758521/article/details/52291564 首先感谢 雨松MOMO 的一篇帖子 教我们怎么提取 .ipa 中的游戏资 ...
最新文章
- 无线网络会杀死固网? 不可能的事情
- matlab修改矩阵元素,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
- SAP Spartacus产品数据HTTP GET请求前的OPTIONS请求
- java struts2 ajax_在struts2的Action中返回Ajax数据
- 带你自学Python系列(十二):Python函数的用法(二)
- python2048小游戏程序设计大作业_C语言大作业报告——2048小游戏程序
- 基于django快速开发一个网站(一)
- MicrosoftFixit50688 [Windows7事件ID10,WMI错误的解决方法
- 任何性能指标越界或造成 APP 崩溃,优酷通用性能测试一招搞定
- 利用vw做rem适配(纯css)
- js 刷新,返回上一步,前进,后退,
- AI人工智能毕业设计课题:车牌识别,车牌识别系统,车辆识别系统
- blk-mq 进行多重队列
- 微信公众平台接口调试工具json格式不对怎么搞_微信支付、支付宝最全接入指引,看完立刻就可以上手!...
- 用户名xxx不在sudoers文件中,此事将被报告
- 51单片机的UART应用
- sen1.2词典制作
- eclipse/UAP debug模式
- 电子商务中的大数据分析——数据平台和人工智能
- 【5年Android从零复盘系列之二十】Android自定义View(15):Matrix详解(图文)【转载】