游戏逆向基础之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层,客户层、服务层、存储引擎层、数据层 客户层 客户层:进行相关的连接处理、权限控制、安全处理等操作 服务层 服务层负责与客户层进行连接处理、处…...
开源浏览器扩展SubLens:集中管理AI订阅账单,告别遗忘扣费
1. 项目概述:一个浏览器扩展,帮你管好AI订阅账单 不知道你有没有这种感觉,每个月信用卡账单出来的时候,总有几个“熟悉的陌生人”——那些你为了尝鲜或者工作需要而订阅的AI服务,比如ChatGPT Plus、Claude Pro、GitHub…...
3分钟学会Xbox Game Pass存档提取:免费工具实现跨平台游戏进度迁移
3分钟学会Xbox Game Pass存档提取:免费工具实现跨平台游戏进度迁移 【免费下载链接】XGP-save-extractor Python script to extract savefiles out of Xbox Game Pass for PC games 项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor 作为游戏…...
基于微信小程序的家政服务预约系统(30291)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
嵌入式与半导体年度技术趋势:从RISC-V、Matter到EDA 2.0与软件定义汽车
1. 从年度回顾看嵌入式与半导体行业的技术脉搏又到年底复盘时,各大技术媒体都在梳理过去一年的重磅内容。最近看到EE Times整理其编辑Nitin Dahad的2022年度六大精选故事,感触颇深。这六篇文章,像六个精准的切片,生动勾勒了过去一…...
AI代理治理零风险上线:asqav观察模式与渐进式集成实践
1. 项目概述:在AI代理上线后,如何安全地引入治理机制你花了好几周时间,终于把那个AI代理流水线给搭起来了。从LangChain的链式调用,到精心设计的工具函数,再到与外部API的集成,每一个环节都调试得服服帖帖。…...
RCX自定义主题和外观设置:如何打造个性化的云管理界面
RCX自定义主题和外观设置:如何打造个性化的云管理界面 【免费下载链接】rcx Rclone for Android 项目地址: https://gitcode.com/gh_mirrors/rc/rcx RCX作为一款功能强大的Android云管理工具,不仅提供了全面的Rclone功能支持,还允许用…...
Fooocus终极指南:零门槛AI图像生成神器,5分钟从安装到创作
Fooocus终极指南:零门槛AI图像生成神器,5分钟从安装到创作 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus 在AI图像生成领域,复杂的技术参数和繁琐的调整过程…...
C++ 入门核心语法|从 Hello World 到基础特性一次性吃透
文章目录前言一、C 第一个程序:Hello World二、命名空间 namespace1. 为什么需要命名空间?2. 命名空间定义规则3. 三种使用方式三、C 输入 & 输出1. 核心对象2. 最大优势四、缺省参数(默认参数)1. 定义2. 使用方式3. 声明与定…...
SystemVerilog VPI动态数据处理机制与验证实践
1. SystemVerilog VPI动态数据处理机制深度解析在当今复杂的SoC验证环境中,SystemVerilog的动态数据类型已成为验证基础设施的核心组成部分。作为连接SystemVerilog与外部C/C程序的关键桥梁,VPI(Verilog Procedural Interface)的动态数据处理能力直接决定…...
基于 HM-TM32 红外摄像头:棉花燃烧+起火自动录制 30 秒视频
在棉花仓储、纺织原料监测等实际场景中,利用 HM-TM32 微型红外测温机芯实现非接触式火情监测具备极高的实用价值,本文基于 Windows 笔记本环境,实现红外摄像头实时画面显示,并在检测到棉花起火或高温异常时自动录制 30 秒视频留存…...
