首页
论坛
课程
招聘
[原创]PC 微信公众号文章key(即a8key的分析)
2021-7-19 21:36 2873

[原创]PC 微信公众号文章key(即a8key的分析)

2021-7-19 21:36
2873

前言:

        微信公众号上文章很不错,但是有的文章敏感文章会被删除,有的时候没赶上,就很难受,所以想爬公众号的文章。



正文:

        最开始是想通过找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


    char buf_1[0x30] = { 0 };
    wchar_t url[0x200] = L"http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MzkyMjE1NzQ2MA==#wechat_webview_type=1&wechat_redirect";

    std::wstring str = L"http://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MzkyMjE1NzQ2MA==#wechat_webview_type=1&wechat_redirect";
    WxString* wxid = new WxString();
    wxid->pstr = (wchar_t *)str.c_str();
    wxid->len = str.size();
    wxid->maxLen = str.size() * 2;

    struct URL
    {
        char Zero[0x4c0] = { 0 };
        WxString url;
    };
    URL inner;
    inner.url.pstr = (wchar_t*)str.c_str();
    inner.url.len = str.size();
    inner.url.maxLen = str.size() * 2;


    //69AD0000
    DWORD call_add_1 = getWeChatwinADD() + (0x6AD7587E - 0x69AD0000);
    DWORD call_add_2 = getWeChatwinADD() + (0x6A5B02C0 - 0x69AD0000);
    DWORD cadd_add_3 = getWeChatwinADD() + (0x6A09CE90-0x69AD0000);
    DWORD cadd_add_4 = getWeChatwinADD() + 0xAE7290;//6A777290           69C90000

    __asm {
        push 0x928  
        call call_add_1
        add esp, 0x4
        push esi
        push esi
        push esi
        push esi
        mov ecx, eax
        call call_add_2
        mov edi,eax                //初始化edi  应该是对应的浏览器的句柄

        lea eax, [edi + 0x718]
        lea edx, inner
        mov[eax], edx


        sub esp, 0x14
        mov ecx, esp
        push - 0x1
        mov dword ptr ds : [ecx] , 0x0
        mov dword ptr ds : [ecx + 0x4] , 0x0
        mov dword ptr ds : [ecx + 0x8] , 0x0
        mov dword ptr ds : [ecx + 0xC] , 0x0
        mov dword ptr ds : [ecx + 0x10] , 0x0
        lea eax, buf_1
        push eax
        call cadd_add_3

        push ecx
        push 0x0
        sub esp, 0x14
        mov ecx, esp
        push - 0x1
        mov dword ptr ds : [ecx] , 0x0
        mov dword ptr ds : [ecx + 0x4] , 0x0
        mov dword ptr ds : [ecx + 0x8] , 0x0
        mov dword ptr ds : [ecx + 0xC] , 0x0
        mov dword ptr ds : [ecx + 0x10] , 0x0
        lea eax , url
        push eax
        call cadd_add_3
 
        mov ecx, edi
        call cadd_add_4
    }
}

虽然我获取到了key,但是还有个问题就是,我调用的代码没有崩溃,我注入的dll也没有崩溃,完好退出的,但是在拦截到服务器返回的protobuf数据的地方放开后,微信自动退出了,没有崩溃,我不知道原因,所以希望有兴趣的的大佬可以跟我一起交流,为什么我调用明明都已经成功了,服务器返回的pb数据也看到了为什么微信退出了,我觉得我能力有限,暂时无法解决这个问题,真心希望有懂的大佬可以指点一二,很不甘心。


        


        有兴趣的大佬可以加我的qq群:933517692 跟我一起讨论,我提供免费的微信助手


[注意]中秋好礼,诚意满满——你提意见,我送月饼!!

最后于 2021-7-19 21:54 被zhuzhu_biu编辑 ,原因: 添加
收藏
点赞3
打赏
分享
最新回复 (4)
雪    币: 186
活跃值: 活跃值 (279)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
zzg令狐 活跃值 2021-7-20 18:55
2
0
protobuf用的啥工具解析的呀,看着挺好用啊,能发个链接嘛
雪    币: 240
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
zhuzhu_biu 活跃值 2021-7-21 10:54
3
0
zzg令狐 protobuf用的啥工具解析的呀,看着挺好用啊,能发个链接嘛
PB-JCE解析工具
雪    币: 186
活跃值: 活跃值 (279)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
zzg令狐 活跃值 2021-7-21 18:35
4
0
zhuzhu_biu PB-JCE解析工具
这个找了一堆,全报病毒,咋回事呢
雪    币: 240
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
zhuzhu_biu 活跃值 2021-7-23 09:00
5
0
zzg令狐 这个找了一堆,全报病毒,咋回事呢
你可以加我的群,我给你发一个我的,我的也是别人分享给我的
游客
登录 | 注册 方可回帖
返回