仙侠网游学习笔记

本文是作者关于网络游戏逆向分析的学习笔记,主要包括使用OD和x32dbg工具进行内存修改、线程注入、找寻游戏功能函数入口,如打坐开始和结束的call地址,以及血量地址的定位。作者通过实例分享了如何找到关键函数并实现自动打坐,同时提到了HOOK技术和CRC的理解。
摘要由CSDN通过智能技术生成

part 1 复习

OD复习(了解了OD后转x32dbg更好用)

e:模块列表,可以看到调用的所有DLL
t:线程线列:可以看到运行的所有线程
k:堆栈列表:可以看到调用的所有call
b:断点列表:可以看到设置的所有断点
c:CPU窗口/代码窗口

入口:main/启动窗口创建完毕/子程序创建完毕
OD打开主程序入口如下:
00B755E2 >/$ 55 push ebp

按上面的e按钮后找到ELEMENTCLIENT.EXE条目如下:
Executable modules, 条目 32
基址=00400000
大小=00950000 (9764864.)
入口=00B755E2 ELEMENTC.
名称=ELEMENTC
路径=D:\kdxy\setup\口袋西游\element\ELEMENTCLIENT.EXE
我们打开ce附加进程后在00400000到00D50000范围内搜索,全是绿色地址

如果附加进程后运行不了
按上面的t按钮右击重启所有线程即可

按上面的c按钮可以回到主界面
ctrl+g再输入地址可以直接跳到目的地址
输入send可以直接定位到发包函数
如果send定位不到,则输入WS2_32.send再回车

找到没人的地方打断点,保持没有发包
吃药,发包中断,然后ctrl+F9就能跳到send函数最后一条指令
回车就能回到call send的下一条指令0x00666850

00666830   .  53            push ebx
00666831   .  56            push esi
00666832   .  8BF1          mov esi,ecx
00666834   .  57            push edi
00666835   .  6A 00         push 0x0                                 ; /Flags = 0
00666837   .  8B46 10       mov eax,dword ptr ds:[esi+0x10]          ; |
0066683A   .  8B48 04       mov ecx,dword ptr ds:[eax+0x4]           ; |
0066683D   .  8B50 08       mov edx,dword ptr ds:[eax+0x8]           ; |
00666840   .  8B46 04       mov eax,dword ptr ds:[esi+0x4]           ; |
00666843   .  8BD9          mov ebx,ecx                              ; |
00666845   .  2BD3          sub edx,ebx                              ; |
00666847   .  52            push edx                                 ; |DataSize = 856FDDC (139918812.)
00666848   .  51            push ecx                                 ; |Data = 0A29A465
00666849   .  50            push eax                                 ; |Socket = 0x3
0066684A   .  FF15 B868BE00 call dword ptr ds:[<&WS2_32.#send_19>]   ; \send
00666850   .  8BD8          mov ebx,eax

再次ctrl+f9跳到函数末,回车跳到上一层call的下一条指令,按错了可以用-键返回上一条指向的指令(无论是ctrl+f9按错还是enter按错都可以跳回刚指向的指令)
如此循环找到多重call,我们给第一,第二,第三……每重call都打断点,按上面的b按钮可以看所有断点
走路进入的断点撤销,吃药进入的断点就是要找的!只要是只有吃药才进入的断点都可以进行远程注入线程调用!观察前几行的push,用代码注入进行调试!

喊话call找法:同吃药call,就是把吃药换成喊话
快速寻找call:在send函数处断下,喊话,按上面的k按钮,可以分析出所有的call调用

在send函数头处中断,右下角双击栈地址,可以变成 − − > , -->, >+4,$+8这类的地址
观察到传进来的参数有四个:socket,data,datasize,flags,我们如果能分析出每一个参数的地址,就可以实现每一种call了!
在send函数头处的中断改成条件中断,如[ESP+0x0C]==0x0B,逐个值试!
走路断,不动断,点击断,攻击断,吃药断,都有不同的datasize,记下对应断的值即可

eax一般是call的返回值,小部分可能是用ecx
ecx一般用来存对象基地址(像新剑侠情缘中的独孤剑)
ebx与edx就是读写比较快,没什么特别

附加进程后结束调试:右击代码区-strongOD-detach
OD基本功:懂得f7与f8与f9来运行,ctrl+f9与enter与-来跳转,代码段int3与条件来中断,数据段内存(易被检测勿用)与硬件(断在访问内存数据的指令下一行)来中断,上面的按钮看不同窗口界面
汇编基本功:mov(传值)与lea(传址),push x(sub esp,4 + mov [esp],x)与pop x(mov x,[esp] + add esp,4),call x(push eip + jmp x)与retn(pop eip)与retn x(pop eip + add esp,x)

右击代码区,查找,用户定义的注释(即可看到所有代码注释)
右击代码区,查找,所有常量(即可看到所有用到绿址的代码)

在OD看到[ebp+2C]这种,要先判断ebp是本层函数栈底还是偏移!ebp与右下角的堆栈区拉到最靠栈顶的那个有显示返回的地址的那一行(call的push eip)的上一行(函数头push的ebp)相等就是顶底
右下角的堆栈区如果是新跳入的call,栈顶指令右边会是“call返回xxx”然后连同下面几行有个大括号括住传入的参数,之后本函数如果有push,则“call返回xx

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程主要以口袋西游为例,学习一个网络游戏是怎么通过游戏服务器与玩家客户端进行通信交互的,通过OD,CE等工具对游戏进行调试,找到各个数据基址(例如角色基址,背包基址等),找出游戏里面的功能CALL(例如寻路CALL,打坐CALL等)及参数分析,并且编码实现功能。本课程可以带领你游戏逆向入门可以学会 CE,OD,找游戏基址,功能CALL等实现变态功能可以更深入的理解从高级语言到汇编语言的一个对应过程可以学会 逆向软件  外挂与反外挂 破解防破解  游戏安全的基础知识可以为以后的及逆向高级课程 打下良好的基础可以自己分析游戏数据,用C语言实现游戏外挂功能等重点:  本套课程的重点就是带领大家分析游戏数据,毫不客气的说,各位学完此套课程对分析游戏数据这块会有一个质的飞跃。课程目录  01.课程简介及功能演示  02.CE找人物基址及人物属性偏移  03.OD找人物基址及人物属性偏移  04.创建MFC DLL项目  05.代码实现输出人物信息  06.发包函数概述  07.怎么看待重写的发包函数  08.普通发包与线程发包  09.找打坐CALL及参数分析  10.代码实现打坐CALL  11.喊话CALL及参数分析  12.代码实现喊话CALL  13.找寻路CALL及参数分析  14.代码编写寻路CALL  15.穿装备CALL及参数分析  16.代码实现穿装备CALL  17.NPC对话CALL  18.代码实现NPC对话CALL  19.唤出宠物  20.宠物合体  21.收回宠物  22.取下宠物
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值