游戏逆向基础之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层,客户层、服务层、存储引擎层、数据层 客户层 客户层:进行相关的连接处理、权限控制、安全处理等操作 服务层 服务层负责与客户层进行连接处理、处…...
OpenClaw核心揭秘:Agentic Loop如何驱动AI持续思考与行动?
上一篇讲了 Gateway——它像餐厅前台,负责接收订单、分发任务。 但订单到了厨房,厨师是怎么做菜的? 这就是 Agentic Loop(推理循环)的事了。 它是 OpenClaw 的"大脑",决定 Agent 如何思考、如何行…...
避坑指南:UR5e机器人SpeedL模式下的笛卡尔空间控制,如何避免奇异点和超限?
UR5e机器人SpeedL模式避坑实战:笛卡尔空间控制的三大安全策略 实验室里,机械臂突然发出刺耳的警报声——这可能是每个UR5e初学者都经历过的噩梦。当你在笛卡尔空间用SpeedL指令控制机器人画复杂轨迹时,关节超限、奇异点问题和自碰撞就像三个隐…...
【路径规划】传统A星+改进A星(star)彩色蔓延路径规划算法Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…...
医学图像分类实战:基于kvasir v2胃病数据集的深度卷积网络性能对比
1. 医学图像分类与KVASIR V2数据集简介 胃镜图像分类是计算机辅助诊断系统中的关键环节。KVASIR V2作为目前最全面的公开胃病数据集,包含8类常见胃部病变的8000张高清图像,每类1000张。这些图像由专业胃肠病专家标注,覆盖了从正常黏膜到早期…...
Deformable-DETR环境配置避坑:如何正确设置CUDA_HOME解决ms_deformable_im2col_cuda报错
Deformable-DETR环境配置实战:从CUDA路径排查到高效编译 当你第一次尝试运行Deformable-DETR这个强大的目标检测框架时,是否也遇到了那个令人头疼的报错:"error in ms_deformable_im2col_cuda: no kernel image is available for execut…...
新手福音:在快马平台零基础上手加速库,轻松提速深度学习训练
新手福音:在快马平台零基础上手加速库,轻松提速深度学习训练 作为一个刚接触深度学习的新手,最头疼的莫过于环境配置和性能优化。最近我在InsCode(快马)平台上发现了一个超实用的功能——预置加速库的深度学习项目模板,让我这个小…...
OpenClaw 底层原理分析
OpenClaw 底层原理深度分析 OpenClaw 是一个智能体编排平台,它的核心设计哲学是 “模型无关、工具优先、记忆驱动”。让我从架构、数据流、核心机制三个维度为你拆解。 🏗️ 一、整体架构 OpenClaw 采用 分层解耦 架构,可以理解为“AI 操作系统”: text ┌──────…...
java自动带注释
...
OpenClaw+Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF:学术论文辅助写作系统
OpenClawQwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF:学术论文辅助写作系统 1. 为什么需要AI辅助学术写作 去年冬天,我在赶一篇计算机视觉领域的会议论文时,经历了所有研究者都熟悉的痛苦:连续三天熬夜整理参考文献、…...
当Navicat密码遗忘时:开源解密工具如何重建数据库连接通路
当Navicat密码遗忘时:开源解密工具如何重建数据库连接通路 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 数据库连接中断的三大痛点场景 场…...
