二.《UE4奥丁》解密哈希ID

哈希表概念

1.相信大家经常在UE4或者UE5游戏逆向中遇到下面的代码段

$ ==>            > 41:8B42 0C               > mov eax,dword ptr ds:[r10+C]              >
$+4              > 3B05 AE589B04            > cmp eax,dword ptr ds:[7FF7B68B74F4]       >
$+A              > 7D 28                    > jge projectlh.7FF7B1F01C70                >
$+C              > 99                       > cdq                                       >
$+D              > 0FB7D2                   > movzx edx,dx                              >
$+10             > 03C2                     > add eax,edx                               >
$+12             > 8BC8                     > mov ecx,eax                               >
$+14             > 0FB7C0                   > movzx eax,ax                              >
$+17             > 2BC2                     > sub eax,edx                               >
$+19             > 48:98                    > cdqe                                      >
$+1B             > C1F9 10                  > sar ecx,10                                >
$+1E             > 48:63C9                  > movsxd rcx,ecx                            >
$+21             > 48:8D1440                > lea rdx,qword ptr ds:[rax+rax*2]          >
$+25             > 48:8B05 78589B04         > mov rax,qword ptr ds:[7FF7B68B74E0]       >
$+2C             > 48:8B0CC8                > mov rcx,qword ptr ds:[rax+rcx*8]          >
$+30             > 48:8D1CD1                > lea rbx,qword ptr ds:[rcx+rdx*8]          >
$+34             > 8B43 08                  > mov eax,dword ptr ds:[rbx+8]              >

2.其实这个就是在进行解密哈希ID,有的人不明白这个ID是如何通过这个哈希表拿到我们的哈希对象的

3.额~老师,啥是哈希表?

4.我们首先看看百度是如何解释的

5.正如上面所说我们对任意给定的关键字值key,带入函数后都能返回一个表中的地址,那么我们称这个表是哈希表

6.是不是感觉和我们遇到的情况一样,我们在UE4中通过一个哈希ID(Key),通过上面的代码块拿到对象

7.好~这里明白了大致的概念,现在我们就着手动态分析这段汇编代码,搞清楚是如何解密ID拿到对象

哈希ID来源

1.首先在头下断点,并断下

2.观察此时的寄存器r10

3.转到内存发现r10是一个对象

4.按F8执行一句,继续观察eax

5.发现eax存的是拿到的4字节r10对象+C的哈希ID

6.从来这,我们观察到所有的r10对象+C偏移都是一个哈希ID!

7.结论大家一定要记住!以后看到这个对象+C偏移的地址存有一个4字节ID那么这个对象就是哈希对象

8.然后拿到这个哈希ID经过下面的代码段就可以返回对象了,现在我们看看汇编是如何操作这个哈希ID的

动态分析解密ID

1.我们继续F8执行到这里 movzx edx, dx 的下一句

2.当执行 movzx edx, dx 后,观察寄存器edx是0,好 我们继续

3.执行add eax, edx 后,观察到把原本eax(哈希ID)加上了edx(0),然后赋值给了eax(哈希ID),注意这里都是在操作4字节哦,因为哈希ID就是一个4字节

4.到这里,我们的寄存器edx(0),eax(哈希ID)由于加上0还是等于哈希ID

5.继续执行,经过这句代码 mov ecx, eax,我们观察到eax(哈希ID)赋值给了ecx(哈希ID)

6.继续F8执行movzx eax, ax后,这里就是关键点了,我们观察寄存器变化

7.原本的eax()变成了1D73,是不是取了原本31D73的低4位呢?也就是低2字节,注意我们这里都是按4字节讲的

8.其实不难分析,原来 ax 就是低2字节的意思,为了方便理解,这里画了一张图

9.其实说白了,rax是8字节,eax是4字节,ax是2字节

10.所以我们看到原本31D73,居然取了低2字节为1D73赋值给了eax

11.继续F8执行sub eax, edx

12.eax(1D73)加上edx(0)无任何变化

13.继续F8执行过sar ecx, 0x10, 这句的时候,又来到一个关键点

14.我们发现执行后,ecx变成了3,这个3来源哪里呢?

15.分析得到这个3居然就是上面哈希ID的高2字节

16.额,他是如何得到的呢?其实仔细看到sar ecx, 0x10这个sar汇编指令的作用我们就知道原因了

17.有的同学不太明白sar的作用,我们百度看看

18.居然是位运算!,而且我们看到sar ecx, 0x10中的0x10换算成十进制就是16刚好右移动了16位(二进制位),是不是相当于把原本的低16位给移除了,原本的搞16位变成了现在的

低16位也就是3!

19.这里画了一张图便于分析

20.分析后,原来sar ecx, 0x10这句代码是取哈希ID的高4字节,而movzx eax, ax是取低4字节

偏移表达式

1.上面我们解密了ID分成了2个部分分别存在了rcx(哈希ID的高4字节),eax(哈希ID的低4字节)

2.我们继续执行下,这里比较简单就是偏移表达式的组合

3.能得到一个偏移表达式

[[0x00007FF7B68B74E0]+ecx8]+eax3*8]==哈希对象

4.原来我们的ecx和eax就是2个索引,分别从哈希ID分解得到

5.那么最终我们得出结论如图

6.好了今天的哈希ID解密就讲到这里,是不是很简单呢?

7.感谢同学们的支持,感谢支持迪大学院285530835

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/33024.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

观察级水下机器人使用系列之三黑白和彩色摄像机

本文主要讲Valor配套的黑白和彩色摄像机,它们都是imenco公司生产的,黑白照相机型号是Night Shark,彩色照相机型号是Blacktip SharkII,令人奇怪的是黑白照相机比彩色照相机大多了,见下图大的照相机是黑白照相机。 正在上…

Audio API 实现音频播放器

市面上实现音频播放器的库有很多,比如wavesurfer.js、howler.js等等,但是都不支持大音频文件处理,100多M的文件就有可能导致程序崩溃。总之和我目前的需求不太符合,所以打算自己实现一个音频播放器,这样不管什么需求 在…

NLP入门:word2vec self-attention transformer diffusion的技术演变

这一段时间大模型的相关进展如火如荼,吸引了很多人的目光;本文从nlp领域入门的角度来总结相关的技术路线演变路线。 1、introduction 自然语言处理(Natural Language Processing),简称NLP,是通过统计学、…

使用Docker Swarm部署PXC+HAProxy高可用集群(三节点)

使用Docker Swarm部署PXCHAProxy高可用集群(三节点) 1. 部署规划 当前规划中,只启动一个HAProxy服务,主要用来做MySQL节点的负载均衡和代理,但是HAProxy可能会出现单点故障,后续需要启动多个HAProxy节点&…

【网络知识面试】初识协议栈和套接字及连接阶段的三次握手

接上一篇:【网络面试必问】浏览器如何委托协议栈完成消息的收发 1. 协议栈 一直对操作系统系统的内核协议栈理解的模模糊糊,借着这一篇博客做一下简单梳理。 我觉得最直白的理解,内核协议栈就是操作系统中的一个网络控制软件,就是…

Web测试的主要内容和测试方法有哪些?

Web测试的主要内容: 一、输入框 二、搜索功能 三、增加、修改功能 四、删除功能 五、注册、登录模块 六、上传图片测试 七、查询结果列表 八、返回键检查 九、回车键检查 十、刷新键检查 Web测试的测试方法: 1.在测试时,与网络有关的步骤或者…

mybatis-plus在实际开发中的应用

文章目录 前言一、实体类的注解二、Req查询条件三、Controller接口四、Service接口五、Service接口实现类六、Mapper接口七、枚举的使用总结 前言 最近的项目是使用mybatis-plus作为持久层框架,前面也记录过mybatis-plus的基本使用,此次记录一下本次项目…

蓝桥杯专题-试题版-【01字符串】【2n皇后问题】【A+B问题】【Fibonacci数列】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

Python:pyecharts可视化

文章目录 简介Geo地理图绘制地图下载 折线图区域突出显示横坐标带选择展示 add地图Mapformatter控制value显示在图中显示value值目标html的解析自定义地图js资源原生地图js的解析解决省份上文字不居中的问题 桑基图设置桑基柱的颜色 参考文献 简介 (这是20年的笔记…

【MySQL】库的操作

目录 一、创建数据库 二、字符集和校验规则 1、查看系统默认字符集以及校验规则 2、创建数据库案例 3、校验规则对数据库的影响 3.1、不区分大小写 3.2、区分大小写 3.3、进行查询 3.3.1、不区分大小写的查询以及结果 3.3.2、区分大小写的查询以及结果 3.4、结果排序…

flutter - 编写 阿里云-金融级实名认证插件

项目中有实名认证的需求,用户上传身份证反正面,进行人脸核验,后台集成的是阿里云的金融级实名认证SDK,巧合的是阿里云没有packages 需要自己造轮子。 废话不多少,直接上代码: 新建项目 ProjectType Plugin…

wsl下面的子系统启用systemctl

下载地址 https://github.com/gdraheim/docker-systemctl-replacement 操作 mv /usr/bin/systemctl /usr/bin/systemctl.old #对原文件进行备份sudo scp /mnt/c/Users/Administrator/Desktop/systemctl.py /usr/bin/systemctl #把项目中的systemctl.py文件拷贝到/use/bin/ 目…

Diffusion扩散模型学习2——Stable Diffusion结构解析-以文本生成图像为例

Diffusion扩散模型学习2——Stable Diffusion结构解析 学习前言源码下载地址网络构建一、什么是Stable Diffusion(SD)二、Stable Diffusion的组成三、生成流程1、文本编码2、采样流程a、生成初始噪声b、对噪声进行N次采样c、单次采样解析I、预测噪声II、…

安装mmdetection2.22(windows下)

安装mmdetection2.22 确定版本安装mmcv1.4安装mmdetection测试方案1方案2 确定版本 安装mmcv1.4 首先.cuda,pytorch得安装好,这里我拷贝pt1.8虚拟环境 安装mmcv1.4 安装mmdetection 参考文章 下载 cd E:\Code\mmdetection\mmdetection-2.22.0 pip install -r…

MATLAB 之 低层绘图操作和光照及材质处理

这里写目录标题 一、低层绘图操作1. 曲线对象2. 曲面对象3. 文本对象4. 其他核心对象4.1 区域块对象4.2 方框对象 二、光照和材质处理1. 光照处理2. 材质处理2.1 图形对象的反射特性2.2 material 函数 一、低层绘图操作 MATLAB 将曲线、曲面、文本等图形均视为对象&#xff0c…

【MySQL数据库 | 第十九篇】SQL性能分析工具

目录 前言: SQL执行频率: 慢查询日志: profile: profile各个指令: 总结: 前言: 本篇我们将为大家讲解SQL性能的分析工具,而只有熟练的掌握了性能分析的工具,才可以更…

【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识

💧 S p r i n g C l o u d S l e u t h 分布式链路跟踪 \color{#FF1493}{Spring Cloud Sleuth 分布式链路跟踪} SpringCloudSleuth分布式链路跟踪💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云…

力扣 257. 二叉树的所有路径

题目来源:https://leetcode.cn/problems/binary-tree-paths/description/ C题解1:使用递归,声明了全局变量result,遇到叶子节点就将字符串添加到result中。 递归三步法: 1. 确认传入参数:当前节点已有路径…

如何保证API接口的安全性

API接口的安全性是非常重要的,以下是一些保证API接口安全性的措施: 用户认证、授权:接口的调用者必须提供有效的身份认证信息,包括用户名、密码、密钥等,以保证接口的调用者的身份有效性。同时,需要在接口的…

echarts的基础知识和配置项

异步数据加载和更新 ECharts 中在异步更新数据的时候需要通过series的name属性对应到相应的系列,如果没有name,series就会根据数组的顺序索引,把数据跟前面的配置对应上 loading动画 如果数据加载时间较长,一个空的坐标轴放在画…