内容参考于:易道云信息技术研究院VIP课
上一个内容:项目需求与需求拆解
通过上一个内容有了对网络通信架构有一个简单认识了解,对于我们重要的点是 组织数据 到 加密数据之间的过程,这个过程的数据我们是可以看懂的,加密之后的数据我们就看不懂了
通过聊天系统来下手,聊天系统可以指定内容,也就是明文的内容是可以指定的
然后数据包里除了要发送的明文以外还有几个重要的东西:
发送数据的内容里会有数据包的地址,然后不可能把这个地址后面的数据全部发送
所以有两点第一点有一个指针并且指向数据包,第二点有一个是数据包的长度,指针和长度是成对出现的
首先来到WSASend函数打断点,然后在游戏聊天框里发送一个消息,让它断下来
然后ctrl + f9再按f8,来到了下图位置,很明显这里不是我们要找的
然后ctrl + f9再按f8,然后来到下图位置,然后按f9,这时要确保所有的断点都取消,然后在下图打了断点的位置打断点,然后再次在游戏中的聊天框发送一个消息,看看它的栈有没有我们的消息
很明显,它没有,然后把这里的断点取消掉
然后ctrl + f9再按f8,来到下图位置,这时还是确保除了下图位置的断点其余断点全部取消,
这时它的栈也还是没有我们的消息,然后把这里的断点取消掉
然后ctrl + f9再按f8,来到下图位置打断点,这时还是确保除了下图位置的断点,其余断点全部取消
然后在游戏中发送消息,触发断点,这时栈里还是没有明显的消息数据,但这时edx的值是一个指针,这个指针里的数据是我们的数据包了,所以我们现在所处的环节是组织完了数据,加密之前,但这并不是想要的,然后继续往上跟,看看还有没有更好的位置
然后ctrl + f9再按f8,来到下图位置打断点,确保其它断点全部取消
然后游戏中发送消息触发断点,这时可以在栈里看到我们的消息了,但是这个消息并不是现在断点处的函数里的
所以 ctrl + f9再按f8,来到下图位置打断点,确保其余断点全部取消
然后它还是一个组织完的数据
所以 ctrl + f9再按f8,这时只是返回没有触发断点,它都显示了我们的消息,可以直接定位了,它就是组织数据之前
然后游戏中触发断点,只看到了数据,但是并没看到数据从哪来
所以 ctrl + f9再按f8,来到下图位置,然后游戏发消息触发断点,这时确保其余断点全部取消
这里没有组织完的数据了,只有数据
所以下图位置是关键点
所以接下来只需要分析edi的是怎样来的,数据包里每个值都是什么意思就好了
然后现在有一个问题,就是上面的分析是一步一步通过分析栈里的明文数据详细去找,但是我们并不知道有多长的调用,如果调用很长的话,那会废很大的功夫,这时就有一个快捷的技巧,首先我们来做的话,肯定是写一个通用函数,这个通用函数是可以把参数进行加密和发送数据的,既然是参数那么它一定在栈里,如果 a =》 b =》c =》d =》e =》f =》Send,这样的调用逻辑,我们要的数据是从b开始通过参数传递的,这时有一个知识点,在Send函数执行完之前,b函数里的局部变量或者栈里的参数并不会释放,每个函数的栈都是紧挨着的,所以可以直接通过栈定位我们要找的函数,看下图
这时断到WSASend函数上
然后看它的栈,往下翻找到游戏中发送的聊天数据的第一次出现的位置
然后选择下图
这样就快速定位到了