游戏逆向基础之OD找CALL实践
在逆向中除了分析数据之外,另外一个重要的工作就是找算法,找CALL
例如各种功能函数:攻击CALL,走路CALL,喊话CALL等等
以及加密解密等算法需要我们先锁定其位置,然后进行逆向分析。
最常见方法一
API函数下断,例如send
下断以后做相应动作,会得到相应的调用关系及堆栈
//做换装备动作产生的堆栈
调用堆栈: 主线程
地址 堆栈 函数过程 调用来自 结构
0018EA0C 00686516 <jmp.&WS2_32.#19> ELEMENTC.00686511
0018EA80 0067ABE2 ? ELEMENTC.006863B0 ELEMENTC.0067ABDD
0018EA94 0067D58F ? ELEMENTC.0067ABA0 ELEMENTC.0067D58A
0018EAD0 006C6E55 ? ELEMENTC.0067D4E0 ELEMENTC.006C6E50//结构体CALL
0018EAE0 00684D1A ? ELEMENTC.006C6E20 ELEMENTC.00684D15
0018EAF8 00491DFF ELEMENTC.00684CF0 ELEMENTC.00491DFA
0018EB1C 00566737 ELEMENTC.00491C50 ELEMENTC.00566732
0018EB50 008E1B8E 包含ELEMENTC.00566737 ELEMENTC.008E1B8B
0018EB78 008E1A9B ELEMENTC.008E1AE0 ELEMENTC.008E1A96
0018EBA0 00903FBC ELEMENTC.008E1A70 ELEMENTC.00903FB7
0018EDD0 008EB9FD 包含ELEMENTC.00903FBC ELEMENTC.008EB9FA
0018EDE4 008DB977 可能 ELEMENTC.008EB9E0 ELEMENTC.008DB974
0018EE38 008EBF6E ELEMENTC.008DB460 ELEMENTC.008EBF69
0018EEBC 0093C252 ELEMENTC.008EBA00 ELEMENTC.0093C24D
0018F0E8 0062947A ELEMENTC.0093C210 ELEMENTC.00629475
堆栈是自上而下的调用关系
说通俗点就是,越上面的越是内层函数 ,越下面的越是外层函数。
这些调用或许都能实现功能,但是越上面的,由于很内层,往往绕过了多层判断,可能会功能更强大,而越下面的,由于处在调用的较外层,所有功能会更完整,这就需要根据自己的需求去分析选择,以及逐一实验哪个函数是自己所需要的。
例如上面堆栈
我们选择标准结构体参数的CALL到该地址分析
006C6E20 /$ 56 push esi
006C6E21 |. 6A 04 push 4
006C6E23 |. E8 A87A2A00 call 0096E8D0
006C6E28 |. 8BF0 mov esi, eax
006C6E2A |. 83C4 04 add esp, 4
006C6E2D |. 85F6 test esi, esi
006C6E2F |. 74 2D je short 006C6E5E
006C6E31 |. 8A4424 08 mov al, byte ptr [esp+8]
006C6E35 |. 8A4C24 0C mov cl, byte ptr [esp+C]
006C6E39 |. 66:C706 1100 mov word ptr [esi], 11
006C6E3E |. 8846 02 mov byte ptr [esi+2], al
006C6E41 |. 884E 03 mov byte ptr [esi+3], cl
006C6E44 |. 8B15 1CDFD000 mov edx, dword ptr [D0DF1C] ; ELEMENTC.00D11A50
006C6E4A |. 6A 04 push 4
006C6E4C |. 56 push esi ; 4 字节结构体
006C6E4D |. 8B4A 20 mov ecx, dword ptr [edx+20]
006C6E50 |. E8 8B66FBFF call 0067D4E0
006C6E55 |. 56 push esi
006C6E56 |. E8 857A2A00 call 0096E8E0
006C6E5B |. 83C4 04 add esp, 4
006C6E5E |> 5E pop esi
函数较为简单 可以直接省略为这么几句代码
mov edx,[00D0DF1C]
mov ecx,[edx+20]
push 4
push XXXX//结果体参数 申请地址写入参数
call 0067D4E0
用内联汇编编写即可调用成功
最常见方法二
相关参数下断
例如寻路CALL
CE 搜索寻路 目的地坐标 ,在搜索到的地址上直接下写入断。
调用堆栈: 主线程
地址 堆栈 函数过程 调用来自 结构
0018E9B8 0057E9D4 ELEMENTC.00445AB0 ELEMENTC.0057E9CF//第一个即可
0018EB50 008E1B8E 包含ELEMENTC.0057E9D4 ELEMENTC.008E1B8B
0018EB78 008E1A9B ELEMENTC.008E1AE0 ELEMENTC.008E1A96
0018EBA0 00903FBC ELEMENTC.008E1A70 ELEMENTC.00903FB7
0018EDD0 008EB9FD 包含ELEMENTC.00903FBC ELEMENTC.008EB9FA
0018EDE4 008DB977 可能 ELEMENTC.008EB9E0 ELEMENTC.008DB974
0018EE38 008EBF6E ELEMENTC.008DB460 ELEMENTC.008EBF69
0018EEBC 0093C252 ELEMENTC.008EBA00 ELEMENTC.0093C24D
0018F0E8 0062947A ELEMENTC.0093C210 ELEMENTC.00629475
在得到的堆栈返回中分析寻路函数,第一个即可
0057E997 . 51 push ecx
0057E998 . 8D4C24 3C lea ecx, dword ptr [esp+3C]
0057E99C . D95C24 28 fstp dword ptr [esp+28]
0057E9A0 . E8 7B68E8FF call 00405220
0057E9A5 . 8B5424 38 mov edx, dword ptr [esp+38]
0057E9A9 . 8B4C24 40 mov ecx, dword ptr [esp+40]
0057E9AD . 8B4424 3C mov eax, dword ptr [esp+3C]
0057E9B1 . 895424 28 mov dword ptr [esp+28], edx
0057E9B5 . 6A 00 push 0 ; 0
0057E9B7 . 56 push esi ; 1 可能是地图ID
0057E9B8 . 8D5424 30 lea edx, dword ptr [esp+30]
0057E9BC . 894C24 38 mov dword ptr [esp+38], ecx
0057E9C0 . 68 30F9D100 push 00D1F930 ; 00D1F930 里面存放着目的地坐标
0057E9C5 . 52 push edx ; 结构体 出发点的坐标 X,Z,Y
0057E9C6 . B9 C8DED000 mov ecx, 00D0DEC8
0057E9CB . 894424 3C mov dword ptr [esp+3C], eax
0057E9CF . E8 DC70ECFF call 00445AB0 ; X
0057E9D4 > 8BCD mov ecx, ebp ; z
0057E9D6 . E8 F5C2F7FF call 004FACD0 ; y
0057E9DB . 8B88 B40C0000 mov ecx, dword ptr [eax+CB4]
0057E9E1 . 85C9 test ecx, ecx
0057E9E3 . 74 2B je short 0057EA10
0057E9E5 . 8BCD mov ecx, ebp
0057E9E7 . E8 E4C2F7FF call 004FACD0
0057E9EC . 8B80 B40C0000 mov eax, dword ptr [eax+CB4]
0057E9F2 . 6A 00 push 0
简化成内联汇编,直接可以调用成功
push 0
push 1//可能是地图ID 如果其他地图变化 那么就找数据来源即可
push 00D1F930//目的地坐标结构体
push 00D3EB40//出发点坐标结构体
mov ecx,00D0DEC8
call 00445AB0
相关文章:
游戏逆向基础之OD找CALL实践
在逆向中除了分析数据之外,另外一个重要的工作就是找算法,找CALL 例如各种功能函数:攻击CALL,走路CALL,喊话CALL等等 以及加密解密等算法需要我们先锁定其位置,然后进行逆向分析。 最常见方法一 API函数下断,例如send …...

File 文件操作
File 文件操作: 一、常用方法: 方法类型描述public File(String pathname)构造给定一个要操作文件的完整路径public File(File parent, String child)构造给定要操作文件的父路径和子文件名称public boolean createNewFile() throws IOExce…...

QT基础(18)- QAbstractSocket
QT基础(18)- QAbstractSocket1 创建简单的客户端2 QAbstractSocket2.1 简介2.2 枚举2.2.1 BingFlag2.2.2 NetworkLayerProtocol2.2.3 PauseMode2.2.4 SocketError2.2.5 SocketOption2.2.6 SocketType2.2.7 SocketState2.3 公有函数2.3.1 构造函数2.3.2 a…...

机器学习与目标检测作业:安装pytorch
机器学习与目标检测作业:安装pytorch一、 进入官网复制下载命令二、 下载的过程2.1 conda命令运行三、 测试pytorch是否安装成功安装pytorch教程 一、 进入官网复制下载命令 进入官网复制下载命令如下图所示 二、 下载的过程 下载的过程如下图所示 2.1 conda命令运…...

Android 源码中的 JNI,到底是如何使用的?
Linux下 JNI的使用学习 Android 其中涉及对 JNI 的使用;JNI的使用对于 Android 来说又是十分的重要和关键。那么到底 Java 到底是如何调用 C/C 的,下面是非常简单的计算器源码,只是用来熟悉JNI的基本语法,其中我自己碰到过的一个问…...

重磅新品 / 酷炫展品 / 强大生态,广和通玩转 MWC Barcelona 2023
2月27日,2023世界移动通信大会(MWC Barcelona 2023)在西班牙巴塞罗那正式开幕。全球知名移动运营商、设备制造商、技术提供商、物联网企业齐聚一堂,以领先的技术、创新的场景、前瞻的洞察向全行业输送最新鲜的行业观点。作为全球领…...

Hbuilder+uniapp 从零开始创建一个小程序
当你看到这篇博客的时候,那~说明~我的这篇博客写完了……哈哈哈哈哈哈哈哈。好的,清耐心往下看哈。如果有需要的,可以关注一下小作,后面还有小程序的云开发嗷~一、申请一个小程序账号(已经有账号的小可爱可以跳过&…...
亚商投资顾问早餐FM/0303支持新能源汽车消费
01/亚商投资顾问早间导读高层调研集成电路企业并主持召开座谈会商务部:今年将积极出台新政策措施支持新能源汽车消费商务部:推动农村消费进一步恢复和扩大更好助力乡村振兴干细胞应用接连获重大突破机构密集调研相关上市公司02/亚商投资顾问新闻早餐// 热…...

Spring Boot 整合分布式缓存 Memcached
Memcached是一个开源、高性能,将数据分布于内存中并使用key-value存储结构的缓存系统。它通过在内存中缓存数据来减少向数据库的频繁访问连接的次数,可以提高动态、数据库驱动之类网站的运行速度。 Memcached在使用是比较简单的,在操作上基本…...

嵌入式学习笔记——STM32单片机开发前的准备
STM32单片机开发前的准备1.集成开发环境的选取STM32 CubeIDEKEIL_MDK2.KEIL_MDK环境搭建安装包获取及安装芯片包下载及安装工程建立(STM32F407VET6为例)1.新建工程文件夹2.新建工程3.安装ST-LINK以及CH340的驱动4.设置KEIL,并烧录本文重点1.集成开发环境的选取 前面…...

客户案例|FPGA研发管理解决方案:UniPro瀑布+敏捷 打造高效能组织
2023开年以来,新享科技项目管理软件UniPro收获一波客户侧的点赞好评。在过去一年中,UniPro不断与客户保持高频沟通,满足客户需求为出发点,以产品功能实现为落脚点,不断打磨产品。 以UniPro客户京微齐力为例࿰…...
【信息学奥赛】1400:统计单词数
统计单词数也需要分割单词,如果使用字符数组来做的话,其实和1144:单词翻转类似,但是我一直只能通过四个样例,估计边界处理条件还是有点问题。 不过经过打印字符串长度之后发现了之前遇到的一个问题,即fget…...

# 技术详解: 利用CI同步文章以及多端发布
技术详解: 利用CI同步文章以及多端发布 技术详解: 利用CI同步文章以及多端发布 前言文章的同步实现的细节 思路文章元数据的定义和提取修改文章的优化本地图片资源上传CDN并替换本地link 终于到了 CI 的部分了最后来一些碎碎念 前言 前几天我更新了一篇简单技术总结之后&am…...
分形维数的计算方法汇总
以下是常用的时间序列分形维数计算方法及相应的参考文献:Hurst指数法Hurst指数法是最早用于计算分形维数的方法之一,其基本思想是通过计算时间序列的长程相关性来反映其分形特性。具体步骤是:(1) 对原始时间序列进行标准化处理。(2) 将序列分…...
微积分小课堂:积分(从微观趋势了解宏观变化)
文章目录 引言I. 预备知识: 积分效应1.1 闯黄灯1.2 公司利润(飞轮效应)1.3 飞轮效应II 积分2.1 积分的计算2.2 积分思想的本质引言 微分解决的问题是从宏观变化了解微观趋势;积分和微分刚好相反,是从微观去看宏观变化。 通过积分效应,提升我们的认识水平,同时能用一些工…...

4道数学题,求解极狐GitLab CI 流水线|第4题:合并列车
本文来自: 武让 极狐GitLab 高级解决方案架构师 💡 极狐GitLab CI 依靠其一体化、轻量化、声明式、开箱即用的特性,在开发者群体中的使用率越来越高,在国内企业中仅次于 Jenkins ,排在第二位。 极狐GitLab 流水线有 4…...
代码规范简述
目录 命名规范 代码格式 OOP规约 集合规范 并发规范 SQL语句规范 SQL 建表规范 SQL 索引规范 SQL 查询规范 控制语句规范 Javadoc 规范 其他规范 命名规范 1、包名:使用小写字母,多个单词之间用"."分隔,例如ÿ…...
【Java集合框架】篇五:Map接口
1. Map及实现类特点 Map:存储key-value HashMap:线程不安全,效率高,key和value都可以为null,底层使用 数组单向链表红黑树 结构(jdk8)。 LinkedHashMap:是HashMap的子类࿰…...

Typroa安装教程
Markdown 是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸收了很多在电子邮件中已有的纯文本标记…...

【MySQL】存储引擎
目录 1.MySQL体系结构 2.存储引擎介绍 3.存储引擎特点 4.存储引擎选择 1.MySQL体系结构 MySQL整体的逻辑结构可以分为4层,客户层、服务层、存储引擎层、数据层 客户层 客户层:进行相关的连接处理、权限控制、安全处理等操作 服务层 服务层负责与客户层进行连接处理、处…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...