微信在pack之后又封装了一层,尝试跟踪,在tencent.mm:push进程下,java端最后断在一个req2buf函数中,但是这个函数是由so调用的,能力有限,还没调到具体调用的地方。所以试试看转战PC端。

使用微信版本2.6.4.56

首先发现这个报文是和手机端就不一样,当手机向PC发送消息时,是先发送一个不知名报文,然后PC端返回一段比较长的报文,然后才会收到真实数据报文。

通过内存断点,目前发现PC端返回的断点可能是用来给真实收到的报文解密的。

具体调试方式如下:

直接在ws2_32.dll中查找recv函数,下函数断点。因为微信是tcp的,应该不是udp,

下内存断点,查看访问数据段的地方。(这里内存断点下在靠后的部分,前面部分是一些标示位,可能进不了加密段)

而后进入一个函数,偏移为100215A0,这里修改函数备注为procecv26

共有5个参数,分析可知第一个是收到的报文,第二个是解码后的报文,第三个作为功能标示位,让函数进入不同的功能块。第四和第五个参数用来生成秘钥,用于后续加密。

调试发现第三个标识位功能大概如下:

1:处理收到的第一条通知报文吧,每次手机发消息给pc,都会现有一条很短的消息收到,处理完之后才能收到真正的消息内容。

16:解密收到的报文实际内容(17也可以这里,猜测不是单纯的判断是哪个数字,而是位操作判断进入哪个流程,这里没细看)

5:加密要发送的数据吧应该是

调试发现,该算法对称加密,加解密进入同一个流程。但是加解密跳转的地方不一样,加密待发送数据在676处

继续往上跟,进入偏移10B91740模块函数,但是这里IDA无法分析这个函数。直接从汇编层看,最终调用部分如下:

主要加密参数就是这个ebx和 esp+28h所存储。

通过ollydbg跟一遍,了解下当前代码跳转过程:分别在1790、1833、18B5发生跳转。而后算出这两个参数的由哪里得到:

ebx: 函数的第一个入参

esp+28h:函数的第一个入参+偏移0x174得到.

这里发现微信从汇编层面来看,会根据不同的cpu进入不同加密模块,应该是编译器子集优化的吧。

上述的函数如果看xmm指令较吃力的话,可以再看看偏移10026800处的一个函数,这个是在比较老的cpu上处理的解密函数,没有xmm相关模块。

通过写了一个hook dll,可以输出上述函数的所有入参和出参

这里没找到密钥生成的地方暂时。而后考虑在微信android端的pack函数在哪儿。首先查找其中标准openssl的类库,发现是ssleay32.dll。但是从中找到aes相关的函数,下断点之后,发现不管哪个函数都没有断下来,猜测腾讯可能使用了自己写的方式实现aes加密。

使用peid的kanal的插件查看,发现其中有aes加密,如图:

在dll的偏移9797b1处下断点,可以看到在接受消息时断下来了。而后往上找,找到加密部分的代码,

97B830:其中第一个入参是加密原文,返回时第二个是加密后密文。

这里发现,当发送数据较少时,直接发送原文,发送数据较多时,会先经过一步zlib压缩,一步步通过调用堆栈网上找,找到压缩部分代码:

9764E1:当前ecx带入待压缩数据,ebp-3c的地址,保存压缩后的数据。

加密环节到此走完:

9774E1偏移的函数当数据过长时压缩数据

97B830偏移的函数进行aes加密

215A0二次加密的函数进行加密 这里就得到最终发送的组包了

反之解密流程也是先外层解密,而后aes解密,然后zlib解压缩。这里解压的时候看到了789c开头的压缩块,判断是通过zlib方式解压的,不过这里也没有写代码验证。各个函数偏移也通过逆向跟踪全部得到:

第一个外层解密函数,和外层加密函数在一起,只是根据第三个参数进入不同的分支,没有细看了就。

通常加密部分代码也离解密部分不远,通过尝试,在找到的加密函数附近的函数下断点,找到了解密函数。

解压函数是通过对aes解密后的数据块下内存访问断点,以下就进入了解压模块,但是这里太里层,跳出这个大循环就找到了解压函数。

215A0外层解密函数

97B9D0内层aes解密函数,

7895D0 zlib的解压函数,其中入参中栈顶携带解压前数据,第二个参数携带解压前数据大小,ecx寄存器保存解压后地址,解压后的数据080012xx开头,其中xx代表长度,从当前位置算起。

通过编写dll注入工具,输出流程中所有的输入和输出。

代码等写完传上来。。分析过程中微信升级了。。。不过调试方式还是能用的,但是如果函数偏移的话必须得我上面指定的版本号了。

在现有基础上,hook的代码可以随意添加了,实现自己想要的功能,什么聊天记录保存的应该很容易了。还有一些特殊癖好的人特殊需求也可以实现了。

pc工具不支持stb的加密方式_微信协议分析 pc端记录实现不死号相关推荐

  1. pc工具不支持stb的加密方式_如何选择加密狗?九大标准

    精锐5加密锁是深思数盾最新一代高性能智能卡加密锁.下面我们一起来了解一下精锐5加密锁的是如何能满足加密需求的. 1.1 全方位安全保障 l CCEAL5+安全芯片 精锐5加密锁采用进口的32位ARM内 ...

  2. pc工具不支持stb的加密方式_那些工作中常用的实用工具

    DESIGN 古人云:工欲善其事,必先利其器.俗话说:巧妇难为无米之炊.两句话都讲的是,做专业的事,要有专业的工具,保证品质的同时呢,又能提高生产效率.作为一名设计师,同样需要专业的工具输出我们的产品 ...

  3. 微信协议分析 pc端记录

    android端的之前参考如下帖子: https://blog.csdn.net/yy405145590/article/details/79963999 但是这个帖子出来之后,微信在pack之后又封 ...

  4. linuxos或sv独立客户端不支持应用程序打开方式_搞不明白为什么大家都在学习 k8s

    作者 | 小明菜市场 来源 | 小明菜市场(ID:fileGeek) 头图 | CSDN 下载自东方IC 前言 都2020年了,你还不知道kubernetes就真的真的真的out啦.(贩卖焦虑体) 什 ...

  5. 【PC工具】HiPC手机远程控制电脑软件,微信小程序远程控制电脑

    今天分享软件叫HiPC,可以实现用手机远程控制电脑设备的软件,手机端使用微信小程序控制.如果不小心将办公文件忘在家里电脑上了,可以用这个软件解决.办公室电脑如果可以不关的话,在家里也可以找办公室电脑的 ...

  6. mysql 传输加密方式_请问各位大侠,要实现MYSQL加密传输,应该怎么做?

    MYSQL加密传输应该怎么实现,有如下的操作步骤: To get secure connections to work with MySQL, you must do the following: I ...

  7. 楚留香手游卡在获取服务器信息,楚留香手游PC版一直在检验本地资源怎么办_楚留香手游PC版检查100%不动解决办法_玩游戏网...

    <楚留香>手游被通缉解除方法 在<楚留香>手游中,很多玩家会因为一些原因被通缉,这是很正常的事情,只要知道如何解除通缉就好,当然这个对于很多玩家来说是不清楚的,下面就让玩游网小 ...

  8. python hook pc微信_微信机器人之PC微信hook

    微信机器人的实现有三种:web,app和exe.其中web很多账号受限登录不了,而hook app的话需要使用xposed则会封号,所以现在大部分机器人都是基于PC微信. 先实现一下最基本的机器人的功 ...

  9. postgresql加密方式

    postgresql加密方式 password_encryption是动态参数,修改配置参数不需要重启服务,可动态加载 方式1.md5 1.存储方式:md5('用户名+密码') 2.在版本14之前,默 ...

  10. 怎么修改mysql的加密方式_Mysql修改加密方式

    转载. Mysql 安装完客户端连接报错:"Authentication plugin 'caching_sha2_password' cannot be loaded: " 意思 ...

最新文章

  1. IT项目管理入门知识
  2. 图像的色彩类别,灰度化,二值化
  3. 模式匹配 怎么匹配减号_如何使您的应用导航与用户的思维模式匹配
  4. 建立能持续处理请求的Server端改造
  5. sde用户下使用sqlplus登录错误ORA-12547: TNS:lost contact
  6. python 反射机制
  7. 北航数值分析大作业_嫦娥5号在月球取土,有清华人的贡献吗?哪些学校贡献比较大?...
  8. 大规模搜索+预训练,百度是如何落地的?
  9. pdf-lib给pdf添加水印并预览、下载、打印
  10. php中strtotime函数,PHP中strtotime函数用法举例
  11. KVM虚拟化技术实践
  12. html chm用浏览器打开方式,如何在网页中打开chm格式的文件
  13. python绘制国际象棋规则口诀_国际象棋口诀
  14. 2021.1.19上海冬令营day2
  15. 论文阅读 Learning Motion in Feature Space: Locally-Consistent Deformable Convolution Networks
  16. 计算机C语言好学吗?要是想自学应该怎么办?大学挂科赶紧恶补!
  17. 整体看看Android的多媒体系统(多图)
  18. LeetCode - Solved Algorithms
  19. 迭代阈值图像分割matlab,Matlab 图像分割 (阈值处理)
  20. Android集成微信支付SDK,实现支付功能

热门文章

  1. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
  2. IDEA(2018)导入项目报错解决方案
  3. Java数据类型分类 1
  4. IOS VFL语言(页面布局)
  5. C++中析构函数的作用,
  6. word中的总页数不包括封面、目录
  7. echarts常用术语
  8. 【NOIP2018】龙虎斗
  9. Java中集合List,Map和Set的差别
  10. System V 共享内存区