网络游戏逆向分析-3-通过发包函数找功能call

网络游戏和单机游戏的分析有相似点,但是区别还是很大的。

网络游戏和单机游戏的区别:

网络游戏是需要和服务器进行交互的,网游中的所有功能几乎都会先发送封包数据到服务器,然后有服务器做出判断后反馈给客户端,客户端才会产生对应的相关功能。

找功能call的办法:

由于网游和单机游戏的区别,所以在网络游戏中要寻找功能call可以通过在发包函数处下断点来回溯找功能call。

相当于服务器是一个皇帝,客户端每想干什么事情前都得先给服务器进行交互,直到服务器同意才行。

大概是以下这个逻辑:

那么通过发包函数往上找,就可以找到可能是真实的吃药函数,当然也可能是吃药函数到发包函数的中间过程,但是没有关系能调用就好。

发包函数:

Windows的socket发包函数总共有三个:

//ws2_32.send
int WSAAPI send(
SOCKET     s,
const char *buf,
int       len,
int       flags
);
int WSAAPI WSASend(
SOCKET                             s,
LPWSABUF                           lpBuffers,
DWORD                             dwBufferCount,
LPDWORD                           lpNumberOfBytesSent,
DWORD                             dwFlags,
LPWSAOVERLAPPED                   lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
int WSAAPI sendto(
SOCKET         s,
const char     *buf,
int           len,
int           flags,
const sockaddr *to,
int           tolen
);

寻找喊话的功能call

首先查找发包函数,然后给发包函数打断点后再喊话,来查看是调用的哪一个发包函数。

这里通过查找后,发现只有send是可以断下来的,WSASend和sendto都没有用。

但是这里的send和我们想的不一样:

它打上断点后一直就卡这里,还没有喊话就断在这里了。

这里就需要引入一个新的内容:心跳包。

心跳包:

心跳包顾名思义,字面意思是按照心跳来发包,实际意思就是每时每刻都给服务器发个包,借此服务器可以用来检测,比如你是否还在线,是否掉线了,或者你有没有干别的坏事之类的,时刻让客户端和服务器保持联系。

心跳包的特点:心跳包只需要有特定的验证字符就好了,不需要发一堆东西来浪费资源,所以心跳包的长度len一般都比较小,而且长度是固定的。

还好这里心跳包频率不快,还是会隔一会才心跳的,还是可以按照之前的逻辑来找函数call。

假设:A调用B,B调用C,C调用发包函数,那么发包函数执行到函数返回再往上一条的call指令就是call的发包函数,然后再在调用发包函数这里使用执行到函数返回再往上一个指令就是call调用C函数,这样一直往上找六到七个函数来先分析一下看看

这里采用xdbg的办法来给每个函数上注释,通过找到发包函数,然后运行到函数返回回到上一层,然后这样来实现往上找函数。

通过xdbg的视图->注释可以查看到自己添加的注释的位置,以此来方便查看。

通过从send 到1然后到8从下往上给函数打断点,打完断点后人物再喊话来找到函数的call函数。(可以在注释这个窗口打断点)

打完断点后还得测试,测试是否是只有喊话的时候才会停下来,否则就不能用,这里我是在对应注释3这个函数找到的唯一可以在喊话后断下来的函数。

找到喊话功能call函数后进行分析

前面我们找到了喊话的函数,现在对其进行分析,一个函数必不可少的有,返回类型,函数参数的结构。返回类型不太好说明,但是函数参数可以先考虑,首先分析函数参数:

进入这个函数查看,最后有一个ret10,而且前面也给开辟的堆栈平衡了,说明函数的参数栈空间有十六位数的 10个,就是十位数的16,在看该函数前面有四个push,说明就是有四个参数了。

分析这四个参数来解剖该函数:

首先这里有4个push和一个mov ecx,eax。前面在学习反汇编C++的时候就得注意这个ecx,ecx很有可能是类里面的this指针,所以这次给第一个push edx打断点然后一直分析到调用函数:

edx == 00000000
ebx == 00000000
ecx == 字符串的首地址
edx == 6A1E8600
ecx == 2334FD68
//前面的edx ebx ecx edx都是入栈,ecx应该是一个对象的值把,这里猜测一下。
//然后再多调用几次看看有啥变化
//结论是不管多少次都只有ecx == 字符串首地址这个值做了变化

这里先利用代码注入器试一下:

注意:这里需要在一个空白的地方先放置字符串的数据,因为一会要用到字符串的首地址:

但是跟我们输入的字符串不一样,很有可能是编码的问题,这里改成unicode试试:

这样就ok了。

但是这个同样也只能临时用一下,所以还得往上找基址。

需要找的只有edx和ecx,因为别的都是0,或者是内存里的字符串,还有一个就是call的地址是一个静态地址也不用找。

就用前面的教程继续找edx和ecx的基址:https://www.cnblogs.com/Sna1lGo/p/14897870.html

网络游戏逆向分析-3-通过发包函数找功能call的更多相关文章

  1. 网络游戏逆向分析-6-使用背包物品call

    网络游戏逆向分析-6-使用背包物品call 首先,大家在处理网络游戏的时候,一定得利用好发包函数,因为他就是整个网络游戏的关键. 处理办法: 这里还是直接给发包打断点来处理. 就像我们之前处理喊话函数 ...

  2. 网络游戏逆向分析-4-分析喊话call参数来源

    网络游戏逆向分析-4-分析喊话call参数来源 好久没更新了,去实习去了,大家见谅一下. 前面找到了喊话功能call函数,然后分析了它的参数有五个,分别的四个push的和一个ecx: 第一次edx = ...

  3. 《C++反汇编与逆向分析技术揭秘》——函数的工作原理

    各种调用方式的考察 示例: cdecl方式是调用者清空堆栈: 如果执行的是fastcall: 借助两个寄存器传递参数: 参数1和2借助局部变量来存储: 返回值 如果返回值是结构体: 返回值存放在eax ...

  4. 《C++反汇编与逆向分析技术揭秘》--认识启动函数,找到用户入口

    <C++反汇编与逆向分析>和<程序员的自我修养>都是以VC6的代码作为例子讲解的.这里是在vs2017下,CRT代码有些区别,但整体流程上都是初始化环境,设置参数,最后转到用户 ...

  5. Android逆向分析(2) APK的打包与安装背后的故事

    前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...

  6. SG Input 软件安全分析之逆向分析

    前言 通过本文介绍怎么对一个 windows 程序进行安全分析.分析的软件版本为 2018-10-9 , 所有相关文件的链接 链接:https://pan.baidu.com/s/1l6BuuL-HP ...

  7. Android逆向分析(2) APK的打包与安装

    http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...

  8. 【C++】从零开始的CS:GO逆向分析3——写出一个透视

    [C++]从零开始的CS:GO逆向分析3--写出一个透视 本篇内容包括: 1. 透视实现的方法介绍 2. 通过进程名获取进程id和进程句柄 3. 通过进程id获取进程中的模块信息(模块大小,模块地址, ...

  9. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

随机推荐

  1. 全套AutoCAD版本安装教程及下载地址

    1:AutoCAD 2004 安装教程及下载地址 https://mp.weixin.qq.com/s/4So2zmJ6nWu6Z3bSo3W19Q 2:AutoCAD 2005 安装教程及下载地址 ...

  2. springboot开发浅谈 2021/05/11

    学习了这么久,本人希望有时间能分享一下,这才写下这篇浅谈,谈谈软件,散散心情. 这是本人的博客园账号,欢迎关注,一起学习. 一开始学习springboot,看了好多网站,搜了好多课程.零零落落学了一些 ...

  3. IIS部署.Net5全流程

    介绍 Internet Information Services (IIS) 是一种灵活.安全且可管理的 Web 服务器,用于托管 Web 应用(包括 ASP.NET Core).虽然我们的程序可以跨 ...

  4. 事后分析$\beta$

    项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 事后分析 我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个具体方面帮助我们实现目标 组织组员 ...

  5. PSP初体验:求交点

    项目 内容 课程:北航2020春软件工程 博客园班级博客 作业:完成一个平面图形求交点的程序,体验PSP的过程 个人项目作业 我在这个课程的目标是 体验软件开发的全流程 这个作业在哪个具体方面帮助我实 ...

  6. synchronized运行原理以及优化

    线程安全问题 线程不安全: 当多线程并发访问临界资源时(可共享的对象),如果破坏原子操作,可能会造成数据不一致. 临界资源:共享资源(同一对象),一次仅允许一个线程使用,才可以保证其正确性. 原子操作 ...

  7. 要求用户输入若干员工信息,格式为: name,age,gender,salary,hiredate

    package day06; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util. ...

  8. 使用CSS设置边框和背景

    一.设置边框 1.边框样式 属性 说明 border-width 设置边框的宽度 boder-style 设置边框的样式 border-color 设置边框的颜色 a.border-width属性 自 ...

  9. python文件对象几种操作模式区别——文件操作方法详解

    文件对象的字节模式/b模式(以utf-8编码为例) 读操作 写操作 指针操作 ASCII字节 返回bytes/字节类型的Ascii 写入bytes类型字节 例如:b'This is ascii' 使用 ...

  10. CentOS Linux搭建独立SVN Server全套流程(修改svn仓库地址、服务启动等)

    CentOS Linux搭建独立SVN Server全套流程(修改svn仓库地址.服务启动等) 原 一事能狂便少年 发布于 2016/12/27 11:16 字数 1113 阅读 1.3K  收藏 0 ...