游戏逆向基础之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层,客户层、服务层、存储引擎层、数据层 客户层 客户层:进行相关的连接处理、权限控制、安全处理等操作 服务层 服务层负责与客户层进行连接处理、处…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...