objection的rpc调用
2022-11-3 22:22:27 Author: only security(查看原文) 阅读量:7 收藏

接之前的文章,说一说objection的rpc调用

0x01 背景

在使用objection的rpc调用之前,尝试了frida-rpc的调用,但是发现不稳定,会失败,如下:成功的截图

失败的截图

python报错如下:

具体原因未知,这样虽然我们可以进行测试,但是无法做到实时加解密,所以这里更换了方向,更换到了objection来进行实时加解密

0x02 objection的rpc使用

使用objection的时候,在搜索引擎上都没有找到rpc的文章,有也仅仅是提了一笔

后面直接找到了官方文档(https://github.com/sensepost/objection),好在配合翻译还是能看懂的

使用  objection --api-port 8000 -g xxx.xxx.xxxx explore --enable-api 即可开启objection的rpc接口,默认是无法远程调用的

访问http://127.0.0.1:8888/rpc/invoke/androidHookingListActivities就可以看到hook到的所有Activities

后面根据安卓方法的源码一个个尝试

找所有的类

GET /rpc/invoke/androidHookingGetClasses HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close

找到关键字类

POST /rpc/invoke/androidHookingGetClassMethods HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Content-Length: 38

{"className":"com.xxxx.lib.encrypt.c"}

获得实例

POST /rpc/invoke/androidHeapGetLiveClassInstances HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Content-Length: 34

{"clazz":"com.xxxx.lib.encrypt.c"}

调用实例的方法

POST /rpc/invoke/androidHeapEvaluateHandleMethod HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Content-Length: 489

{"handle":"0x202d76","js":"console.log(clazz.d(\"{\\\"app_type\\\":\\\"local\\\",\\\"mod\\\":\\\"system\\\",\\\"code\\\":\\\"getNoticeAll\\\",\\\"app_status\\\":\\\"3AFE4B90B27DE878237A64DCE3862FA69B47716F:1\\\",\\\"build_id\\\":\\\"a1000\\\",\\\"oauth_type\\\":\\\"android\\\",\\\"oauth_id\\\":\\\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\\\",\\\"version\\\":\\\"5.3.1\\\",\\\"apiV2\\\":\\\"v2\\\",\\\"token\\\":\\\"\\\"}\",\"xxxxxxxxxxxxxxxxxxxxxxx==\"))"}

打开启动objection的终端,能看到调用函数的返回值

0x03 遇到阻碍

但是,也可以发现,另一个问题出来了 通过远程调用api,无法在响应包里得到结果,只能在objection的终端得到相应的结果,对于我们自动加解密来说,又遇到了一个阻碍,看官方文档也可以发现这个问题(https://github.com/sensepost/objection/blob/master/agent/src/rpc/android.ts)

函数androidHeapEvaluateHandleMethod没有返回值

顺带一提,在65行,也可以看到execute这个函数的rpc调用,但是和objection的终端使用方式相同,无法通过execute来调用有参数的函数,只能调用没有参数的函数

基本上没有什么思路了,objection的终端输出可以打印到响应包里吗,感觉是有点困难的,而后我的第一反应就是提个issue,想让作者去写一个有函数返回的方法

(忽略我蹩脚的英语……)

0x04 尝试解决

后面转念一想,难道必须要作者去写吗,我能不能自己去改一下呢,找到rpc调用的目录介绍

放在了objection项目的agent.js代码里,直接按照关键字找heap.evaluate这个执行js代码的函数

js代码我不是很熟,但是依葫芦画瓢还是比较简单的,直接去找androidHeapExecuteHandleMethod的实现方法(原因是这个函数有返回值)

修改如下:(其实也蛮简单的,查阅了下资料,eval函数可以直接返回值的)

保存一下,然后再次启动objectionobjection --api-port 8000 -g xxx.xxx.xxx explore --enable-api按照之前的流程,获取实例,得到handle,再通过handle去调用实例的方法

有了返回值了,但是这里还是有点不舒服,有双引号包裹,再修改一下:

if (clazz != null){
 var res = eval(js);
 console.log(res);
 return res && (res = res.toString()), {
 value: res
 };
}

解密也是可以的

吐槽一句,这里使用yakit主要原因就是burp加载大字节的响应包的性能太差了,会崩…… 那么就可以进行愉快的自动加解密了,可以配合笔者写的autoDecoder进行组合利用了

PS:顺便提一个小知识点,我们都知道,在json里,转义双引号用\"即可,如果在转义双引号中引用双引号呢,答案是\\\",在前面再加两个斜杠即可

0x05 参考

https://github.com/sensepost/objection/blob/master/agent/src/rpc/android.ts [objection的rpc文档]

https://www.cnblogs.com/tjp40922/p/15171898.html


文章来源: http://mp.weixin.qq.com/s?__biz=MzkzNzE4MTk4Nw==&mid=2247485318&idx=1&sn=1d442d42bd81fdbe232de7edfc90c535&chksm=c29211caf5e598dc22c6aa9968b77b662750a06efa122ceb2bbc6c1db095ba56e63f889f45a2#rd
如有侵权请联系:admin#unsafe.sh