前言:
微信公众号上文章很不错,但是有的文章敏感文章会被删除,有的时候没赶上,就很难受,所以想爬公众号的文章。
正文:
最开始是想通过找call,调用微信的call去获取历史文章的,但是经过各种分析,始终无法找到,经过百度,谷歌得知,发送的请求可以被抓到,比如这篇文章抓包分析公众号,得知,我们想要获取公众号的历史文章需要一个关键参数key,他们全部都是抓包更新,这十分不方便,开始对key的分析.
通过点击公众号这个位置
点击后去看微信的日志,
在日志中,看到大量a8key字样的东西,后面跟着的就是微信返回的带key的链接,开始猜测,key是否就是a8key,(有我群里朋友就跟我说key就是a8ey,我开始去验证,找 了分微信的安卓协议,获取a8key发现确实可用,得出结论,key就是a8key).
在各种日志的地方下断,最终在这里断下
按照我微信逆向的经验,一般调用都是调用的日志往回返回两层的地方,回溯找到。
为什么是这个call呢,主要是这个call简单,只需要url和一个缓冲区即可调用,所以我决定调用这里。这里只有mov ecx,edi,我不知道edi是个什么东西,随意需要追edi在哪个初始化的
我尝试过edi传空的缓冲区,发现不行,所以必须得知道edi在哪里初始化的,找到函数头,发现mov edi,ecx,所以继续往上层找,
ecx来自esi
看到下面都是使用edi,在这个函数分析得知edi来自图中初始化edi的函数的返回值,确定了edi
开始写代码尝试调用,最开始是直接崩溃的后面分析崩溃原因
我自己写的代码调用会在这个地方崩溃,
观察发现这里面就是一个经典的微信里的结构体,而且这个结构体在上面说到初始化edi的里面并没有赋值,最开始我想寻找给这里赋值的地方,但是找到后发现比较复杂,就么有这么做,尝试在执行自己代码初始化完edi的时候,手动创建这样的结构体,最终调用成功。
从始至终,我都没在od里提到我们重要的key在哪,其实我也不知道key在这个线程的哪,我知道key,是在解析pb(protobuf)的线程看到了返回值,
我是通过找 "NetSceneGetA8Key Success srcurl:http://mp.weixin.qq.com/mp/getmassse。。。。。" 字符串找到的,我最开始分析其实并没有那么顺利,虽然我知道call因该就是上面那个,但是我始终看不到返回值(key),所以才想到从这个日志 的地方往回追,看看到底这个带key的链接是拿来的,
不断回溯找到 [[[[0x6BA6FF04]+0x4]]+0x14]+0x154 链接会被写入到这个地方,但是,并不是一直指向这个的,在没有获取key的时候,是没有指向这里的,通过下内存写入断,找到了写入的地方,最终确定合适的位置
微信服务器返回的protobuf数据写入到edi,函数执行完
很明显的结构体,凭借经验,第一个红框指向的内容是protobuf数据,第二个红框就是长度,复制这些478的数据出来放入pb解析工具
看到 了原始 的链接和服务器返回的带key的链接。
至此,分析结束。
调用的代码: 微信版本是3.3.0.104
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
|
虽然我获取到了key,但是还有个问题就是,我调用的代码没有崩溃,我注入的dll也没有崩溃,完好退出的,但是在拦截到服务器返回的protobuf数据的地方放开后,微信自动退出了,没有崩溃,我不知道原因,所以希望有兴趣的的大佬可以跟我一起交流,为什么我调用明明都已经成功了,服务器返回的pb数据也看到了为什么微信退出了,我觉得我能力有限,暂时无法解决这个问题,真心希望有懂的大佬可以指点一二,很不甘心。