使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

admin 2021年10月27日22:46:21评论392 views字数 2665阅读8分53秒阅读模式
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
看雪论坛作者ID:Avacci



目标:fulao算法接口在手机上用http暴露下(提示:使用frida-net库和frida-inject)

 

下载安装frida-net,把frida-inject和_agent.js push到手机上。

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
开启监听:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
测试脚本:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

环境部署完毕,接下来是找到算法接口,写入agent.js中,重编译再放入手机运行。

 

要找算法接口,肯定先看看请求中什么东西被加密了。

先抓个包:

https://api-al.vipmxmx.cn/v1/videos/long/keyword_cover/t?payload=e4FeAkyuziEcFilBjcx7qA%3D%3D.7DkvRGCe%2FDdHD6Tg0g8oM5B74pqq4vTTFmMMmrT0YHaC80BJiXYu27LxNBFzpaCQBoYiArYEmES5R68jJTc%2F1T1QnjfLTtAunn1BbCiFPVYRc0HkMbQTU1yj7PtFzYWPA1V0p0NxBUIIFTdrNxbS9mUmETeNcgnD08Sxb74knTqDjILo3aFS427jj7HEG%2BtEjywgK7LWf59pnmdXhWoFwUFzTmPuVhLw2%2FeZph9tJil8fZTdggwSbchwtqN8BtuvcLn4tinaIe7aLSPUTt55pkd%2BkphoJUhZV2yqfYXZPKX09yh0wsrR%2BrPMoCOm0QBp

Host: api-al.vipmxmx.cn
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.12.1

 

返回结果被加密:


使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用


打算先从url中payload的加密去定位,直接在jadx反编译的结果中搜索payload,定位到看着比较可疑的地方。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
用objection hook一下这个方法:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
点了下搜索,确实有被调用到:

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用


那就继续分析d()方法的细节。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
存储Payload值的变量str有两次被赋值的地方,通过this.l的值来确定如何生成。但是这里似乎jadx反编译的结果有问题,导致看起来始终用的是第二段的生成算法。
 
所以用GDA再反编译看下:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

生成payload的地方用了条件运算符,看起来更合理些。

分别查看两个生成方式:使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

ba 为随机生成的16字节数组。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

再将ba进行Base64编码。

str初始值为”.”:使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

Sc的初始值略微复杂:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用最外层的b.c方法的实现是AES算法:

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

第一个入参为key,第二个为IV,第三个为待加密的明文。
再回去看三个参数的由来。
第一个参数,也就是AES加密的key,是对一个native方法返回的值进行Base64解码后的结果,应该是个固定值。

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
这里的CipherClient类里包含了不少类似的方法,用来获取各种key。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

第二个参数就是前面生成的16字节随机数ba。

 
第三个参数,也就是AES算法的原始数据,是this.mapj变量的json格式字符串。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
this.mapj是一个Map对象,其中的内容为:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
直接hook一下前面的AES加密函数,发现不同的请求下mapj的内容有些许不同。 
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

将上面的部分串联起来就是payload。
 
接下来就要定位请求返回的内容在哪里接收并处理,没想到什么好的路子,还是通过objection hook了前面生成payload的类c.c.a.j.c.j中的所有方法,发现有个方法的参数中带了response对象的信息。

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

调用的方法为c.c.a.j.c.j.a,传入参数类型为k.r。
 
然后用WallBreaker查看了下一个k.r类型的对象包含的内容,发现其中_b包含了response的body。

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

直接定位到反编译后k.r的实现:

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

可以判断出f13822b为response body,而a()方法直接返回这个变量值。

 
全局搜索一下k.r.a()方法的调用,有好几处。不过感觉高亮的这处应该是一处body的解密操作。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
转到该调用处:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
先根据response对象rVar的内容获取一个值a2,会判断a2的值是否为空来决定是否需要解密response的body内容。

获取a2值的具体实现为判断response header中是否带有X-App-Name字段,且X-App-Name字段值是否为app。如果是的话对header中的X-VTag字段值进行md5哈希,再从第九个字符开始取到第24个字符(16个)。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

这里直接假设a2不为空,进行body解密:
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

最外层的super.a方法是揭秘完后对不同结构类型的返回字符串进行后续处理。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
所以解密函数就只有内部的b.a方法,其实现仍为AES。第一个参数为key(需要先md5),第二个为IV,第三个参数为需要解密的密文。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
对应传入的实参,第一个为CipherClient.decodeKey(),hook一下得到值为fe34dd6bbd3020c2fb69abe73b5b973c。第二个就是前面生成的a2。第三个就是请求返回的内容。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用 
直接hook该函数:

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

这里直接打印解密后的返回值也可以,但这里用CyberChef确认了下解密流程没有问题。
使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
 
跟请求参数加密和响应内容解密相关的流程大致是这样,那么用到的跟加解密算法有关的类主要有两个:

一个是包含AES、MD5等算法调用的EncodeUtility类,混淆后的类名为com.ilulutv.fulao2.other.i.b。还有一个是获取加解密时用到的key和IV等参数的CipherClient类。前面那个感觉暴露出来不太好调用,先就尝试下暴露CipherClient类的各个调用接口。

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

修改frida-net项目下的agent.js,然后重新编译,推到手机中。

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

用frida-inject执行脚本,然后尝试让他输出几个加密参数。

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用



使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用 


看雪ID:Avacci

https://bbs.pediy.com/user-home-879855.htm

  *本文由看雪论坛 Avacci 原创,转载请注明来自看雪社区


使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用


使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用



# 往期推荐





使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用
公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]



使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

球分享

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

球点赞

使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

球在看



使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

点击“阅读原文”,了解更多!

本文始发于微信公众号(看雪学院):使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年10月27日22:46:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用frida-net脱离pc在手机上直接暴漏app的算法供三方调用http://cn-sec.com/archives/419857.html

发表评论

匿名网友 填写信息