抓包第一个大问题就是抓包。如果不能捕获所有数据包,则基本上无法进一步开始。但是现在的app,稍有安全意识,就会阻止抓包,Android7.0版本也自带安全级别,不再信任用户安装的证书,只信任系统证书,等等各种类似情况,这样的我们该如何应对呢?具体问题需要具体分析。系统代理检测:charles+VPN(postern、drony、小黄鸟)网卡、vpn检测:网卡、vpn检测脚本(以OkHttpLogger-Frida为例)sslpinning检测:反对关闭sslfridaunsslpinning脚本tcp/udp包:mitmdump,小黄鸟用户证书:使用7.0以下系统安装抓包xposed:justTrustMe插件frida:通过证书检测脚本证书绑定,双向证书r0captureforspdy/quic:frida降级fluttersslpinning:fridapass检测脚本自实现http请求库:用于跟踪,hook输入参数和返回值protobuf/gRPC:https://img.ydisp.cn/news/20221020/3c1zywheejh具体情况有详细处理。据说魔麦也有移动版,所以也有tls检测抓包框架:lamba:https://github.com/rev1si0n/lamdaeCapture:eBPF下的抓包工具,可以抓取HTTPS明文目标位置没有CA证书。抓包后,得到接口和加密参数,如何定位这个加密参数生成呢?1.看请求参数,搜索你想查看的特殊字段(不推荐,但能解决50-60%的app)。2.objection列出所有的类,hookall,然后看关键点调用了哪些类。3、使用dumpsys窗口或者activity查看当前activity(mtmanager也可以记录activity),输入里面找逻辑,如果逻辑代码太多就不适用了。4、观察各个接口的请求参数是否有相同的请求体结构(也就是看这些请求参数的键名)。如果相同,按照开发逻辑概念,肯定有一个通用的模板加密Class,搜索一个加密字段,找到这个加密类,找到用例,或者使用objection跟踪打印调用栈。5、hook通用加密算法,打印调用栈。6.hook网络库okhttp、request等(以OkHttpLogger-Frida库为主导)。7.hookhashmap的put方法,大部分请求参数基本都是用hashmap封装请求体,hookput方法,打印调用栈,可以找到(不是100%通用)8.常用方法如作为hook字符串类方法的getBytes或者转Json的方法。9、hookByte类的toString或转Json的方法等常用方法。10、HookToast类,主流开发习惯,该类用于提示弹窗,hook一下,可以看到调用栈。11.关闭网络,然后启动需要操作的目标接口,读取错误信息,根据错误信息找到调用栈。实际操作中,大部分情况与思路10吻合。12、使用fridahook类android.view.View,点击hook哪里,打印调用栈。13、HookLog类,根据开发逻辑,开发者在开发的某个阶段会使用log打印出log来查看逻辑,hooklog打印调用堆栈,有时候会有奇效。14.有些app会检测返回值的格式,解析输出显示,看是否有通用的解析类,hook它,如果hook不上(或找不到这样的类),使用抓包工具修改返回值,然后看解析逻辑(不常用)。以上方法不能保证通用。比如还有反调试调用栈,这样就不能打印核心调用流程,也不能直接返回空调栈。这必须要处理。GDA、jeb、jadx,一起用,不要只用jadx,有时候jadx分析不好,看不出逻辑。比如某个wtoken,用jeb可以直接看到一些逻辑,但是jadx的那部分是解析不出来的。调试定位到加密参数生成逻辑后,为调试做准备。一般用object来跟踪类,看调用栈,结合源码,写frida脚本调试。如果能hook或者主动调用frida逻辑中的实现,这一步就结束了。目前,到这里,基本都会遇到frida反调试了。Frida不能直接使用。有时切换到lsposed会产生奇迹般的效果。是的,如果您有兴趣,请与我联系。加密协议实现调试好后,感觉可行,再实现加密逻辑。1.确定是什么加密算法(不通用,需要结合实际)。2位,一般md5带[==]一般是base64,如果这个[==]也有[/],那么很有可能用aes/dex/rsa,用base64做二次加密40位加密结果,一般sha请求体都是乱码,看是不是tcp或者protobuf的加密算法,推荐看Q哥的文章。2、判断是否为标准加密算法,给定一个固定的输入参数,将加密结果与标准算法进行比较。3.执行协议。这个需要精力去分析和尝试,但是实在是实现不了,可以用unidbg,不要纠结于手段。风控交锋完成以上步骤后,再请求几次,发现确实能拿到数据,于是很高兴的部署运行起来。结果批量跑了半天,各种异常返回,比如slider,403等等。也随之而来,这个时候可能会遇到风控。什么是风控?以下是一个简单的版本。这不一定是完整或正确的。以后有时间我会单独出一篇专文介绍风控。手机品牌、型号、壁纸、上网模式、wifi名称等上百种设备基本参数gps、陀螺仪root检测app检测(magisk包通用检测)网络/vpn检测、网络状态实时上传行为分析,按钮点击次数,统计分析某页面的界面请求耗时,重复请求次数,请求调用栈顺序分析...结合以上信息传输至服务端,服务端收集并使用AI推断用户画像、行为习惯,确定风险等级,然后给定设备/账号限制。如果级别低,则显示滑块,不返回数据或返回异常,并提示实名认证。比如国外一款社交APP需要人脸认证、身份证、手机号验证。风控之类的东西怎么对抗真的不好说,只能花时间去测试和调整。
