游戏逆向基础之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层,客户层、服务层、存储引擎层、数据层 客户层 客户层:进行相关的连接处理、权限控制、安全处理等操作 服务层 服务层负责与客户层进行连接处理、处…...
芯驰(E3-gateway)开发板环境搭建以及调试遇到问题的解决
1-Windows下环境配置 可以在Windows上使用命令行或者IAR IDE编译SSDK项目。Windows编译依赖的工具已经包含在 prebuilts/windows 目录中,包括编译器、Python和命令行工具。 1.1.1 CMD SSDK集成 msys 工具,可以在Windows命令行中完成SDK的配置、编译和…...
【大数据监控】Prometheus、Node_exporter、Graphite_exporter安装部署详细文档
目录Prometheus简介下载软件包安装部署创建用户创建Systemd服务修改配置文件prometheus.yml启动Prometheusnode exporter下载软件包安装部署添加用户创建systemd服务启动node_exportergraphite_exporter下载软件包安装部署创建systemd服务启动 graphite_exporterPrometheus 简介…...
《C++ Primer》 第十一章 关联容器
《C Primer》 第十一章 关联容器 11.1 使用关联容器 使用map: //统计每个单词在输入中出现的次数 map<string, size_t> word_count;//string到size_t的空map string word; while(cin>>word)word_count[word];//提取word的计数器并将其加1 for(const auto &w:…...
WebRTC标准与框架解读(1)
1、如果让我来设计webrtc框架我在分析源码的时候,都喜欢做这样一件事情:如果让我来设计它,我会怎么做?大家可以紧跟我的思路,分析一下WebRTC为什么如此设计。为了对整个框架有有一个全面的了解,我们首先要做…...
数据结构的一些基础概念
一 基本术语 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处…...
【Python每日一练】总目录(不断更新中...)
Python 2023.03 20230303 1. 两数之和 ★ 2. 组合总和 ★★ 3. 相同的树 ★★ 20230302 1. 字符串统计 2. 合并两个有序链表 3. 下一个排列 20230301 1. 只出现一次的数字 2. 以特殊格式处理连续增加的数字 3. 最短回文串 Python 2023.02 20230228 1. 螺旋矩阵 …...
latex插入图片(自用)
加入宏包:\usepackage{graphicx} 使用 \includegraphics 命令进行插图。 \includegraphics[]{}: 第一参数[]:对图片做一些适当的调整(设定图片的高度和宽度或者按比例缩放) 第二参数{}:图片的名字…...
【微信小程序】-- 网络数据请求(十九)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
K8S 实用工具之一 - 如何合并多个 kubeconfig?
开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 K8S 集群规模,有的公司倾向于少量大规模 K8S 集群,也有的公司会倾向于大量小规模的 K8S 集群。 如果是第二种情况,是否有一个简单的 kubectl 命令来获取一个 kubec…...
阿里云ECS服务器的6大功能组件
阿里的云服务在国内可以说是首屈一指的了,因此他们家的云服务器也是最受欢迎的。那么,你知道阿里云服务器ECS有哪些功能组件吗?不清楚不要紧,下面服务器吧小编带大家来看看。 在了解之前我们来看一张阿里云服务器ECS的产品组件架…...
做视频网站需要多大带宽/网址收录平台
function add(num){var sumnum,tmpfunction(v){sumv;return tmp};tmp.toStringfunction(){return sum};return tmp }; alert( add(10)(45) ) add(10),返回了一个函数并没有调用,返回值是通过toString隐士调用返回的...
想给公司注册一个网站/学前端去哪个培训机构
1、python中的方法是值传递还是引用传递? 答案:如果python中的值为常量则为值传递,如果为变量则是引用传递。 比如说:如果函数收到的是一个可变对象(比如字典 或者列表)的引用,就能修改对象的原…...
做数码测评的网站/黑马培训
文章摘抄 http://www.w3cplus.com/css/css-hr <hr>标签是html4用来制作水平线的。如果你在网页制作中使用了<hr />标签来制作水平分隔线,你知道在没有样式设置的情况下,他是很难看的。<hr/>在各浏览器的显示常常是100%的宽度ÿ…...
网站建设需要什么技能/南宁百度seo价格
spring cloud开发工程属于分布式服务开发,idea顶层概念是project,而我们顶层只需要一个目录,如果使用idea创建工程,会默认生成一个同名module,不是我们想要的,所以我们手动建立文件夹,然后打开。…...
响应式网站开发/网络服务公司
神武8月22日维护公告解读,谈人物经验心得调整,大家快来看看吧。相关新闻:【玩法和系统调整】1、2014年8月25日至9月15日期间,可以到“礼物仙子”处领取“开学礼包”。就要开学了,学生玩的时间又少了,多领一…...
长沙做网站seo优化外包/如何在百度发布广告
:%!python -m json.tool https://www.jianshu.com/p/91c2d7a54eb7...