首页
社区
课程
招聘
[原创]某 APP 聊天协议逆向
发表于: 2023-3-23 11:23 43933

[原创]某 APP 聊天协议逆向

2023-3-23 11:23
43933

IDA、JADX、Frida、Charles、WireShark

总结:猜

聊天数据一般都为TCP传输,所以直接使用WireShark抓包

经过不断观察以下特征数据很像聊天数据

chat

接下来的思路就是Hook libc.so 的send函数,打印调用堆栈


未查到,那就先将APK拖进JADX里进行分析

撸起袖子就准备直接开干,Frida Server已启动,直接运行

世间万般逆向怎么都如我所愿?
不出意外的意外,Process terminated。
狗贼将我的Frida大法拒之门外,作为Frida忠实爱好者(别的不会),这哪能忍?

往上看,/lib/arm64/libmsaoaidsec.so这小子名字一看就不是什么好东西

拖进IDA里将之底裤扒光

我们知道一般检测Frida的函数无非是strstr、strcmp、readline,fgets这些

我们当然也知道一般检测函数大多都在init_proc、JNI_OnLoad中进行调用执行

打开so 定位到init_proc,然后又闻到了熟悉的味道

切!如今没有高级复杂电路图的APP,咱都不屑于去分析(吹牛

里面调用的函数不是很多,所以。。。。直接人肉分析,那这样不是外套脱了还剩里面的?不行不行,革命要彻底!!!!!!!!!!

通过观察上面的CFG发现,该混淆符合以下逻辑

整体思路就是先查找主分发器,一般被引用次数最多的那个块就是主分发器,引用主分发器的块大概率是真实块,再使用unicorn模拟执行,遍历每一个分支,记录每一个块,如果某一个块是上次记录的块则也为真实块,无后继的块则为retn块,剩下的就是无用块。最终处理后样子如下:

经过一个一个的点,最终找到了一个十分可疑的家伙sub_1A8A0()

再次跟进去,发现了重点胖揍对象

那可不就是这小子阻碍了Frida大军的步伐

下面编写Frida脚本去绕过该检测手段

然后就可以愉快的使用Frida了

通过Frida Hook libc.so后发现,聊天协议走的是JAVA层的socket,然后Hook JAVA层相关函数得到如下调用堆栈

那么组包和加密大概率是在wq这个类里面的某些函数实现的

打开JADX,查看wq.d$d.e函数

e函数里可以看到body即为tcp数据,经过body = EncryptUtils.encryptMessage(body);加密,跟进encryptMessage函数


最终发现为DES(DES/ECB/pkcs5padding)加密,加密key由getUserIdKey生成

再次发起Frida魔法攻击

未加密的数据结构为protobuf

result结果即为TCP data

解密后就可以拿到聊天内容,发送方昵称,发送时间等信息

 
 
 
frida -Uf cn.xxxx.android -l .\xxx.js --no-pause
frida -Uf cn.xxxx.android -l .\xxx.js --no-pause
 
 
 
 
 
 
 
 
 
 
 
 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2023-3-28 10:16 被REerr编辑 ,原因:
收藏
免费 17
支持
分享
最新回复 (24)
雪    币: 2083
活跃值: (919)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
2
frida 大军, 冲冲冲!
2023-3-24 11:17
1
雪    币: 163
活跃值: (426)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大侠讲话有点意思啊
2023-3-24 15:03
0
雪    币: 258
活跃值: (1747)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
太牛逼了,自愧不如
2023-3-26 21:00
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
过检测的思路学习了,有个疑惑是,他那个检测的线程进去后,肯定也是调用了一些字符串比较、查找子串等常用函数,为啥不hook这些函数来过检测呢,而要费劲分析他的过检测逻辑呢
2023-3-27 10:07
0
雪    币: 1447
活跃值: (2699)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
wx_水山 过检测的思路学习了,有个疑惑是,他那个检测的线程进去后,肯定也是调用了一些字符串比较、查找子串等常用函数,为啥不hook这些函数来过检测呢,而要费劲分析他的过检测逻辑呢
hook检测函数过检测是最优解,像hook strstr、strcmp这类函数去过滤一些常用检测字符串确实可以,但这类函数使用频率很高,并不止检测函数一处使用,长期hook可能会导致app崩溃等问题
2023-3-27 11:09
2
雪    币: 486
活跃值: (583)
能力值: ( LV12,RANK:238 )
在线值:
发帖
回帖
粉丝
7
学习了。
2023-3-27 17:30
1
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
厉害了 可是有个地方我没看懂 
文中提到 开启检测线程的代码是这个:result = pthread_create(qword_45658, 0LL, (void *(*)(void *))sub_18C88, 0LL);
这意味着真正的检测函数是sub_18C88 地址是base + 0x18C88
可为什么 在用frida过检测时 
detect_frida_loop_addr = base_addr.add(0x000000000001B8B4)
请问0x000000000001B8B4是怎么来的呢?
2023-3-27 18:23
0
雪    币: 1
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
REerr hook检测函数过检测是最优解,像hook strstr、strcmp这类函数去过滤一些常用检测字符串确实可以,但这类函数使用频率很高,并不止检测函数一处使用,长期hook可能会导致app崩溃等问题
确实有道理,学习了
2023-3-28 10:03
0
雪    币: 1447
活跃值: (2699)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
是0x18C88
2023-3-28 10:17
0
雪    币: 1447
活跃值: (2699)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
万里星河 厉害了 可是有个地方我没看懂 文中提到 开启检测线程的代码是这个:result = pthread_create(qword_45658, 0LL, (void *(*)(void *))sub_ ...
是0x18C88
2023-3-28 10:17
0
雪    币: 248
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
学习了 , 感谢楼主分享!
2023-3-29 16:01
0
雪    币: 274
活跃值: (1026)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
拖进IDA里将之底裤扒光。。。然后又闻到了熟悉的味道。哈哈,大侠顺便给个样本呢 ?
2023-4-4 09:38
0
雪    币: 1447
活跃值: (2699)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
ziyuzile 拖进IDA里将之底裤扒光。。。然后又闻到了熟悉的味道。哈哈,大侠顺便给个样本呢 ?
灵魂app
2023-4-4 09:46
0
雪    币: 861
活跃值: (69)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
mark
2023-4-13 13:34
0
雪    币: 9
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
大佬可以留个方式学习吗吗
2023-4-14 04:23
0
雪    币: 982
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
大佬,怎么判断是哪个so文件有Frida检测呢?
2023-4-20 09:53
0
雪    币: 1447
活跃值: (2699)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
通过hook dlopen查看加载so来判断
2023-4-21 09:36
0
雪    币: 1447
活跃值: (2699)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
19

最后于 2023-4-21 09:36 被REerr编辑 ,原因:
2023-4-21 09:36
0
雪    币: 478
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
63byte 大佬,怎么判断是哪个so文件有Frida检测呢?
hook dlopen打印出来就行了
2023-8-7 23:05
0
雪    币: 583
活跃值: (997)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
前有大佬分析过bilibili frida过检测,这个so就是检测frida的
2023-8-8 15:40
0
雪    币: 189
活跃值: (1600)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
大佬 hook libc.so send函数的能不能贴一下,不甚感激
2023-8-25 10:05
0
雪    币: 0
活跃值: (452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
sub_18C88,请问这个怎么获取的?
2023-9-26 18:42
0
雪    币: 158
活跃值: (1101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25

已解决

最后于 2023-11-8 19:52 被教教我吧~编辑 ,原因: 解决
2023-11-8 19:40
0
游客
登录 | 注册 方可回帖
返回
//