02 2021 档案
PE文件解析-导出表
摘要:PE文件解析-导出表 可选PE头中的最后一个字段的数据目录表里面存放了很多PE文件的核心元素,一共是16个元素,最后一个是空的,只有前15个有内容: 数据目录表的第一个元素就是导出表。导出表存放的就是导出的函数,提供一个共外部使用的到处函数的一个表。导出表在可选PE头中的最后一项的数据目录表中的第一
阅读全文
PE文件解析-区段头
摘要:PE文件解析-区段头 有几个区段,就会有几个对应的区段头。区段头存放区段的信息,相当于一本书的目录。 如何访问区段头 通过DOS头拿到NT头,然后再通过NT头拿到标准PE头,标准PE头中存放了PE头的大小,然后通过内存偏移来找到区段头。 也可以利用Windows封装的结构体来处理 void CPeU
阅读全文
PE文件解析-各种头解析代码实现
摘要:1 #ifndef __CPEUTIL_H__ 2 #define __CPEUTIL_H__ 3 #include<Windows.h> 4 #include<iostream> 5 class CPeUtil 6 { 7 public: 8 CPeUtil(); 9 ~CPeUtil(); 10
阅读全文
获取PE头的内容
摘要:1 #include<iostream> 2 #include<Windows.h> 3 using namespace std; 4 5 /* 6 获取可执行程序PE结构的流程 7 1 将一个可执行程序完整拷贝给一个缓冲区来处理 8 2 获取DOS头内容 9 3 利用DOS头中的lfanew偏移找
阅读全文
PE文件解析-PE头解析-2-可选PE头
摘要:PE文件解析-PE头解析-2-可选PE头 其中的空白是为了对齐时的填充值。默认硬盘的对齐是200H,在内存中的默认对齐是1000H 可选PE头 typedef struct _IMAGE_OPTIONAL_HEADER { // // Standard fields. // WORD Magic;
阅读全文
PE文件解析-PE头解析-1-文件头,PE头
摘要:PE文件解析-PE头解析 PE头又叫NT头,是PE文件真正的头部,DOS头只是用来为了兼容以前的DOS系统。 PE头位于DOS Stub后面,以PE00作为起始标记 类似于DOS头的MZ DOS Stub DOS Stub就是DOS头结束到PE头的开始中间的区域,基本上是垃圾区域没啥用,但是加壳的时
阅读全文
PE头解析
摘要:1 #include<iostream> 2 #include<Windows.h> 3 using namespace std; 4 5 int main() 6 { 7 HANDLE hFile = CreateFile(L"E:\\Project_Sum\\CC++\\test\\test\\
阅读全文
PE文件解析-DOS头解析
摘要:PE文件解析-DOS头解析 PE文件是指windows下的可执行文件:.exe .dll(动态链接库) .sys(驱动程序)这类文件 PE文件概览 PE文件大致分类 可以分为DOS头,PE头和区块 DOS头 DOS头对于现在的Windows已经没啥用了,只是用来标记后面的。 DOS头其实就是一个结构
阅读全文
判断文件是否为PE文件-C/C++实现
摘要:1 #include<iostream> 2 #include<Windows.h> 3 using namespace std; 4 5 int main() 6 { 7 HANDLE hFile = CreateFile(L"E:\\Project_Sum\\CC++\\test\\test\\
阅读全文
虚函数逆向分析
摘要:虚函数逆向分析 虚函数的机制 在C++中的类中有虚函数时,编译器会将该类的所有虚函数首地址保存在一张表里面,这张表被称为虚函数地址表,同时会在类中的首四个字节添加一个虚表指针来指向虚函数表的首地址。 分析构造函数可以很清楚的看到: 00F718D0 push ebp 00F718D1 mov ebp
阅读全文
C++————虚函数内存模型
摘要:虚函数内存模型 纯虚函数 在有些情况下,在基类中不对虚函数给出有意义的实现,仅当做统一的变成接口来使用,它的实现留给该基类的派生类去做,这种称为纯虚函数 纯虚函数相当于一个接口模板,一个类中如果定义了纯虚函数,则这个类被称为抽象类,C++规定抽象类不能直接实例化对象 派生类继承父类的纯虚函数后,若给
阅读全文
C++——多态(虚函数)
摘要:C++——多态(虚函数) 多态是面向对象程序设计语言中数据抽象和继承之外的第三个基本特征。 多态的目的就是为了接口重用,也就是说不管传进来的是什么对象,函数都能通过同一个接口调用到适应各自对象的实现方法。 c++支持编译时多态(静态多态)和运行时多态(动态多态),运算符重载和函数重载就是编译时多态,
阅读全文
C++继承——特殊点
摘要:C++继承——特殊点 同名成员 当父子有相同的成员的时候,加上作用域::可以来选择访问具体的成员。 同名函数 如果子类中出现父类同名的函数,那么子类会隐藏掉父类的所有同名函数,如果想要访问的话也添加作用域就好了 同名静态成员 静态成员是在类初始化前就初始化,属于类外的东西,静态成员函数只能使用静态成
阅读全文
调试vs2019代码的流程
摘要:改为否 改为默认值和禁用代码调试 随机地址改为否
阅读全文
反汇编-C/C++中类的反汇编-2-构造函数和析构函数
摘要:反汇编-C/C++中类的反汇编-2-构造函数和析构函数 构造函数 正向代码 #include<iostream>using namespace std;class Base{public: Base() { printf("Base::Base()\n"); }};class Child : pu
阅读全文
反汇编-C/C++中类的反汇编-1-
摘要:类反汇编 类的内存地址对齐 参考之前写的一个博客https://www.cnblogs.com/Sna1lGo/p/14088339.html 类的this指针 每个有关于对象里面的调用,其实都用到了this指针,this指针是一个对象的首地址,然后利用首地址的偏移来访问对象中的成员或者方法(函数)
阅读全文
汇编语言-内联汇编
摘要:汇编语言-内联汇编 也就是把汇编和C/C++合在一起 内联汇编 需要在指令前面添加汇编关键字 行内联汇编 _asm pushad; _asm mov eax,0x12345678; 块内联汇编 _asm { Pushad; Popad; } 利用汇编来实现Windows的函数 在调用自带的函数的时候
阅读全文
X64程序逆向分析
摘要:X64程序逆向分析 x64指令集 x64位程序使用的是x64指令集,64指令集有AMD64,EM64T,IA-64三种。 AMD64是最早推出,intel和惠普联合推出了IA-64但是没有用户起来 Intel直接拷贝AMD的指令集推出了IA-32E后改名为EM64T,也就是intel6。统称为x64
阅读全文
逆向工程-实战第二个程序
摘要:逆向工程-实战第二个程序 下载地址:https://download.csdn.net/download/weixin_43916597/15094003 找到关键代码的技巧 1 通过字符串(不管是ascci还是unicode) 2 通过锁定API 在ollydbg中使用Crtl+G可以给Windo
阅读全文
逆向工程-实战第一个程序
摘要:逆向工程-实战第一个程序 下载地址:https://download.csdn.net/download/weixin_43916597/15093466 分析步骤 1 运行程序,观察程序是什么样子 2 明确自己的目的 3 找到关键代码的位置进行处理 首先运行这个简单的Crack1程序 应该就是一个
阅读全文
反汇编-流程控制语句-2-循环控制语句分析
摘要:反汇编-流程控制语句-2-循环控制语句分析 C/C++中有三种循环语句,分别是do/while/for循环,具体的查看C/C++的语法书 MOVZX、MOVSX指令 MOVZX和MOVSX可以理解为MOV指令的变化,但是也有区别 MOVZX 操作数1,操作数2 MOVSX 操作数1,操作数2 操作数
阅读全文
反汇编-流程控制语句-1-条件控制语句
摘要:反汇编-流程控制语句-1-条件控制语句 所谓的流程控制语句在C/C++中就是,if-else switch for while语句 也就是条件语句和循环语句的合集 if-else 纯if语句 if在c语言中只能判断真或假,真就执行if里面的东西,为假就跳过 void iftest(int a){00
阅读全文
数据结构-图-遍历方式
摘要:数据结构-图-遍历方式 深度优先遍历 代码实现:https://www.cnblogs.com/Sna1lGo/p/14368357.html 广度优先遍历 利用队列来处理,先将根节点入队,后面出一个队,然后把出队的节点的连接节点入队来实现广度优先遍历 实现代码:https://www.cnblog
阅读全文
图的深度优先遍历代码实现
摘要:void DFS_stack(Vertex& TestVertex) { vector<bool> v1;//利用数组来表示是否被遍历过并初始化 v1.resize(MAXNODE); for (int i = 0; i < MAXNODE; i++) { v1[i] = false; } stac
阅读全文
利用队列实现图的广度优先遍历
摘要:void DFS_queue(Vertex & TestVertex) { queue<int> Q1; //创建一个队列来存储节点对应在head的位置 vector<bool> V1; //创建一个数组来表示该节点是否被遍历过 V1.resize(MAXNODE); for (int i = 0;
阅读全文
数据结构-图-存储结构
摘要:数据结构-图-存储结构 图如何利用代码来实现 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。 一个一维数组存储图中顶点信息, 一个二维数组(邻接矩阵)存储图中的边或弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图 从上面可以看出,无向图的边
阅读全文
浙公网安备 33010602011771号