
逆向分析
文章平均质量分 55
幺幺满地乱爬
这个作者很懒,什么都没留下…
展开
-
linux内核获取未导出函数地址的两种方法
第一种是借助于kprobe机制,通过kprobe机制中会调用kallsyms_lookup_name函数并设置到kprobe结构体中返回的原理找到我们需要的函数地址如上逻辑可以看到其实就是调用的kallsyms_lookup_name函数来获取地址存到我们的addr中。原创 2024-06-09 13:07:00 · 380 阅读 · 0 评论 -
3环断链以及断链后的检测方法
我们在3环注入代码很多时候会选择注入dll,因为纯粹的硬编码不方便写出大量功能,而且不容易维护所以很多时候我们会通过各种方式让我们的dll注入到目标地址空间中,其中有一些方式可以不需要我们自己对dll处理重定位而是借助pe加载器让系统帮助我们处理重定位,但是就会导致我们的dll会在目标的peb中可见,也就是留下了痕迹。比如说,我不通过模块链表来检测而是直接搜索内存找到有pe指纹的位置然后根据pe结构查看当前的模块名字,不是我自己的那就说明有人注入了模块进来。这时就可以通过3环断链的方式隐藏这一部分痕迹。原创 2023-09-03 19:13:27 · 865 阅读 · 0 评论 -
利用TLS反调试
今天说一下利用TLS提供的静态绑定回调函数来反调试。原创 2023-08-22 21:59:55 · 819 阅读 · 0 评论 -
硬编码基础三(变长指令的查询方式)
modrm字段的具体信息在白皮书的2.1.5章的2-2表中有详细描述(2-1是16位模式下的这张表)在intel白皮书中的A附录中的A.3章节有一个opcode的map表。modrm的格式是2位的mod 3位的源寄存器 3位的r/m描述。E的意思可以在白皮书的2.1.2章节中找到具体的描述。要说的是当mod=100的时候表明了会跟随sib描述。sib的具体信息在白皮书的2-3的表中存在详细介绍。同理表中的其他写明了寄存器的行也是这样看的。modrm中的rm位决定了是否存在sib。E表示的是寄存器或者内存。原创 2023-08-21 21:48:29 · 851 阅读 · 0 评论 -
硬编码基础二(跳转相关)
今天的指令都是跟eip的变动有关。原创 2023-08-20 23:35:06 · 1012 阅读 · 0 评论 -
硬编码基础一(经典定长指令,寄存器相关)
50~57是push8个32位通用寄存器58~5f是pop8个32位通用寄存器。原创 2023-08-20 22:15:22 · 858 阅读 · 0 评论 -
远程线程注入(简单样例以及原理)
我们今天通过一个简单的测试代码来了解一下模块注入的大体流程。这个模块中主要是创建了一个静态线程对象,循环打印内容。注入的目标是将我们的代码注入到目标进程的地址空间中。首先是没有注入的时候就是一直在打印。下面来看一下我们要注入的模块代码。然后是我们要注入的目标进程的代码。这个代码也很简单,就是循环打印。然后是存放我们的注入动作的代码。接下来我们来看一下注入的效果。原创 2023-08-20 02:00:11 · 934 阅读 · 0 评论 -
Windows内存注入(前置原理)
我们重设的eip可以指向我们插入的内存或是注入的dll地址,在执行我们的代码后在跳转回原先的eip位置(这里有很多种方式,也可以继续上面的操作吧eip设回去,也可以通过远跳转回去都可以)通过Windows提供的获取线程上下文api可以获取到线程当前的寄存器信息,这样我们就可以先暂停线程然后重设eip的值然后将我们更新后的上下文设置到线程里,在让其运行起来。:此函数用于减少目标线程的挂起计数,是其恢复争抢时间片。:此函数用于让目标线程挂起。:此函数用于获取线程上下文。:此函数用于重设线程上下文。原创 2023-08-18 23:27:35 · 601 阅读 · 0 评论 -
vs使用def导出文件简介
配置到导出格式时候可以通过NONANE选项使到处函数的符号名字为空,@X为导出的序号,此序号为导出表中的index,可以通过序号获取此函数的地址。1.首先需要创建一个dll项目,否则没地方配置使用def文件的指向。2.定义一系列函数并创建一个def文件。3.配置使用def文件的指向编译即可。原创 2023-08-13 12:47:18 · 1505 阅读 · 0 评论 -
_declspec(naked) 初试(裸函数)
declspec(naked)修饰可以生成一个“裸”函数, 使用后C编译器将生成不含函数框架的纯汇编代码,裸函数中什么都没有,所以也不能使用局部变量,只能全部用内嵌汇编实现。就是说_declspec(naked)修饰的函数编译器会默认里面全是汇编语句,对于这个函数内部实现编译器不会帮我们做任何处理,在调用的时候默认c调用约定去调用我们的裸函数。大部分时候应用层开发是用不到这个修饰的,不过也可以通过裸函数偶尔来巩固一下汇编也是不错的方式。可以看到外面调用这个test函数的地方是正常的去编译的。原创 2023-08-09 23:11:17 · 921 阅读 · 0 评论 -
保护模式中段选择子权限校验逻辑详解
RPL可能会削弱CPL的作用,例如当前CPL=0的进程要访问一个数据段,它把段选择符中的RPL设为3,这样虽然它对该段仍然只有特权为3的访问权限。RPL说明的是进程对段访问的请求权限(Request Privilege Level),是对于段选择子而言的,每个段选择子有自己的RPL,它说明的是进程对段访问的请求权限。CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs段选择子的后两位的低两位。dpl存在f的位置,拆分是1111。原创 2023-08-05 01:30:12 · 334 阅读 · 0 评论 -
c/c++编译过程
这是最重要的一个功能,c/c++就是借助头文件来实现多个单元之间的符号定义关系,在汇编中会通过.globl来描述一个符号说这个符号在编译之后依旧要保留,说连接器还需要这个符号,而一个单元在编译时会引入自己的头文件也就是函数定义,这部分里大多数函数默认是extern的等同于加了.globl,c++的public也是这个意思,这样编译出来来自头文件所定义的符号就不会丢失其他单元就可以通过引入跟当前单元相同的头文件保留相同的符号来链接这个单元了。里我们简单了解了elf文件的格式,编译就是产出目标文件的过程。原创 2023-06-24 15:30:32 · 1333 阅读 · 1 评论 -
c内嵌汇编实现库函数系列-(strlen函数)
c内嵌汇编实现库函数系列原创 2022-11-25 17:47:52 · 185 阅读 · 0 评论 -
程序编译连接加载过程详解
首先我们打开目标文件看一下上面的图就是目标文件的格式了,这里使用的是010editer,这个二进制编辑器很好用可以看到大致分为三部分,首先是header,然后是sectionheader,最后是symbiktable,下面我们来依次讲一讲这些部分都有什么用。上面蓝色底色的是elfheader的部分,elfheader这里存放的主要是一些描述信息。原创 2023-06-24 05:11:29 · 1091 阅读 · 0 评论 -
逆向分析练习七(反转链表)
逆向分析练习-反转链表原创 2022-12-01 09:11:53 · 295 阅读 · 0 评论 -
逆向分析练习六(实战CrackMe01)
逆向分析练习六-实战CrackMe程序原创 2022-11-28 21:52:09 · 438 阅读 · 0 评论 -
逆向分析练习五(移除链表元素)
逆向练习五,这部分练习可以帮助大家练习到ifelse和while混在一起时怎么分析,以及结构体的分析原创 2022-11-27 19:39:40 · 376 阅读 · 0 评论 -
逆向分析练习四(二叉树的中序遍历)
逆向分析练习第四部分,结构体和递归的练习原创 2022-11-27 15:59:02 · 407 阅读 · 0 评论 -
逆向分析练习三(最长公共前缀)
逆向分析练习原创 2022-11-25 16:12:22 · 267 阅读 · 0 评论 -
逆向分析练习二(回文数判断)
逆向分析练习原创 2022-11-25 14:39:53 · 442 阅读 · 0 评论 -
c/c++基本语法逆向分析
c/c++基本语法通过反汇编深入学习原创 2022-11-23 14:02:54 · 1391 阅读 · 4 评论 -
两数之和算法题(逆向分析练手)
逆向分析练习原创 2022-11-24 17:21:53 · 165 阅读 · 0 评论