吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7247|回复: 7
收起左侧

[游戏安全] 2.17z之网游逆向分析之从0开始找明文call的二次在探,纠正思路

[复制链接]
tyl1988 发表于 2020-2-17 14:09
2020年2月17 某网游明文包二次探索


这个是2.14的明文包过程,想弄明白这边文章,建议还是去看下



这是我前天发表的文章,然后昨天夜里想再次看下这个明文包的逆向,发现这个帖子里的方法存在一定的随机性
:funk:eweqw {:1_900:}


也就是我再次用这个方法去找的话,不是每一次都能找到,所以说我找的时候有可能存在巧合的情况下找到了
而且是堆栈窗口找了很多返回地址才发现的,所以我们必须弄明白,到底是怎么回事

然后我再次研究了一下,首先我们来看一下这个游戏的发包流程

未标题-1.jpg


我大概理解的这个游戏发包的过程大概就应该是这样
至于收包,我不想研究了{:1_886:}

至于加密完成后写入另外一个地址是一直朝后写
比如说给了以个1000K的空间

然后写完了就从头再来,用类似于一种“标识”来分段数据。

那么我们的突破点就是“加密完成”之后向另外一个地址写入加密数据的时候


下面看正文

首先 bp ws2_32.send

1.png


可以看到发包date地址

那么数据窗口跟随这个date地址
2.png

观察包发现包在地址+4的位置不断变动但是地址不变
直接在地址+4的位置下硬件写入断点

来到下面这个图


3.png

这点就印证了我第一个流程图的思想,就是数据是从esi写道edx里的,那么这个esi什么套路呢,继续看看数据窗口跟随

4.png

这里红色的字节就是被改变的值,而且每次都是朝下改变,也就是我上面说的给了一个比如1000K的空间写入
然后用“标识”来识别

那么怎么判断写入了多少呢,这里又两个方法
一个随机点,一个可以固定,但是麻烦点
随机的就是,既然我们知道了一直朝下写数据,那么观察两次这个地址,然后相减,我这里得到的是大概0x66字节每次写入
第二个就是比如你发送打坐call,我在第一篇文章写过,就是组成0d个字节的包,然后每3个字节加密成4个字节
就是16个字节,然后加上28是头,29 00是尾,那么就是19个字节,然后在加上系统的固定给的“标识”能算出每次写入的数据大小
我这里就随机点,大差不差


由于这里断线了,所以地址可能不一样了,不管他,上游戏继续,在第一个得到的地址+66写入硬件写入断点,我这里多加了5个字节,因为是大概算的

好的,断在这里了(这里可能是因为刚上游戏的原因,这里朝下继续写都是00 也就代表第一次还没写完系统分配的空间,如果完了一会在回来看,这里就没有00 是重复写入)

那么看右边红框框里的堆栈图
第一个返回到反汇编看,然后在头部下断点,返回发现不对,经验证继续返回是已经实现功能,不是我们要的
那么继续在堆栈第二个地址反汇编的头部下断
5.jpg

到这里了。下一个f2断点
然后出现了一个现象就是会自动断下,而且和心跳包的频率差不多,我们有空间在游戏里面操作
继续打坐断下了
6.png

然后返回了大概3次,发现了这儿,是不是很像组包,不用怀疑,就是功能组包地址,也就是我们要找的明文call
其实到了上图的时候,我们就已经可以从寄存器窗口找到刚加完密的临时地址了,而且是不变的

7.png

在这个组包过程下断,可以很直观的看到明文数据了
8.png


到此就结束了,经过验证,保证每次都能返回到call 004efeb0这个功能组包call位置,而且都是在堆栈的第二个返回地址
大功告成,收工。


免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaohui888 发表于 2020-2-17 16:15
看了2遍,没看出标识在哪里得出来的
 楼主| tyl1988 发表于 2020-2-17 16:36
xiaohui888 发表于 2020-2-17 16:15
看了2遍,没看出标识在哪里得出来的

这里变我没研究标识,标识和我这个找明文call没有关系,是在线程里的,我值是从加密数据里面返回的,他的数据包形态是加密的比如是aaaaaaa 然后在传送给线程之后是aaaaaa+bbbbbbb我这里只是从aaaaaaa里找,你可以看上篇文章,里面写了如何加密,但是加标识的我没研究,因为28开头和29结尾就是()两个括号,括号里是加密数据,括号后面才是标识,标识是进入线程再次加上的
头像被屏蔽
hanxiao129 发表于 2020-2-17 17:16
yxdyxd163 发表于 2020-2-17 20:18
支持楼主,好厉害
Linshengqiang 发表于 2020-2-18 07:18
这么多代码,新人看不懂看来要从0开始了
Dyingchen 发表于 2020-5-5 03:09
最近也在研究这方面,有点头痛,楼主可否加个企鹅号一起探讨一下?

我遇到的大致问题是调用WSASend的时候只push了一个参数eax,WSASend的函数原型显然不止一个参数,这就导致无法确定参数来源,通过堆栈结构里面的参数找到发包的buf区域之后回溯到io流的一个ios::defbuf的函数,在这里无论怎么下断点都是秒断,就没法回溯了,暂时没有思路
 楼主| tyl1988 发表于 2020-5-27 14:18
Dyingchen 发表于 2020-5-5 03:09
最近也在研究这方面,有点头痛,楼主可否加个企鹅号一起探讨一下?

我遇到的大致问题是调用WSASend的时 ...

那这个push的参数是变动的还是固定的,push参数并不一定是在一起的,可以追一下参数生成的地方
Dyingchen 发表于 2020-5-27 21:40
tyl1988 发表于 2020-5-27 14:18
那这个push的参数是变动的还是固定的,push参数并不一定是在一起的,可以追一下参数生成的地方

从汇编上难以分析,不过我观察栈结构可以找到参数来源,就是这个游戏太乱太杂,分析了半个月没什么头绪
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 12:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表