- PE结构中的地址互转,这次再来系统的复习一下关于PE结构中各种地址的转换方式,最终通过编程来实现自动解析计算,最后将这个功能集成到我的迷你解析器中,本章中使用的工具是上次讲解PE结构文章中制作的CMD迷你结构解析器,如果不知道参数的基本使用请看前一篇。将VA地址转换为FOA文件偏移: VA就是虚拟地址,转换为FOA文件偏移,其手工计算过程如下所示。首先需要得到 ImageBase(镜像基址)... PE结构中的地址互转,这次再来系统的复习一下关于PE结构中各种地址的转换方式,最终通过编程来实现自动解析计算,最后将这个功能集成到我的迷你解析器中,本章中使用的工具是上次讲解PE结构文章中制作的CMD迷你结构解析器,如果不知道参数的基本使用请看前一篇。将VA地址转换为FOA文件偏移: VA就是虚拟地址,转换为FOA文件偏移,其手工计算过程如下所示。首先需要得到 ImageBase(镜像基址)...
- PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等。首先我们先来演示一下内存VA地址与FOA地址互相转换的方式,通过使用WinHEX打开一个二进制文件,打开后我们只需要关注如下蓝色注释为映像建议装入基址,黄色... PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等。首先我们先来演示一下内存VA地址与FOA地址互相转换的方式,通过使用WinHEX打开一个二进制文件,打开后我们只需要关注如下蓝色注释为映像建议装入基址,黄色...
- 多寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。如:可将寄存器列表保存到堆栈,也可将寄存器列表从堆栈中恢复。这种指令有两个特殊用法:(1)允许操作系统加载或存储用户模式寄存器来保护或恢复用户处理状态。(2)作为异常处理返回的一部分,完成从SPSR中恢复CPSR。这种指令与单寄存器存取指令相比,多寄存器数据... 多寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。如:可将寄存器列表保存到堆栈,也可将寄存器列表从堆栈中恢复。这种指令有两个特殊用法:(1)允许操作系统加载或存储用户模式寄存器来保护或恢复用户处理状态。(2)作为异常处理返回的一部分,完成从SPSR中恢复CPSR。这种指令与单寄存器存取指令相比,多寄存器数据...
- 通过利用反汇编库,并使用python编写工具,读取PE结构中的基地址偏移地址,找到OEP并计算成FOA文件偏移,使用反汇编库对其进行反汇编,并从反汇编代码里查找事先准备好的ROP绕过代码,让其自动完成搜索,这里给出实现思路与部分代码片段。十六进制转换器 可自行添加上,文件与偏移对应关系,即可实现指定位置的数据转换,这里给出坑爹版实现,自己晚膳吧。#coding:utf-8import os,... 通过利用反汇编库,并使用python编写工具,读取PE结构中的基地址偏移地址,找到OEP并计算成FOA文件偏移,使用反汇编库对其进行反汇编,并从反汇编代码里查找事先准备好的ROP绕过代码,让其自动完成搜索,这里给出实现思路与部分代码片段。十六进制转换器 可自行添加上,文件与偏移对应关系,即可实现指定位置的数据转换,这里给出坑爹版实现,自己晚膳吧。#coding:utf-8import os,...
- 寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令: LDR R0,[R1] /*R0←[R1]*/ STR R0,[R1] /*[R1]←R0*/第一条指令将以R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到以R1的值为地址的存储器中。ARM的数据传送指令都是基于寄存器间接寻址,即通过Load/Store完成... 寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令: LDR R0,[R1] /*R0←[R1]*/ STR R0,[R1] /*[R1]←R0*/第一条指令将以R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到以R1的值为地址的存储器中。ARM的数据传送指令都是基于寄存器间接寻址,即通过Load/Store完成...
- ARM指令集是32位的,程序的启动都是从ARM指令集开始。主要是以下三个方面:指令分类及指令格式条件执行指令集编码 指令分类及指令格式ARM指令使用的基本格式如下:〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉}< > 是必须项 , {}是可选项指令格式中符号说明:opcode操作码;指令助记符,如ADD、STR等。cond 可选的条件码;执行条件,如E... ARM指令集是32位的,程序的启动都是从ARM指令集开始。主要是以下三个方面:指令分类及指令格式条件执行指令集编码 指令分类及指令格式ARM指令使用的基本格式如下:〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉}< > 是必须项 , {}是可选项指令格式中符号说明:opcode操作码;指令助记符,如ADD、STR等。cond 可选的条件码;执行条件,如E...
- LyScript 插件集成的内置API函数可灵活的实现绕过各类反调试保护机制,前段时间发布的那一篇文章并没有详细讲解各类反调试机制的绕过措施,本次将补充这方面的知识点,运用LyScript实现绕过大多数通用调试机制,实现隐藏调试器的目的。 LyScript 插件集成的内置API函数可灵活的实现绕过各类反调试保护机制,前段时间发布的那一篇文章并没有详细讲解各类反调试机制的绕过措施,本次将补充这方面的知识点,运用LyScript实现绕过大多数通用调试机制,实现隐藏调试器的目的。
- 内联函数 1.概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销内联函数提升程序运行的效率。在C语言中,我们为了减少栈帧的开销,我们可以通过宏函数,没有栈帧消耗,在预处理的阶段就被替换了,就没有栈帧的消耗了(比如频繁调用小函数的时候)而在C++中,我们是通过inline内联函数解决这个问题的。为什么C++会将C语言的宏函数替换... 内联函数 1.概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销内联函数提升程序运行的效率。在C语言中,我们为了减少栈帧的开销,我们可以通过宏函数,没有栈帧消耗,在预处理的阶段就被替换了,就没有栈帧的消耗了(比如频繁调用小函数的时候)而在C++中,我们是通过inline内联函数解决这个问题的。为什么C++会将C语言的宏函数替换...
- 首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读写操作,此类读写属于有痕读写,多数驱动保护都会将这个地址改为无效,此时CR3读写就失效了,当然如果能找到CR3的正确地址,此方式也是靠谱的一种读写机制。 首先CR3是什么,CR3是一个寄存器,该寄存器内保存有页目录表物理地址(PDBR地址),其实CR3内部存放的就是页目录表的内存基地址,运用CR3切换可实现对特定进程内存地址的强制读写操作,此类读写属于有痕读写,多数驱动保护都会将这个地址改为无效,此时CR3读写就失效了,当然如果能找到CR3的正确地址,此方式也是靠谱的一种读写机制。
- 1 8253介绍 1.1 计数器和定时器的区别定时器:系统日时钟、内存刷新、控制扬声器。计数器:对外设提供的脉冲信号计数。相同点:对脉冲进行计数。不同点:脉冲的时间间隔是否有规律,定时器有,计数器没有。 1.2 8254 功能①三个独立的16位计数器②每个计数器可安二进制或者十进制编程③每个计数器可编程6种不同的工作模式④每个计数器计数频率最高为10MHz⑤==读回功能==(8253没有)... 1 8253介绍 1.1 计数器和定时器的区别定时器:系统日时钟、内存刷新、控制扬声器。计数器:对外设提供的脉冲信号计数。相同点:对脉冲进行计数。不同点:脉冲的时间间隔是否有规律,定时器有,计数器没有。 1.2 8254 功能①三个独立的16位计数器②每个计数器可安二进制或者十进制编程③每个计数器可编程6种不同的工作模式④每个计数器计数频率最高为10MHz⑤==读回功能==(8253没有)...
- 在笔者上一篇文章`《驱动开发:内核监视LoadImage映像回调》`中`LyShark`简单介绍了如何通过`PsSetLoadImageNotifyRoutine`函数注册回调来`监视驱动`模块的加载,注意我这里用的是`监视`而不是`监控`之所以是监视而不是监控那是因为`PsSetLoadImageNotifyRoutine`无法实现参数控制,而如果我们想要控制特定驱动的加载则需要自己做一些事情来 在笔者上一篇文章`《驱动开发:内核监视LoadImage映像回调》`中`LyShark`简单介绍了如何通过`PsSetLoadImageNotifyRoutine`函数注册回调来`监视驱动`模块的加载,注意我这里用的是`监视`而不是`监控`之所以是监视而不是监控那是因为`PsSetLoadImageNotifyRoutine`无法实现参数控制,而如果我们想要控制特定驱动的加载则需要自己做一些事情来
- 前言时至今日,如果你想当一名程序员,入门学习编程。你有众多的开发语言可以选择,从 Tiobe 编程语言趋势版可以看到,比较流行的有:Python、C、C++、Java、C#、JavaScript、SQL、Swift...做选择从来不是容易的事情,所以你可能会问,我该学哪一门语言?在我们问自己该学哪一门语言之前,不如再往前追问一句:为啥会有这么多语言?其实,每一门语言被设计出来都是有原因的,都... 前言时至今日,如果你想当一名程序员,入门学习编程。你有众多的开发语言可以选择,从 Tiobe 编程语言趋势版可以看到,比较流行的有:Python、C、C++、Java、C#、JavaScript、SQL、Swift...做选择从来不是容易的事情,所以你可能会问,我该学哪一门语言?在我们问自己该学哪一门语言之前,不如再往前追问一句:为啥会有这么多语言?其实,每一门语言被设计出来都是有原因的,都...
- ✍前言HelloHello,大家好,今天我们来一起来探索数据的存储问题,我将大概用2篇博客来写这块的内容,今天,利用这一篇先来完成一部分,介绍数据类型,整形在内存中的存储:原码、反码、补码,以及大小端字节序。数据的存储这块内容还是有点难度的。但是学起来是真的有趣,让我们一起来看一看把!💖 🍁数据类型数据类型,一个经常说起的东西,我们前面了解过基本的数据类型:==char //字... ✍前言HelloHello,大家好,今天我们来一起来探索数据的存储问题,我将大概用2篇博客来写这块的内容,今天,利用这一篇先来完成一部分,介绍数据类型,整形在内存中的存储:原码、反码、补码,以及大小端字节序。数据的存储这块内容还是有点难度的。但是学起来是真的有趣,让我们一起来看一看把!💖 🍁数据类型数据类型,一个经常说起的东西,我们前面了解过基本的数据类型:==char //字...
- 基本了解C语言的基础知识,对C语言有一个大概的认识。每个知识点就是简单认识,不做详细讲解 基本了解C语言的基础知识,对C语言有一个大概的认识。每个知识点就是简单认识,不做详细讲解
- 【摘要】诸如此类的表达式(++i) + (++i) + (++i),很多学校都喜欢用在学生的期末考里,看似经典的考题,有没有可能本身就是错误的呢?这种错误并不是语法错误,是可以正常运行的,这就造成了“它是正确的编程”这种假象 【摘要】诸如此类的表达式(++i) + (++i) + (++i),很多学校都喜欢用在学生的期末考里,看似经典的考题,有没有可能本身就是错误的呢?这种错误并不是语法错误,是可以正常运行的,这就造成了“它是正确的编程”这种假象
上滑加载中
推荐直播
-
OpenHarmony应用开发之网络数据请求与数据解析
2025/01/16 周四 19:00-20:30
华为开发者布道师、南京师范大学泰州学院副教授,硕士研究生导师,开放原子教育银牌认证讲师
科技浪潮中,鸿蒙生态强势崛起,OpenHarmony开启智能终端无限可能。当下,其原生应用开发适配潜力巨大,终端设备已广泛融入生活各场景,从家居到办公、穿戴至车载。 现在,机会敲门!我们的直播聚焦OpenHarmony关键的网络数据请求与解析,抛开晦涩理论,用真实案例带你掌握数据访问接口,轻松应对复杂网络请求、精准解析Json与Xml数据。参与直播,为开发鸿蒙App夯实基础,抢占科技新高地,别错过!
回顾中 -
Ascend C高层API设计原理与实现系列
2025/01/17 周五 15:30-17:00
Ascend C 技术专家
以LayerNorm算子开发为例,讲解开箱即用的Ascend C高层API
回顾中
热门标签