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

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.xdnf.cn/news/1489546.html

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

相关文章

Android Kotlin:协程

目录: 1)协程是什么? 2)协程和线程的关系? 3)协程如何使用?切线程是什么 4)挂起函数是什么? 5)withContext和lanuch的区别在哪里? 6)…

Jenkins的相关概述和安装

Jenkins 1.什么是jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。耗内存max 2. 为什么使用Jenkins 拉取、编译、打包…

【初阶数据结构】9.二叉树(4)

文章目录 5.二叉树算法题5.1 单值二叉树5.2 相同的树5.3 另一棵树的子树5.4 二叉树遍历5.5 二叉树的构建及遍历 6.二叉树选择题 5.二叉树算法题 5.1 单值二叉树 点击链接做题 代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

探索 Electron:构建用户友好的登录页面流程

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能…

安防巡检机器人:守护安全的智能卫士

安防巡检机器人,作为机器人技术在安防领域的杰出应用,是一种集自主导航、智能巡检、环境监测、远程监控等多功能于一体的智能装备。这些机器人通过集成先进的传感器、高清摄像头、智能算法和导航系统等模块,实现了全天候、全方位、自主化的安…

maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行

一.背景 在《maven项目容器化运行之1》中,我们开启了1Panel环境中docker构建服务给到了局域网。在《maven项目容器化运行之2》中,我们基本实现了maven工程创建、远程调用docker构建镜像、在1Panel选择镜像运行容器三大步骤。 但是,存在一个问…

HDU1059——Dividing,HDU1060——Leftmost Digit,HDU1061——Rightmost Digit

目录 HDU1059——Dividing 题目描述 运行代码 代码思路 HDU1060——Leftmost Digit 题目描述 ​编辑​编辑 运行代码 代码思路 HDU1061——Rightmost Digit 题目描述 运行代码(快速幂) 代码思路 HDU1059——Dividing 题目描述 Problem - …

索引(数据库优化)事务

索引 事务 Spring事务管理 上图模拟的异常为运行时异常 加上这个配置之后如果回滚会显示下面异常信息 事务进阶

数模打怪(八)之图论模型

一、作图 图的数学语言描述: G( V(G), E(G) ),G(graph):图,V(vertex):顶点集,E(edge):边集 1、在线作图 https://csac…

【单词搜索】python刷题记录

R2-回溯:DFS剪枝. class Solution:def exist(self, board: List[List[str]], word: str) -> bool:#回溯经典问题&#xff1a;DFS剪枝解决mlen(board)nlen(board[0])def dfs(i,j,k):#3种剪枝策略if not 0<i<m or not 0<j<n or board[i][j]!word[k]:return Falsei…

whaler_通过镜像导出dockerfile

1、Whaler简介 Whaler:从镜像导出Dockerfile&#xff0c;whaler英文释义捕鲸船。 2、下载安装 # wget -cO /usr/local/bin/whaler https://github.com/P3GLEG/Whaler/releases/download/1.0/Whaler_linux_amd64 3、赋予可执行权限 [rootlocalhost ~]# chmod x /usr/local/…

学习测试11-移动自动化(略)

安卓SDK 链接: https://pan.baidu.com/s/1P4v9K2RYAGEoA5M_93hHlQ?pwdqsbu 提取码: qsbu 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 记得配置环境变量 下载Appium软件 hub网址&#xff1a;https://github.com/appium/appium-desktop/releases 链接: https…

c++入门----类与对象(中)

OK呀&#xff0c;家人们承接上文&#xff0c;当大家看过鄙人的上一篇博客后&#xff0c;我相信大家对我们的c已经有一点印象了。那么我们现在趁热打铁再深入的学习c入门的一些知识。 类的默认成员函数 首先我们学习的是我们的默认函数。不知道大家刚读这个名词是什么反应。默认…

基于Shell脚本实现文件定时拷贝

需要开发一个需求&#xff0c;将服务器A的 批量数据文件 定时同步 到远程服务器B中&#xff0c;这里我们的基本思路为&#xff1a; 服务器A&#xff1a;存放数据文件服务器B&#xff1a;部署shell脚本&#xff0c;从服务器A中拉取文件至本地目录中。 注意&#xff1a;这里也可…

DDR3布线时候的经验总结

摆放BGA下面的滤波电容的时候注意不要让两个电容的电源和地对着头放&#xff0c;手工焊接时候容易短路 阻抗层必须是实心铜皮覆盖&#xff1a; &#xff08;3&#xff09;阻抗线一定要有阻抗参考层&#xff0c;一般以相邻的接地或电源层做参考层&#xff08;如顶层阻抗线&…

【React】详解classnames工具:优化类名控制的全面指南

文章目录 一、classnames的基本用法1. 什么是classnames&#xff1f;2. 安装classnames3. 导入classnames4. classnames的基本示例 二、classnames的高级用法1. 动态类名2. 传递数组3. 结合字符串和对象4. 结合数组和对象 三、实际应用案例1. 根据状态切换类名2. 条件渲染和类名…

解决腾讯云服务器登录宝塔面板忘记密码

文章目录 1.问题描述2.解决方案&#xff1a;3.总结 1.问题描述 宝塔忘记了密码&#xff0c;在腾讯云面板输入bt打算修改密码显示报错 2.解决方案&#xff1a; 输入如下指令 sudo bt再选择5即可修改密码&#xff08;如下图&#xff09; 3.总结 本质原因是自己直接输入bt…

【运算放大器】输入电压范围与输出电压范围

概述 总结运算放大器的输入电压范围和输出电压范围基本理论。 总结于《你好&#xff0c;放大器初识篇》。 文章目录 概述一、输入电压范围&#xff08;Input Voltage Range&#xff09;二、输出电压范围&#xff08; V O H / V O L V_{OH}/V_{OL} VOH​/VOL​ 或者 Swing fro…

Keras入门:一维线性回归问题

目录 一、一维变量线性回归 1. 数据生成 2. 建立训练模型 3. 作图 4. 完整代码 一、一维变量线性回归 1. 数据生成 import keras import numpy as np import matplotlib.pyplot as plt #matplotlib inline xnp.linspace(0, 100, 30) #0~100之间&#xff0c;生成30个数 y…

前端JS特效第58波:洋葱剥皮文本变形特效

洋葱剥皮文本变形特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>Onion Skinning Text Morphing</title><link…