首页
社区
课程
招聘
[原创]某右app sign还原
发表于: 2020-7-1 00:21 15218

[原创]某右app sign还原

2020-7-1 00:21
15218

闲来无事,打算巩固一下以前学的知识,偶然间发现某右sign算法变了,特开一贴用来记录。(ps:本篇分析的APP版本为5.4.8)

使用charles对目标app进行抓包,抓包结果如下:

图片描述

可以发现有个sign的签名字段,jadx反编译app,全局搜索sign=,找到关键类如下:

图片描述

使用frida hook a方法可知sign方法为加签方法,该方法为native方法位于libnet_crypto.so中。firda 代码如下:

使用ida打开libnet_crypto.so, 找到Jni_OnLoad函数,经过处理发现动态注册的函数位off_17D010处。

图片描述

经确认该so对字符串进行了ollvm默认的加密。有以下3种处理方式:

可以通过hook art.so 的register函数,打印动态注册的地址。frida 代码如下:

使用方式

APP 在运行时,会自动解密字符串。可以使用frida 对解密后的字符串进行打印,frida代码如下:

使用frida 附加到目标APP,调用 print_string(0x17D0C1) 可得到如下结果:

图片描述

那么与其对应的sub_49864+1 就是sign方法的地址。

被“孤挺花”混淆的字符串可以用unicorn仿真器进行修复,具体原理可参考大佬的博客:https://www.leadroyal.cn/?p=972

sub_49864 f5 结果如下:

图片描述

鄙人定位关键函数的方法是使用frida hook 输入和输出对比结果来进行定位。最终定位的关键函数为:

函数sub_61DBA的cfg图如下:

图片描述

看到这个cfg图, 当时觉得这不白给吗,什么混淆都没有。 脑子一热一边动态调试,一遍翻译arm指令。 花了点时间,翻译了500多行arm指令瞬间觉得不对劲了,这尼玛大部分都是指令替换膨胀代码。 粗略计算了下,该函数大概有5000条指令,这尼玛什么时候是头,顶不住顶不住,为了头发着想,偷了个懒,直接f5 copy伪代码,修改了一下,发现结果对上了,果断放弃翻译arm汇编,有兴趣的可以试下翻译。

f5的伪代码,有大量类似于:

的运算,可以替换成

等形式。

hook sign方法,获取加密参数:

图片描述

c运行结果图:

图片描述

逆过老版本的某右APP,当时的只有个sign加签,post提交参数和返回结果还没有aes加解密(怀念以前不穿衣服的你),整体难度应该算是容易的吧。老版本的sign没记错的话就是md5(待加签的字符串进行变形),新版本的话,有点像是自己魔改的md5,不太确定,但整体感觉上是像。另外,aes加解密这块好像是比sign难度高点,还没去看。还发现个hook点可以让app使用老接口,frida代码:

感觉该so是练习反混淆的好样本,cfg不太复杂,想练习的朋友可以试试先trace,然后根据trace手动修复,再写脚本还原。强烈建议各位胆大信息的大佬,去翻译核心算法的arm汇编,试过的都说爽(逃)。

 
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 5
支持
分享
最新回复 (17)
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
图片没传上,麻烦再重新上传一下哦
2020-7-1 09:27
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
Editor 图片没传上,麻烦再重新上传一下哦
图片已修复了
2020-7-1 09:55
0
雪    币: 295
活跃值: (920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大佬优秀6666
2020-7-1 12:37
0
雪    币: 4883
活跃值: (18890)
能力值: ( LV13,RANK:317 )
在线值:
发帖
回帖
粉丝
5
感谢分享!
2020-7-1 13:41
0
雪    币: 243
活跃值: (625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
2020-7-2 11:41
0
雪    币: 243
活跃值: (625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
期待楼主继续把aes加密那部分分析一下
2020-7-2 15:46
0
雪    币: 73
活跃值: (923)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
说个题外话,frida 这种东西涉及到的技术门槛我相信对国内很多大神来说那都不算事,为什么这个玩意儿,不是国产的呢?
2020-7-2 16:33
0
雪    币: 455
活跃值: (3925)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
吉他jita 期待楼主继续把aes加密那部分分析一下
等有时间 等有时间
2020-7-3 15:17
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10

网页版的api:http://izuiyou.com/api/index/webrecommend  参数知道含义吗?

能否通过添加参数去获取某话题的最新帖子?


2020-7-15 22:22
0
雪    币: 202
活跃值: (211)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
kongfubull 说个题外话,frida 这种东西涉及到的技术门槛我相信对国内很多大神来说那都不算事,为什么这个玩意儿,不是国产的呢?
国内大牛都在忙着挣钱
2020-8-10 10:46
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
一般看CFG 是一长串这样的流程那是变型的MD5无疑了
2020-8-13 19:42
0
雪    币: 235
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
mb_exesqobt 网页版的api:http://izuiyou.com/api/index/webrecommend  参数知道含义吗?能否通过添加参数去获取某话题的最新帖子?
从哪拿到的网页版API
2021-6-17 17:49
0
雪    币: 853
活跃值: (488)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
厉害
2021-6-22 08:34
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
print_string(0x17D0C1)  想问下0x17D0C1是怎么来的
2022-3-29 09:37
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
定位关键函数那里是否可以详细些,我hook  sub_63CB8打印函数的参数没有看到跟java层那样含有url的信息,不知道大佬是怎么确定这个是关键函数的
2022-3-29 15:31
0
雪    币: 193
活跃值: (1215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢分享,不错不错
2022-3-29 16:08
0
雪    币: 1771
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
大佬牛!!!!
2022-4-5 17:17
0
游客
登录 | 注册 方可回帖
返回
//