首页 > TAG信息列表 > pImage

PE格式: 分析IatHook并实现

Ring 3层的 IAT HOOK 和 EAT HOOK 其原理是通过替换IAT表中函数的原始地址从而实现Hook的,与普通的 InlineHook 不太一样 IAT Hook 需要充分理解PE文件的结构才能完成 Hook,接下来将具体分析 IAT Hook 的实现原理,并编写一个DLL注入文件,实现 IAT Hook 。 在早些年系统中运行的都是DO

PE文件结构从初识到简单shellcode注入

本文首发自:https://tttang.com/archive/1553/ 前言 ​ 将自己学习的PE文件结构进行总结形成文章这件事情,一直躺在我的Notion TodoList里,但是一直是未完成的状态哈哈,拖了那么久也该让它状态变成已完成了。 PE文件简介 ​ PE文件的全称是Portable Executable,意为可移植的可执行的文

GDI+画透明图层(alpha)的png图片

GDI+画透明图层(alpha)的png图片 stdafx加入如下: #include <comdef.h>//初始化一下com口 #include "GdiPlus.h" using namespace Gdiplus; #pragma comment(lib,"gdiplus.lib") 开始初始化: 在app类的声明里(.h)加入: ULONG_PTR m_gdiplusToken; InitInstance()里加入://若没有

关于Qt Quick中将Canvas保存为QImage类型

环境:win + qml(QT版本5.6.0) + msvc2015 由于项目中需要实现将Canvas图像保存为QImage类型的图像,百度了一大圈都搜索不到相关答案,没办法,只能自己一个个的查看文档中是否有相关的接口可以实现。 例如将如下Canvas保存为QImage,方法有三种: Canvas{ property var ctx : ca

PE-资源表

资源表 PE中的相关资源可以通过程序进行深度定位,所获取的二进制字节码与资源脚本语句之间是一一对应的 这些数据可能是源代码内部需要用到的常景,比如 菜单选项、界面描述等;也可能是源代码外部的,比如程序的图标文件、背景音乐文件、配置 文件等,以上这些数据统称为资源。 5.1

PE文件解析_Dos头

 Dos部分主要为现代PE文件可以对早期的DOS文件进行良好兼容存在,其对应结构体为IMAGE_DOS_HEADER,所在头文件为winnt.h typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header     WORD   e_magic;                     // Magic number     WORD   e

扩大节

一、流程 1、打开文件 2、将文件读取到缓冲区(File-> FileBuffer) 3、将文件拉伸(FileBuffer->ImageBuffer) 4、修改SizeOfImage的大小(你要扩大多少,需要内存对齐) 5、申请一块SizeOfImage大小的内存(pNewImageBuffer) 6、将ImageBuffer拷贝到pNewImageBuffer 7、判断VirtualSize

节表解析

一、节表 #define IMAGE_SIZEOF_SHORT_NAME 8 typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //ASCII字符串 可自定义 只截取8个 可以8个字节都是名字 union { //Misc 双字 是该节在没有对齐前的真实尺寸,该值可以

Xlib 应用被覆盖遮挡或者移出屏幕时,获取窗口截图

在https://www.cnblogs.com/chaichengxun/p/15409996.html这篇文章里已经讲过,如果应用窗口位于屏幕外或者被遮挡,xlib不能获取完整的应用窗口截屏,如下     今天就拉解决这个问题。 用到的头文件: #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/extensions/Xcompo

反调试——7——CRC检测

反调试——7——CRC检测 CRC32: CRC的全称是循环冗余校验,作用是为了检测数据的完整性。 CRC32的检测原理: 程序被编译后,代码段是固定的,因为已经被写死了。 我们在调试程序的时候,打断点或者修改代码都会影响CRC32的值,这个时候只需要检测CRC32的某一时刻值和最初的CRC32值是否一

MemLoadLibraryCPP

1 /* 2 * Memory DLL loading code 3 * Version 0.0.3 4 * 5 * Copyright (c) 2004-2013 by Joachim Bauch / mail@joachim-bauch.de 6 * http://www.joachim-bauch.de 7 * 8 * The contents of this file are subject to the Mozilla Public License

百度未整理获取LG函数

获取 LoadLibrary 与 GetProcAddress 地址 直接给出代码: # include<Windows.h> # include<stdio.h> /*获取kernel32.dll的基地址因为vc程序main函数之前会有初始化,所以不能通过堆栈栈顶值获取kernel32.dll中的地址因此通过 PEB 结构获取Kernel32.dll基址代码来自看雪论坛*/

10 在构造函数防止资源泄漏

有以下构造函数和析构函数: BookEntry::BookEntry() : pImage(nullptr) , pClip(nullptr) { pImage = new Image(); pClip = new Clip(); } ~BookEntry() { delete pImage; delete pClip; } 构造函数在初始化列表将指针pImage、pClip置空,然后在函数内为指针初始化

WindowsPE TLS表

typedef struct _IMAGE_TLS_DIRECTORY32 { DWORD StartAddressOfRawData; DWORD EndAddressOfRawData; DWORD AddressOfIndex; // PDWORD DWORD AddressOfCallBacks; // PIMAGE_TLS_CALLBACK * DWORD SizeOfZeroFill;

WindowsPE 导入表

导入表在就是在.rdate 节表当然不绝对 导入表在 数据目录 第2个 导入函数在第13个        可以看到rdata 表 起始2000位置  导入表在2538   iat 在2000 这里的rva 地址都要转换为foa 地址  就是  当前rva-初始rva+foa偏移 就是文件物理偏移位置 通过数据找到导入表位

脱壳与加壳-加壳-3-加壳代码实现

脱壳与加壳-加壳-3-加壳代码实现 壳代码如何存在 壳代码以什么形式存在?壳代码,就是一段指令,我们这里将其编写成为一个dll文件,把他的代码段,当成是壳代码 但是dll文件也是一个PE文件,也会有各自各样的区段,所以可以采用link指令,把所有区段合并成一个区段,然后把这个区段复制过去复制到

IAT HOOK

IAT HOOK 首先IAT(Import Address Table)是一个表,叫导入地址表表,也是就是一个存放导入函数地址的表,dll文件中需要使用的函数地址都会存放到这个表里面,PE文件在硬盘中存储的时候,也就是在没有加载到内存的时候,这个表和INT表的内容一样都是存放的一个需要用到的函数的名称,当被加载进

C/C++ 对代码节的动态加解密

加壳的原理就是加密或者压缩程序中的已有资源,然后当程序执行后外壳将模拟PE加载器对EXE中的区块进行动态装入,下面我们来自己实现一个简单的区块加解密程序,来让大家学习了解一下壳的基本运作原理。 本次使用的工具,依旧是上次编写的PETools: https://www.cnblogs.com/LyShark/p/1296

C/C++ 使用 CRC32 检测内存映像完整性

前面的那一篇文章中所使用的技术只能有效抵抗解密者直接修改硬盘文件,当我们使用动态补丁的时候,那么内存中同样不存在校验效果,也就无法抵御对方动态修改机器码了,为了防止解密者直接对内存打补丁,我们需要在硬盘校验的基础上,增加内存校验,防止动态补丁的运用。 仅对.text代码段进行校

PE文件入门(一)

Shellcode直接注入代码块 使用代码,在文件中将shellcode注入进程序的text节中,也就是代码块中 条件:代码块有足够的空间存下shellcode 思路:获取shellcode的注入位置,然后再通过计算把硬编码应该跳转的地址计算出来  其公式为:要跳转的地址=当前指令的下一条指令地址+5+X——>就可以推

PE复写:模仿PE加载过程

FileBuffer->ImageBuffer->NewBuffer->存盘一.主要函数实现1.PE文件到FileBuffer2.FileBuffer到ImageBuffer3.ImageBuffer->NewBuffer4.NewBuffer->存盘二:测试函数1.测试上述函数,完成PE加载三.执行结果1.在主函数里面执行测试函数2.执行结果 一.主要函数实现 1.PE文件到File

逆向笔记——PE文件【内存中的虚拟相对地址转文件中的相对地址】RVA->FOA

手工 编译一个带有全局变量的exe 这是代码 #include <stdio.h> int globalVar = 0x12345678; void main() { printf("globalVar = %x, RVA=%x\n",globalVar,&globalVar); //RVA=424a30 | FOA=424a30-400000=24a30 } 打印出来的是全局变量globalVar 在内存中的地址 VA=424a30

手写PE结构解析工具

PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等,在PE文件中我们最需要关注,PE结构,导入表,导

扩大节、合并节

如果pe头部没有足够的空间插入一个新的节表,可以考虑扩大最后一个节; 注意是最后一个节,如果扩大中间的节,很可能造成后面的节整体偏移而找不到;   1.扩大节的大概步骤 1】读取文件到缓冲区; 2】拉伸文件镜像; 3】分配一个新的空间:SizeOfImage + Ex; 4】修改最后一个节表的数据:     Siz

节表

1.联合体 有如下的需求:                         我们想存储一个人的学号和身份证号,而且只要存储一个就可以了.                     学号需要一个字节                     身份证需要四个字节