十一七 发表于 2021-4-25 22:36

利用Hook技术实现对Instagram的抓包

本帖最后由 十一七 于 2021-4-26 19:57 编辑


## 前言

听别人说Instagram没法抓包,于是这篇文章诞生了。

Instagram的防护做的很好,自己实现了一层SSL,直接过掉了r0capture等一些常见的工具,既然大佬的轮子用不了,那就只能自己动手了。

**分析样本**:Instagram 184.0.0.30.117

## 思路
使用反编译工具导入,发现对变量名进行了混淆,先捋一下思路:

抓不到包,看不到关键字,那就只能根据经验猜测字段了,APP有登录功能,尝试搜索常见的API名称 `login`,`login/`,`login"`,`"login"`,`"login` 。定位到URI的处理点在附近查看有没有关于协议头,URL和HTTP的处理。找到底层Send函数,Hook,拿到HTTP报文。

## 定位迷途
一番查找之后,初步断定URI的处理在`X.6s1`中




这里的参数生成的过程及算法暂时不去管,先抓到包才是首要的~

通过参数r3,追到了`X.0uU`,翻看之后看到了一堆像是协议头的操作



又发现了https链接的格式化,Hook试了试,URL就出来了。




之后线索就断了,堆栈回溯看了都没什么发现,突破点是在查看交叉引用向上找,在`X.222.A7c`,发现了一个用于打印错误的函数。



本着死马当活马医的想法,搜了一下`builder.`,发现了可疑点



跟进去看,尝试Hook了一下,调用到了这个类



再Hook看了看调用的A02方法,看看有没有找歪~



既然没找错,看A02方法,发现JADX反编译不出来,换用GDA。



明显的协议头,明显的http,引用了apache开源的HTTP框架





`executeWithDefragmentation`调用了`sendHeadersWithBodyAndEom`




继续往下看




已经到底了...再往下就是Native,再追下去没什么意义,所以下面就是最终的Hook了~


## HOOK打印HTTP报文

综上分析,只需要Hook `com.facebook.proxygen.JniHandler.sendHeadersWithBodyAndEom` 就能得到包数据了。

google了一下org.apache.http的源码:(https://android.googlesource.com/platform/external/apache-http/+/refs/heads/lollipop-mr1-wfc-release/src/org/apache/http)
```javascript
function getClassName(obj) {
    const objClass = Java.use("java.lang.Object").getClass.apply(obj);
    return Java.use("java.lang.Class").getName.apply(objClass);
}
function getNetPack() {
    Java.perform(function(){
      var jString = Java.use("java.lang.String");
      var jHttpMessage = Java.use("org.apache.http.HttpMessage");
      var JniHandler = Java.use("com.facebook.proxygen.JniHandler");
      var jBasicHeader = Java.use("org.apache.http.message.BasicHeader");
      JniHandler.sendRequestWithBodyAndEom.overload('org.apache.http.client.methods.HttpUriRequest', '[B', 'int', 'int').implementation = function(jHttpUriRequest,bArr,i,i2){
            console.log("\n-------------------------Headers-------------------------\n");
            console.log(jhttpUriRequest.getURI() + "\n");
            var headers = Java.cast(jhttpUriRequest, jHttpMessage).getAllHeaders();
            for(var i = 0; i < headers.length; i++) {
                if (getClassName(headers) === "org.apache.http.message.BasicHeader") {
                  console.log(Java.cast(headers, jBasicHeader).toString());
                } else {
                  console.log(headers.toString());
                }
            }
            console.log("\n" + jString.$new(bArr) + "\n");
            return this.sendRequestWithBodyAndEom(jHttpUriRequest,bArr,i,i2);
      }
    })
}
setImmediate(function(){
    setTimeout(getNetPack,10);
})

```






***你以为就这样完了?***

**没错,就这样完了。response暂时没找到简单的办法去Hook,先咕咕咕了**

## 题外话
看了看`enc_password`的加密,看起来是`RSA+AES-GCM`,满心欢喜。

仔细一看native层调用,动态加载so… dump出来一看是vmp,mmp…

ancientry 发表于 2021-4-26 08:59

Poorwood 发表于 2023-1-13 18:33

要是只是单纯的想要图片的话,推荐走web{:1_918:} 爬虫更方便抓数据。如果是挑战apk的话,那就当我没说了哈

summer398 发表于 2021-4-25 22:45

哈哈。精髓。厉害厉害

不苦小和尚 发表于 2021-4-25 22:48

学习了,以前一直没用过GDA,下次试试

超人强 发表于 2021-4-25 22:53

burpsuite能抓吗?

wangxd 发表于 2021-4-25 23:40

精髓。厉害厉害

zecore 发表于 2021-4-26 00:01

厉害了,学习

不一般 发表于 2021-4-26 00:11

大牛厉害{:1_893:}

夜泉 发表于 2021-4-26 00:52

最后我看笑了,,,哈哈,,卖麻批~~

{:301_978:}

xixicoco 发表于 2021-4-26 02:06

支持啊,大佬就是牛逼

china08 发表于 2021-4-26 05:38

思路清晰
页: [1] 2 3 4 5
查看完整版本: 利用Hook技术实现对Instagram的抓包