首页 > 其他分享 >逆向基础知识

逆向基础知识

时间:2023-10-10 11:33:38浏览次数:25  
标签:逆向 调用 函数 基础知识 跳转 字符串 main 断点

逆向基础知识

1.逆向分析Hello World程序

源码

#include <Windows.h>
#include <stdio.h>

int main(int aggc, TCHAR *argv[])
{
    MessageBox(NULL,
        L"Hello World!",
        L"www.baidu.com",
        MB_OK);
    return 0;
}

2.查找main函数

调用main(int aggc, TCHAR *argv[])函数

main(int aggc, TCHAR *argv[])函数汇编

使用运行函数跳转到EntryPoint(系统调用的进入窗口),点击步进,逐步运行,知道弹窗,就可以查找到main函数

加入断点

(步进)进入可以发现传入了四个参数

快捷键使用

指令 快捷键 含义
跳转 Ctrl+G 移动到指定地址,用来查看看代码或内存,运行时不可用
运行 F9 运行(若设置断点,则执行至断点处)
转到上一个 "_" 显示上一个光标的位置
步进 F7 进入函数内部
步过 F8 跳过函数不进入
修改 space 修改汇编代码
断电 F2 设置/取消
运行到返回 Ctrl+F9 执行到ret处
注释 ; 添加注释

3.访问目标地址的4种方法

  • 使用跳转命令(Ctrl+G)
    • 比如跳转到地址003C1000

  • 设置断点(F2)
    • 使用F2设置和取消断点,点击断点界面显示已设置的断点,双击某个断点即可跳转到断点位置

  • 注释(:)
    • 按键盘的";"键可以在指定在地址处添加注释,点击注释窗口可以查找到


  • 标签
    • 按键盘“:”键可以找到已经设置的所有标签


image

image

3.快速查找指定代码的常用方法

代码执行法

有明确特征并且代码量不是很大的情况下推荐使用,例如我们需要查找的是main()函数中调用MessageBox()函数的戴拿

例如 执行到地址003911DF时弹出消息框,那么003911DF这个地址的CALL就是我们定位的一个标记进入内部查看,发现调用MessageBox函数,那么这个CALL就是main()函数

image
image

字符串检索法

假设我们知道一些显示特征,比如调用MessageBox函数,显示Hello World,我们可以使用右键->搜索/字符串(shift+D)查找到模块内所有字符串内容

image

API检索法(1)搜索跨模块调用API

前面的hello world.exe程序执行的时候,弹出消息框,我们可以推测可能调用了WIN32 API函数MessageBox

右键->搜索/当前模块/跨模块调用,双击即可切换到调用地址处
image
image
image
image

API检索法(2)在AP处设置断点

使用跳转指令(Ctrl+G)输入MessageBox然后设置断点之后返回调用

image

双击返回调用

image

调用代码,可以确定是我们查找的函数位置

image

4.使用打补丁方式修改Hello World字符串

修改字符串的两种方法

  1. 直接修改字符串缓冲区
  2. 在其他内存区域生成新字符串并传递给消息函数
1.直接修改字符串缓冲区

image
image
image
image

修改的内容不能超过原有内容,否则会损坏字符串后面的数据

image

保存更改到执行文件

选择补丁->修补文件

image

2.在其他内存区域生成新字符串并传递给消息函数

找一块未使用的NULL填充区,写入内容,然后把地址传递给消息函数
image
image

标签:逆向,调用,函数,基础知识,跳转,字符串,main,断点
From: https://www.cnblogs.com/ZhaoYork/p/17754237.html

相关文章

  • Babel基础知识
    Babel中文官网Babel入门教程-阮一峰Babel博客教程-姜瑞涛Bilibili--系列Babel视频学习教学1.介绍1.1简介Babel是一个JavaScript编译器。Babel是一个工具链,主要用于将采用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧......
  • 解题过程中的基础知识积累
    1、求任意进制:vector<int>vec;while(1){vec.push_back(m%n);//短除法求任意进制。if(m/n==0) break;m/=n;}2、枚举法求最大公约数://求sum与a的最大公约数。for(inti=a;i>=1;--i)//从最大数往前循环。{ if(sum%i==0&&a%i==0)//枚举......
  • 模块化基础知识
    1简介1.1模块将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起。块的内部数据/实现是私有的,只是向外暴露一些接口(方法)与外部其它模块通信一个模块的组成:私有的数据:内部的变量私有的行为(操作数据):内部的函数向外暴露n个行为1.2模块......
  • js1之基础知识
    1简介1.1计算机语言计算机语言指用于人与计算机之间通讯的语言,它是人与计算机之间传递信息的媒介。总的来说,可以分成机器语言,汇编语言和高级语言三大类。实际上计算机最终所执行的都是机器语言,它是由“0”和“1”组成的二进制数,二进制是计算机语言的基础。0=000000001=00......
  • MongoDB基础知识
    1.简介MongoDB官方文档菜鸟教程1、NoSQL(NotOnlySQL),不仅仅是SQL,主要是指非关系型数据库,是对不同与传统的关系型数据库的数据管理系统的统称2、NoSQL用于超大规模数据的存储,这些类型的数据存储吧需要固定的模式,无需多余的操作就可以横向扩展1.2NoSQL和RDBMS的区分......
  • 01webpack基础知识
    1概述1.1什么是webpack1、webpack是一种前端资源构建工具,一个静态模块打包器(modulebundler)。在webpack看来,前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)2、webpack是一个前......
  • 计算机基础知识
    计算机基础知识计算机简介​ 计算机俗称电脑,是第二次世界战争时,美国国防部利用它来进行弹道计算。第一台通用计算机叫做:ENIAC。当时计算机是一个庞然大物,用了18000个电子管,占地170平方米,重达30吨,耗电功率约150千瓦,每秒钟可进行5000次运算。​ 随着时间和科技的不断进步,直到发展......
  • Kubeflow基础知识
    kubeflow基础知识kubeflow简介kubeflow是谷歌开源的MLOps开源平台,其中包含的不同组件代表了机器学习生命周期的不同阶段。下图是kubeflow组织ML工作流程:kubeflow组件介绍1.kubeflowPipelinespipelines是对机器学习工作流的一种描述,当运行一个pipeline时系统会启动一......
  • 【一】基础知识
    【小结】1.汇编指令是机器语言的助记符,同机器指令一一对应。2.每一种CPU都有自己的汇编指令集。3.CPU可以直接使用的信息在存储器中存放4.在存储器中指令和数据没有任何区别,都是二进制信息。5.存储单元从零开始顺序编号。6.一个存储单元可以存储8个bit,即8位二进制数。7.1B......
  • java基础知识总结,javaweb参考资料大全
    Java基础知识总结写代码:1,明确需求。我要做什么?2,分析思路。我要怎么做?1,2,3。3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点:1,该技术是什么?2,该技术有什么特点(使用注意):3,该技术怎么使用。demo4,该技术什么时......