Frida追踪定Socket接口自吐游戏APK的服务器IP和地址
2021-05-16 19:07:34 Author: mp.weixin.qq.com(查看原文) 阅读量:225 收藏

本文为看雪论坛文章

看雪论坛作者ID:PTRer

题目来源

样本来自看雪2W班十月第二题。

题目要求

之前课程已经给出的Socket的自吐,还差一个服务器IP地址和端口的自吐,补充上。
 

解题思路

编写测试demo后,首先利用objection去批量hook住内存中socket所有类,然后模拟触发socket创建,从被触发的socket类的方法中找到与IP地址和端口相关的方法。
接着单独hook住与ip地址和端口相关的方法,再次模拟触发socket创建,观察hook结果符合预期。最终编写frida脚本自动化拿到服务器的ip和端口,并利用植物大战僵尸apk测试,符合预期。

考察知识点

本题知识点更多的是一种通用解题思路,这种利用ojection批量hook住相关类的方法不局限于获取服务器的ip地址和端口。

解题过程

(1) 第一步,编写一个客户端的demo。Mainactivity核心代码如下,创建两个按键,一个基于MessageTransmit类创建socket,一个用来发包。

MessageTransmit类核心代码如下,测试服务端ip为“192.168.31.46”,测试端口是6666。

(2) 第二步,利用objection进行分析。分析的第一步骤,利用objection执行如下命令查看内存中有哪些socket类。

然后将这些类拷贝到excel中,生成“android hooking watch  class java.net.AbstractPlainSocketImpl”这样的列表,再拷贝到hook.txt中,采用如下命令启动apk时,一次性全部hook住socket相关类中所有方法。

在app上按键触发socket创建流程,可以看到如下调用关系,其中光亮函数看上去就是拿到服务端地址和端口的关键。

于是我们重新objection这个apk,然后采用如下两条命令,hook住getPort和getAddress方法,再次点击创建socket按键,可以看到打印出了服务端ip和地址,与我们demo中填写的一致。

(3) 第三步,编写frdia脚本,并进行测试。如下是frida脚本,根据log可以看到打印出了服务端的ip和port。

最后我还用这个frida脚本,跑了下植物大战僵尸apk,测试结果如下,也确实能自吐出服务端的ip和port。
- End -

看雪ID:PTRer

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

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

《安卓高级研修班》2021年6月班火热招生中!

# 往期推荐

公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]

球分享

球点赞

球在看

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


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458384941&idx=1&sn=998aa69b1ab6f7b0723ec4bd59944352&chksm=b180caa786f743b1ef328d8c0d20c4567f3a3f5fbc76c37ca873342d895427c0124b9235bc01#rd
如有侵权请联系:admin#unsafe.sh