某航空APP逆向笔记

admin 2024年4月10日09:46:15评论18 views字数 2519阅读8分23秒阅读模式

目标APP就不放了,公司还在跑,记录一下逆向过程中学到的一些经验技巧

脱壳

直接拖入PKid查壳发现是360的壳

刚开始买的测试机在路上,无法直接用脱壳机,尝试使用其他脱壳方法

1.BlackDex

直接脱壳失败

2.frida-dump脱壳

壳中有frida检测,启动frida一段时间后直接闪退退出(每次退出还给我手机干重启)

开始尝试过frida 检测

直接脚本hook strstr,strcmp,pthread_create,android_dlopen_ext,更改启动端口

查看打印日志发现并没有什么问题,闪退依旧存在,我是废物所以就不硬刚了

疑问

为啥是过一段时间后才会干掉frida,猜测是线程检测间隔时间,但是查看hook日志并无异常,甚至都没有做相关特征字符串的检测

解决

后面经过多次尝试,换成了一个低版本的path-server,终于能运行了(迷)

再次运行frida-dump

能脱壳了,就他妈离谱

但是脱了个寂寞,脱下来的代码只包含系统类的内容,app的关键类一个没有

后面还是找我朋友用脱壳机脱下来了(感谢大佬+1)

抓包

1.抓包详情

观察url

抓包发现所有关键包(数据有加密)都是走的同一个url: /api/ume***/native,一看url的这个ume,就觉得眼熟,ume,u,me,百度一搜,wc,友盟。之前好像有个产品也是这个。

但是时间久远没有啥印象了,好奇翻了下客户列表,发现了另一个同类产品(这不搞定了就直接拿下俩,血赚)

2.抓包工具自动识别protobuf

听同事说他们之前搞这个APP,用charles抓包可以直接识别protobuf,灰常方便

但是我尝试使用charles 抓包发现发送数据和返回数据都是加密的,请求体也没有特殊字符可以辅助定位,而charles也没有正确识别

百度charles解析protobuf的相关信息,发现需要请求头中的content-type值必须是 application/proto,而这个App的content-type是protobuf,不是标准的

发现并不能直接看protobuf,遇事不决,可问百度

参考博客:Charles解析protobuf之初探-腾讯云开发者社区-腾讯云 (tencent.com)

使用重写功能,重写响应头(为啥不改请求头,因为请求体是加密字符串,而响应体是字节流)

改了之后发现,还是解析不了

后来觉得charles不太好看请求,改成了fiddler

发现fd 的raw格式查看protobuf的响应体可以自动解码大概看一下内容(虽然还是有大部分乱码,但是可以参考定位请求)

否则都是同一个url,请求体都全是加密字符,返回体都是乱码,一堆请求,都不好确定哪个请求的加密值是需要逆向的

参数逆向

根据响应体中的部分关键词,直接尝试搜索,发现很难定位到

后知后觉这是protobuf,直接hook protobuf,然后打印堆栈不就完了

1.hook protobuff

看了一下脱壳后的代码,一搜protobuf

某航空APP逆向笔记

一万多个,而且hook com.google.protobuf 的所有方法发现都没有调用!

我淦!

好,放弃,下一个

2.定位加密

正当我沉迷苦海搁那儿大海捞针呢,hook hashmap啊啥的关键方法

同事问我要不要参考一下以前的代码,拿过来一搜,转明文的那个方法还在!赶紧hook,哟西,就是这个躺赢的味道

欧克,结束,全靠大佬带

其实这里想说的是,搞不定时,有老版本的代码可以参考老版本的代码,有些关键类可能还在,虽然有修改,但是可以有很好的参考价值

没有老版本的怎么办,现场去逆老版本啊,就算有强制更新,过掉继续逆就完了

3.公共库直接引

这个其实应该在定位加密那儿,之前不是说了,它是protobuf,但是hook 发现没有调用com.google.protobuf(意思是转明文关键点不在这里),不是压根没调用,光看调用,掉的太多,发现不了有效信息

这里他其实用了github上的一个开源protobuf封装的工具,所以直接在自己的项目里引用就好了,然后包括发现设备指纹的加密的so,那个类名libMMKV.so,熟悉的人应该一眼就能看出来,这是个数据库的so,调用这个说明是在这儿取值,而不是在这儿加的密,要是unidbg跑,补死你也补不出来加密值

所以,发现类名的路径和主包路径不一致,尽量花几秒钟去搜一下,没准会省下你非常多的精力

4.加解密以及格式化

都定位到关键类了,剩下的java层分析都是小意思,跳过跳过,说三点值得记录的

3.1 格式化困难

之前说过找到了转明文的关键方法,但是,protobuf写格式是很麻烦的事情,特别是公司还用的java开发,python还能用blackBoxprotobuf去无脑解

再加上领导说把明文都搞出来,一是方便看,方便分析各个值的意思,二是给以后留个种子

别说,很有道理,要不是有以前详细的笔记,我应该也不会这么轻松吧,

看了下

一个请求就近千个字段,这让我手写?鲨了我吧,结构体一层套一层,比我肚子上的游泳圈层数还多

3.2扣代码

然后领导说,你把他的接口体全扣下来不就完了......复制粘贴总比手敲好

虽然但是,万一哪个类里边有其他加解密类,或者业务逻辑,或者有个类没脱出来,wc,那我不得把他整个APP扣下来

不过没办法,总不能手敲吧

最后搞了接近一周(加上把我写的py代码转成java的时间),复制了N多个类出来,删除调试,改了N多代码,总算跑通了(其实最主要的是找对应的类)

3.3 unidbg模拟执行so

本来是不想学unidbg的,因为听说unidbg有诸多限制,还有很多检测,越来越难搞,看了下web补环境的困难,就没学习

后面由于种种缘故,认识到了unidbg在实际生产中的重要——不用浪费手机rpc(省钱,所以重要)、方便迁移、比手机稳定

上个月刚买了龙哥星球才学了一点,这就排上用场了,哈哈哈哈哈哈

补环境需要补的不多且都很简单就不说了

  • 签名——java层封装的一个函数,专门获取签名信息并加密

  • jni 函数——很基础,没有特殊补的

  • java类——获取了这个类的一两个属性,由于不多且不会变化就直接写死返回,没有写一个类出来

原文始发于微信公众号(逆向成长日记):某航空APP逆向笔记

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月10日09:46:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某航空APP逆向笔记http://cn-sec.com/archives/2643289.html

发表评论

匿名网友 填写信息