x64dbg反汇编技术入门学习笔记

news2024/11/20 6:27:13

EIP

  • EIP是程序下一次要运行地方

寄存器

  • 临时存放数据,按照Intel规定去存放

window API

  • 微软提供的,用户可以操作系统的一些接口,以函数的形式体现

杀软是如何查杀恶意的

  • 镜像地址 + 实际地址 = 实际运行后代码的地址

image-20240523204648774

  • 查外部调用段就可以定位到.rdata

call的调用

  • 我们现在需要手动调用这个删除的

  • 我们找一片空白的内存区域

  • 填入内容
    • 我们改为删除123.txt文件

  • 替换为另一端内存地址

if语句、eax寄存器与函数返回值的关系、流程图

  • eax存放函数的返回值

  • if在汇编中被编译为jne,可以通过右键流程图来查看流程

内存布局和补丁

  • 我们可以通过内存布局来查找标题名称

  • 填入"把我改了"

    • 注意,有时候utf-8或者ascii无法搜索到,就需要点击代码页进行切换

  • 在引用当中可以看到我们查找的结果

  • 我们在内存窗口中查看看看

  • 我们在内存窗口切换为GBK,软件估计是用GBK写的,这里我用UTF-8乱码了

  • 修改内容

  • 选择"修补文件"

  • 这边随便弄了个名字

jmp指令

  • 强制更改代码的执行流程

标志寄存器

  • ZF
  • SF
  • OF
  • 等等

常用无条件跳转

  • jmp

  • call

    • 执行函数
  • ret

    • 函数体不可或缺的一部分
    • 无条件从函数体内部跳出来

无条件干掉一些不顺眼的函数

按钮关闭

  • 我们找下按钮的提示字符串

  • 找到了

  • 进入此函数

  • 将第一行代码修改为ret即可

植物大战僵尸特殊

  • 我们附加下窗口

  • 我们切换下

ret8这个数字和堆栈相关,和堆栈平衡相关,函数相关,跟call相关
如果你直接ret崩溃了,那就进入函数体内部,向下拉,看retx,把retx复制到函数头部就可以了

效果:刚进入函数内部,函数就结束了,
函数头部:push ebp
函数尾部:retx

完整的call

  • 有头
    • push ebp
  • 有尾
    • pop ebp

EBP和ESP

  • EBP指针寄存器(extended stack pointer)

    • 内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶
    • 始终指向堆栈最上面的数据
  • ESP基址指针寄存器(extended base pointer)

    • 内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部
  • 只要经过函数头,ESP就会等于EBP

    push ebp
    mov ebp,esp
    
一个程序实际上是由很多个函数组成的,主函数去调用A函数,A函数调用B函数,B函数调用完是一定要返回的,
不返回就说明没调用完,没调用完就没法继续执行别处的代码,没法恢复到函数调用前程序的状态
调用前程序的状态由 ebp控制,基址指针寄存器,一开始就 push 了,有 push(压入),就得有 pop(弹出),万事万物成对出现

植物大战僵尸跳过暂停

  • https://wwi.lanzoub.com/b0d40znvc

    • 密码:1fws
  • 我们最终定位到了暂停函数为下面的

  • 我们先按照正常条件来走下,我们选择步过而不是步进,会发现会进入执行

  • 所以我们不让他进入执行,改为jmp即可

  • 发现游戏不暂停了

函数调用约定与参数顺序

  • __cdecl是C/C++的默认调用约定,也就是说,游戏/软件(包括我们自己写的)都是用这个约定

  • __stdcall是WindowsAPI默认调用约定,微软的WINAPI都是这个调用约定

  • 如何理解?这种约定是为了配合函数调用出现的,函数调用必须按照这个规则,就像万事万物都有它的规则一样:太阳东升西落,夜晚繁星闪烁

  • 函数在这种规则下造成的现象:参数顺序

  • __cdecl入栈顺序:从右到左

  • __stdcall入栈顺序:也是从右到左

比如有一个函数
void myFun(int a,int b){}

myFun(10,20);

//那么汇编可能就是
push 20
push 10
call 函数

函数调用约定与堆栈平衡、参数个数计算

  • 堆栈平衡
    • 简单理解为吃了多少,给我吐出来多少,
  • 注意下: 用的都是十六进制,可以用过堆栈平衡来计算参数的个数

EBP寻址

  • 只要是单参数函数,都是最先push ecx

MOV指令

加减乘除

  • 其他略
  • cmp eax,3等同于sub eax 3,然后再根据结果去改变标志位
    • 下面图片我随便截图的

push pop指令常用操作

条件转移

  • 图片关系也就是条件上方的语句是否满足关系所示
cmp eax,3
je xxx

比如上面的,意思就是判断eax === 3,如果是就跳转,不是就不跳

浮点寄存器、浮点单参数函数

  • Push ecx
  • Xmm反汇编没有办法直接地址向地址传递,必须得通过寄存器

image-20240602153001582

浮点寄存器局部变量

FPU寄存器与常用浮点运算、浮点栈-108

知识点

已到达系统断点

  • 系统的断点,系统领空

  • 程序会分段,可以通过PEID来查看分段的

    • 代码段

PEID查看的段

  • 查外部调用段就可以定位到.rdata

回到最初的点

  • 减号’-’

带参数的call与远程调用

  • 观察,特点,push,总之,有参数,就需要push,换句话说,call的参数需要push
  • 或者说,函数的参数需要push指令
  • push:压入,压了就能用了
  • 格式:
push 参数
cal1函数地址

远程调用

  • 通过注入的方式调用call

但凡是push地址的,都是已经赋值了的

但凡是push寄存器的,都是在前面赋值的,就得找前面赋值了什么

更改断点

跳转颜色

  • 一般情况下
    • 蓝色为跳转成立,红色为跳转不成立

  • 对于无条件跳转,蓝色线条意味着一定会跳转。
  • 对于条件跳转,需查看跳转条件是否满足。
  • 对于函数调用,蓝色线条表示会跳转到函数并返回。

回车可以临时进入函数体内部

只要经过函数头,ESP就会等于EBP

  • EBP指针寄存器(extended stack pointer)
    • 内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶
    • 始终指向堆栈最上面的数据
  • ESP基址指针寄存器(extended base pointer)
    • 内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部

单双局部变量的函数分析,局部变量的生命周期

  • 函数内部的局部变量在汇编中怎么看呢?
  • 一个局部变量创建方法如下图
    • 看到push ecx move就是一个参数
  • 二个或多个局部变量方法sub esp,8,8为十六进制,这句话代表要开辟的新空间大小

al,ah

  • al最右边的数
  • ah

在线汇编网站

https://godbolt.org/

多个参数不一定有多个寄存器

  • 可能一定参数对应一个寄存器,也可能多个参数对应一个寄存器,总之不是一一对应的关系

nop是什么都不干

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode 根据不同语言项目自定义配置项(插件版本)

2024.7.28 天微热,心情燥。 前文,如果我们是一个全栈开发者,我们想在写前端项目时只让vscode加载前端的插件,写后端的时候只加载后端的插件,该如何配置呢? 1. 通过配置 workspace 这里大家都会&#xff0…

【02】Java的语言类型

Java语言的类型可以分为两大类:基本类型和引用类型 一、基本类型 Java中引进了八个基本类型,使用基本类型能够在执行效率及内存使用方面提升软件性能,因为它们都是由Java虚拟机预先定义好的。 从上到下,值域依次扩大&#xff0…

模型融合方法总结

1、最基本的有均值法、加权平均法 2、基于贝叶斯优化的权重搜索:这里以TPE搜索为例: 步骤:创造参数空间,定义目标函数 问题:得到的权重带入模型后得到的准确率并不高,原因是这里的训练和模型之前的训练重…

探索 Kubernetes 持久化存储之 Longhorn 初窥门径

作者:运维有术星主 在 Kubernetes 生态系统中,持久化存储扮演着至关重要的角色,它是支撑业务应用稳定运行的基石。对于那些选择自建 Kubernetes 集群的运维架构师而言,选择合适的后端持久化存储解决方案是一项至关重要的选型决策。…

使用Pyqt5基于yolo目标识别算法实现车辆和行人识别

文章目录 一、视频演示二、实现的功能2.1、逻辑流程框架 三、Pyqt介绍3.1、PyQt5软件安装3.2PyQt5-tools软件安装 四、yolo目标识别算法介绍4.1、YoloV8环境安装 五、环境搭建六、运行跑一下七、代码 一、视频演示 yolo目标识别算法实现车辆识别与行人识别 二、实现的功能 摄像…

【Linux C | 网络编程】进程池大文件传输的实现详解(三)

上一篇实现了进程池的小文件传输,使用自定义的协议,数据长度数据本身,类似小火车的形式,可以很好的解决TCP“粘包”的问题。 【Linux C | 网络编程】进程池小文件传输的实现详解(二) 当文件的内容大小少于…

个人博客搭建——Halo

1 概述 Halo是一个开源的博客系统,有较多的插件支持,用下来感觉还可以 2 搭建流程 2.1 配置系统环境 需要以下系统环境 1、Ubuntu系统 2、Mysql(替换原生数据库) 2.2 下载jar包 这里选择的是jar包部署 下载路径:…

通过nvm在Win7系统中安装v16.17.0及以上版本的nodejs

操作步骤 1.通过nvm安装node - v16.17.0 nvm install 16.17.0若您尚未安装nvm,请参阅:https://blog.csdn.net/weixin_45687201/article/details/135636453 由于我已经安装过了,这里贴图: 2.配置win7环境变量 1.找到node 16.17.…

【AI大模型】Prompt 提示词工程使用详解

目录 一、前言 二、Prompt 提示词工程介绍 2.1 Prompt提示词工程是什么 2.1.1 Prompt 构成要素 2.2 Prompt 提示词工程有什么作用 2.2.1 Prompt 提示词工程使用场景 2.3 为什么要学习Prompt 提示词工程 三、Prompt 提示词工程元素构成与操作实践 3.1 前置准备 3.2 Pro…

“科技创新‘圳’在变革”2025深圳电子展

电子产业作为现代社会的核心驱动力之一,正以前所未有的速度发展。在这样的背景下,深圳作为中国的经济特区和创新高地,又一次迎来了备受瞩目的盛会——2025深圳电子展览会。本次展览会定于2025年4月9日至11日,在深圳会展中心&#…

vue路由跳转时改变路由参数组件不渲染问题【已解决】

效果展示 解决 router路由为了组件复用,防止组件的频繁销毁与创建,在遇到跳转的路由不一致才会进行重新渲染,路径参数变了他是不会管的,只会改变this.$route对象而已 就这个东西/:xxx 我们可以写一个watch监视this.$route对象。…

virtualbox ubuntu扩充磁盘大小

首先在虚拟存储管理里面修改磁盘大小 然后安装gparted sudo gparted 打开管理工具 选中要调整的区域右键选择调整区域大小 拖动上述位置就可以实现扩容。完成后点击应用 然后重启虚拟机即可。

永结无间Ⅱ--大语言模型最终会代替人类吗?

涵盖的主题 当前大语言模型的缺点为何大语言模型 (LLM) 缺乏常识?自主智能的架构相信超级智能的人的说法源于对智力误解的错误推理环境对个人智力有严格限制智力是外在的,存在于文明发展之中无论人工智能变得多么聪明,它都无法扩展递归式自我…

可达2951题 数位拆分

题目: 思路:从二进制的角度,从0到30位每一位来判断求和,开一个新的数组统计第i位是0和1的个数,a[i]放到0~30位的每一位上,然后将a[i]在第位上为0数量乘以2的次方。 代…

编译之舞:C/C++ 与 GCC 的协作曲

文章目录 一、C/C 编译过程的四个阶段1. 编译之舞的台前幕后2. 舞台布景的准备——预处理3. 舞者的基本训练——编译4. 编舞师的细节调整——汇编5. 合奏的和谐统一——链接 二、舞姿的动作细——编译详细模式三、幕后——GCC 的各种选项(Overall Option&#xff09…

Milvus Lite, Milvus Cloud, Standalone, 与 Distributed:组件功能关系深度解析

在大数据时代,高效、灵活的向量搜索解决方案成为了许多企业和研究机构不可或缺的技术支撑。Milvus,作为一款开源的向量数据库,凭借其卓越的性能、可扩展性和易用性,在众多向量搜索引擎中脱颖而出。Milvus 提供了 Lite、Cloud、Standalone、Distributed 四种部署模式,每种模…

55. 跳跃游戏【 力扣(LeetCode) 】

一、题目描述 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 二、测试用…

Python学习笔记44:游戏篇之外星人入侵(五)

前言 上一篇文章中,我们成功的设置好了游戏窗口的背景颜色,并且在窗口底部中间位置将飞船加载出来了。 今天,我们将通过代码让飞船移动。 移动飞船 想要移动飞船,先要明白飞船位置变化的本质是什么。 通过上一篇文章&#xff0…

STM32的GPIO输入输出方式设置示例

1、GPIO口做基本的输入/输出口使用时,输入有上拉输入、下拉输入、浮空输入(既无上拉电阻也无下拉电阻)3种输入方式;输出有开漏输出、推挽输出2种输出方式。 2、示例 (1)示例1:GPIO做输出的设置…

【机器学习】pytorch 常用函数解析

目录 一、基本函数介绍 1.1 nn.Module 类 1.2 nn.Embedding 1.3 nn.LSTM 1.4 nn.Linear 1.5 nn.CrossEntropyLoss 1.6 torch.save 1.7 torch.load 1.8 nn.functional 1.9 nn.functional.softmax 本文主要对 pytorch 中用到的函数进行介绍,本文会不断更新~…