移动安全分析流程

声明


以下只是搬运下我公众号的东西。很早就发过了。原帖地址:

移动安全逆向分析流程

已经发公众号的为什么还发csdn
有的圈内朋友,不经过我的允许,删减摘录我公众号的内容,这里就不提谁了,心里清楚,还能获得一些关注和流量。很无语,所以我还不如自己也发发。【猛男落泪】

前言

前面整理了一套技能树1.0版,这次整理下逆向思路,我们拿到一个app,常规的分析流程
 

抓包

第一大问题就是抓包,如果包都抓不到,那基本就没法进一步入手了

而现在的app,稍微有点安全意识的,都会防抓包,并且安卓7.0版本开始也自带了安全等级,不再信任用户安装的证书,只信任系统证书,以及种种类似的情况,这种我们怎么处理呢?就得具体问题具体分析了

1.系统代理检测:charles+VPN(postern、drony、小黄鸟)2.网卡、检测:过网卡、检测脚本(以OkHttpLogger-Frida为例)3.sslpinning检测:  objection 关闭ssl  frida unsslpinning脚本4.tcp/udp包:mitmdump、小黄鸟5.用户证书:  使用7.0以下的系统安装抓包  xposed:justTrustMe插件  frida:过证书检测脚本6.证书绑定,双向证书  r0capture7.针对spdy/quic:frida降级8.flutter sslpinning: frida过检测脚本9.自实现http请求库:  针对跟踪,hook入参和返回值10.protobuf/gRPC:https://mp.weixin.qq.com/s/8yOabTkMid9iKcbMJjYVHA10.tls检测:    具体情况具体处理,据说某迈也有移动版,所以也有tls检测11.抓包框架:lamba:https://github.com/rev1si0n/lamda12.eCapture:eBPF下的抓包工具,无需CA证书即可抓HTTPS明文

目标点定位的思路

抓到包以后,拿到了接口,以及加密参数,怎么定位这个加密参数生成呢

1.看请求参数,搜索想要查看的特殊字段(并不推荐,但是确实能解决50-60%的app)

2.objection 列出所有的类,hook全部,然后看关键点的时候哪些类被调用了

3.利用dumpsys window 或者activity看当前的activity(mt管理器也可以记录activity),进到里面找逻辑,如果逻辑代码太多则不适用

4.观察各个接口的请求参数,是否都有一样的请求体结构(换句话说就是看这些请求参数的键名)是不是一样的,如果一样,按照开发逻辑理念,一定有一个通用的模板加密类,搜一个加密字段,找到这个加密类,查找用例,或者用objection跟踪,打印调用栈

5.hook 通用的加密算法,打印调用栈

6.hook 网络库okhttp,request等的(以OkHttpLogger-Frida库为首的)

7.hook hashmap的put方法,大部分的请求参数基本都用的hashmap封装请求体,hook put方法,打印调用栈,则可以找到(并不100%通用)

8.hook string类的getBytes等的常用方法或者转Json的方法

9.hook Byte类的toString等的常用方法或者转Json的方法

10.hook Toast类,主流开发习惯,提示弹窗都用的这个类,hook它,看调用栈

11.关闭网络,再发起需要操作的目标接口,看报错提示,利用报错提示找调用栈,实际操作时,大部分情况跟思路10重合

12.用frida hook 类android.view.View,点击哪里hook哪里的方法,打印调用栈

13.hook Log类,按照开发逻辑,开发人员会在开发的时候会在一个阶段里用log打印输出日志看逻辑,hook log打印调用栈,有时候有奇效

14.有的app会检测返回值的格式,并解析输出显示,看是否有通用解析类,hook它,如果hook不上(或者找不到这种类),则用抓包工具修改返回值,然后看解析逻辑(不常用)

以上方法也无法保证通用,比如也有反调试调用栈,使其打印不到核心调用流程或者直接返回空调用栈,这种就得针对处理了

GDA 、jeb、jadx,混着用,别只用jadx,有时候jadx解析并不好,看不到逻辑

比如某wtoken,用jeb可以直接看到一些逻辑,jadx的那个部分解析失败

调试

当定位到加密参数生成逻辑的时候,准备调试

一般用objection跟踪类,看调用栈,结合源码,写frida脚本调试,如果在frida逻辑里能hook或者主动调用实现,此步结束

目前来看,到这一步,基本都会遇到frida反调试,frida直接用不了,有时候换用lsposed,会有奇效,如果还不行,这就需要去对抗检测了,三两句就说不清楚了,感兴趣可以联系我。

加密协议实现

调试完感觉能行得通之后,开始实现加密逻辑

1.确定是什么加密算法(并不通用,需要结合实际)

32位,一般是md5带【==】一般是base64,如果这个【==】还带有【/】,那多半用了aes/dex/rsa,并用base64做了二次加密40位的加密结果,一般是sha请求体是乱码,看是否是tcp或者protobuf

 这里的加密算法,推荐看Q佬的文章

2.判断是否是标准的加密算法,给一个固定的入参,与标准的算法对照加密结果

3.实现协议

这个就需要需要花精力分析,尝试,实在无法实现,可以用unidbg,不要纠结于手段

风控对抗

当以上步骤你都走完后,请求几次,发现确实能拿数据,于是你非常开心的部署并跑起来,结果批量跑没多久,就各种异常返回,滑块,403啥的也跟着来了,这时候你可能就遇到风控了。

什么是风控,以下是简单版的,这个不一定齐全也不一定对,后面有空再单独搞个专题文章介绍风控的

手机品牌、型号、壁纸、上网模式、wifi名等上百个基本的设备参数gps,陀螺仪root检测app检测(一般检测是否magisk包)网络/检测,网络状态实时上传行为分析,按钮点击次数、接口请求统计分析某个页面停留时间,重复请求次数请求调用栈顺序分析...

结合以上信息,传到服务器,服务端收集到用AI推演出用户画像,行为习惯,判定风险等级,然后给定设备/账号限制

如果等级低,则出滑块,不返回数据或者返回异常,提示实名认证,比如某国外社交app,需要人脸认证、身份证、手机号码验证

风控这种东西怎么对抗呢,这个就真的难说了,只能花时间测试并针对调整了

结语

以上流程或者思路,并不一定对,只是我个人的经验分享而已,如果对您有帮助,那我挺开心的

加我微信:geekbyte,商务合作或者技术交流,以及小白技术路线推荐,技能提升进阶课程、书推荐

你可能感兴趣的:(安卓安全分析,java,安全,爬虫,反爬)