自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(142)
  • 收藏
  • 关注

原创 笔记目录(持续更新)

1.验证码:登录验证码绕过:https://blog.csdn.net/qq_41232519/article/details/105089635

2020-03-25 10:54:57 997

原创 远程线程注入

文章目录一、流程二、演示三、完整代码DLL程序:一、流程1、获取进程句柄2、计算Dll路径名长度,并且要加上0结尾的长度3、在目标进程分配内存4、拷贝DLL路径名到目标进程的内存5、获取模块地址6、获取LoadLibraryA函数地址7、创建远程线程,加载DLL8、关闭句柄二、演示1、获取进程句柄//获取进程句柄 hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID); if(hProcess == NUL

2020-10-26 18:15:25 731

原创 远程线程

CreateRemoteThread()HANDLE CreateRemoteThread( HANDLE hProcess, // 进程句柄 LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartA

2020-10-24 18:19:38 221

原创 内存映射文件

文章目录一、内存映射二、内存映射文件之共享一、内存映射1、创建一个文件 //创建一个文件 hFile = CreateFile( lpcFile, //创建文件路径 GENERIC_READ| GENERIC_WRITE, //读写权限 0, //在创建完成到关闭文件之前,其他进程对该文件的操作,0排它 NULL, //安全描述符 OPEN_EXISTING, //总是创建,不管文件存不存在 FILE_ATTRIBUTE

2020-10-23 15:09:33 1201

原创 文件系统

文章目录一、文件系统一、文件系统 文件系统是操作系统用于管理磁盘上文件的方法和数据结构;简单点说就是在磁盘上如何组织文件的方法。二、卷相关API<1> 获取卷GetLogicalDrives()#include "stdafx.h"#include "windows.h"VOID Test(){ DWORD dwLogicalDrives = GetLogicalDrives() ; printf("%x",dwLogicalDrives);}int ma

2020-10-22 12:06:23 149

原创 共享内存申请和释放

文章目录私有内存:独占物理页共享内存:和别人共享物理页CreateFileMapping( INVALID_HANDLE_VALUE,//为NULL时,不与文件关联 NULL,//安全描述符 PAGE_READWRITE,//保护模式(读写的权限) 0,/32位通常为空 BUFSIZ,// MapFileName//名字);g_lpBuff = (LPTSTR)MapViewOfFile( g_hMapFile,//句柄 FILE_MAP_ALL_ACCESS,

2020-10-21 22:06:04 1030

原创 私有内存申请和释放

文章目录一、私有内存和共享内存一、私有内存和共享内存私有内存:独占物理页共享内存:和别人共享物理页#include "stdafx.h"int main(int argc , char* arvc[]){ return ;}被占用地址:LPVOID VirtualAlloc{LPVOID lpAddress, // 要分配的内存区域的地址DWORD dwSize, // 分配的大小(物理页的整数倍,10DWORD flAllocationType, // 分配的类型DW

2020-10-20 15:01:22 262

原创 PE目录

文章目录什么是可执行文件PE文件的两种状态DOS部分PE头RVA与FOA的转换节表代码空白区添加代码新增节导出表导入表重定位表读写文件PE头打印读取->拉伸->还原空白区域添加代码添加节扩大节合并节动态链接打印导出表移动导出表打印重定位表移动重定位表打印导入表导入表注入...

2020-10-20 09:50:36 276

原创 物理内存和虚拟内存

文章目录一、虚拟内存二、虚拟内存地址划分三、物理内存一、虚拟内存1、每个程序都有4G虚拟内存,相当于空头支票2、只有真正要用的时候,才会在物理内存中给你分配一块物理内存3、4kb页式管理,一页是4kb大小二、虚拟内存地址划分<1> 线性地址有4G 但未必都能访问<2> 所以需要记录,哪些地方分配了三、物理内存1、可供使用的物理内存:MmNumberOfPhysicalPages * 4 = 物理内存虚拟内存(硬盘)2、能够识别的物理内存:32位系统

2020-10-19 21:43:11 263

原创 导入表注入

文章目录一 、流程二、演示三、完整代码一 、流程1、File-> FileBuffer2、添加节3、定位导入表4、将导入表移动到新增的节里面5、新增一个导入表6、在导入表后面添加INT表和IAT表7、INT和IAT表指向函数名8、修正导入表9、存盘二、演示1、File-> FileBufferDWORD Size = 0; //用来接收数据大小BOOL isok = FALSE; //用来接收写入磁盘是否成功LPVOID pFileBuffer

2020-10-14 16:53:37 539

原创 打印导入表

文章目录一、流程二、演示三、完整代码四、勿在浮沙筑高台一、流程1、File-> FileBuffer2、定位导入表3、循环导入表4、获取导入表名字5、获取INT表RVA6、获取INT表的地址和序号7、循环打印INT表的内容8、获取IAT表RVA9、获取IAT表的地址和序号10、循环打印IAT表的内容二、演示1、File-> FileBuffer2、定位导入表 PIMAGE_DOS_HEADER pDosHeader = NULL;//DOS头 P

2020-10-12 18:21:33 382 1

原创 移动重定位表

文章目录一、流程二、演示三、完整代码四、勿在浮沙筑高台一、流程1、File-> FileBuffer2、添加节3、定位重定位表4、移动重定位表5、修复重定位的地址6、存盘二、演示1、File-> FileBuffer2、添加节3、定位重定位表 DWORD RelocationFoa = NULL;//重定位表FOA if (pOptionalHeader->DataDirectory[5].VirtualAddress == 0)

2020-10-12 17:58:43 432 5

原创 移动导出表

文章目录一、流程二、演示三、完整代码四、勿在浮沙筑高台一、流程1、File-> FileBuffer2、添加节3、定位导出表4、将导出函数名称表、导出函数地址表、导出函数序号表Rva转Foa5、定位导出函数名称表、导出函数地址表、导出函数序号表6、移动导出函数名称表、导出函数地址表、导出函数序号表7、复制导出函数名称表中的名称8、获取函数名称的偏移9、移动函数名称,并修复导出函数名称表10、移动导出表结构体11、修复导出函数名称表、导出函数地址表、导出函数序号表(Foa转Rva

2020-10-10 17:11:52 304

原创 打印重定位表

文章目录一、流程二、流程三、完整代码一、流程1、File-> FileBuffer2、获取头信息3、获取结构体数组的信息4、获取导出表的地址RVA和FOA5、获取导出表在文件中的地址6、循环重定位表7、获取数据块的FOA8、判断数据块在那个节中9、获取要修改数据的个数和位置10、循环要修改的数据并判断是否要修改11、指向下一个数据块二、流程1、File-> FileBuffer2、获取头信息3、获取结构体数组的信息 //指向数组 PIMAGE_DATA_DIR

2020-10-07 17:04:00 364

原创 打印导出表

文章目录一、流程二、演示三、完整代码一、流程1、创建一个RVA转FOA的函数2、创建一个打印导出表的函数3、File-> FileBuffer4、获取头信息5、获取结构体数组的信息6、获取导出表的地址Rva7、获取导出表的地址Foa8、导出表在文件中的地址9、打印导出表的成员属性10、将导出表Name、AddressOfNames、AddressOfFunctions、AddressOfNameOrdinals的Rva转换成Foa11、 打印导出表文件名12、获取导出函数地址

2020-10-05 20:05:37 596 6

原创 动态链接

文章目录一、创建导出testdll二、新建一个类mydll三、mydll中写要导出的函数四、mydll头文件中写导出的函数五、将生成的testdll.dll和testdll.lib放到工程目录下六、exe程序导入dll一、创建导出testdll二、新建一个类mydll三、mydll中写要导出的函数四、mydll头文件中写导出的函数extern “C” _declspec(dllexport) __stdcall int Plus (int x,int y); 以C 语言导出,内平栈五、

2020-10-04 21:41:05 155

原创 合并节

文章目录一、流程二、演示三、完整代码四、勿在浮沙筑高台一、流程1、File-> FileBuffer2、FileBuffer->ImageBuffer3、修改第一个节的属性4、其余节表初始化为05、将NumberOfSections修改为16、将ShellCode代码复制第一个节表后面7、修正E8、E98、修正OEP(入口程序)9、修改VirtualSize和SizeOfRawData10、ImageBuffer->NewBuffer11、NewBuffer-&gt

2020-10-04 17:59:05 208

原创 扩大节

文章目录一、流程二、 演示三、完整代码一、流程1、File-> FileBuffer2、FileBuffer->ImageBuffer3、修改SizeOfImage的大小(要扩大多少:Ex)4、将修改后的数据复制到pNewImageBuffer5、将ShellCode代码复制到最后一个节的后面6、修正E8、E97、修正OEP(入口程序)8、判断VirtualSize和SizeOfRawData谁大9、 N = (SizeOfRawData或者VirtualSize 内存对齐后

2020-10-04 15:00:00 282 1

原创 添加节

文章目录一、流程二、演示三、完整代码一、流程1、File-> FileBuffer2、FileBuffer->ImageBuffer3、判断空闲区是否有足够的空间存储ShellCode代码4、将NT头到节表往上提5、新增一个节表6、添加属性7、将修改后的数据复制到一个新的缓冲区中去8、将ShellCode代码复制到空闲区9、修正E8、E910、修正OEP(入口程序)11、ImageBuffer->NewBuffer12、NewBuffer->文件二、演示

2020-10-03 11:48:03 1654 6

原创 空白区域添加代码

文章目录一、流程二、演示三、完整代码一、流程1、File-> FileBuffer2、FileBuffer->ImageBuffer3、判断空闲区是否有足够的空间存储ShellCode代码4、将ShellCode代码复制到空闲区5、修正E8、E96、修正OEP(入口程序)7、ImageBuffer->NewBuffer8、NewBuffer->文件二、演示1、看上篇2、看上篇3、判断空闲区是否有足够的空间存储ShellCode代码#define SHELL

2020-09-28 22:18:17 411

原创 读取->拉伸->还原->写入

文章目录一、定义一个函数二、File -> FileBuffer三、FileBuffer -> ImageBuffer四、ImageBuffer -> NewBuffer五、NewBuffer -> 文件六、调用函数七、勿在浮沙筑高台一、定义一个函数Test(){}二、File -> FileBuffer1、定义一些变量2、读取文件,并判断是否读取成功3、读取文件大小4、分配缓冲区5、初始化缓冲区6、将文件数据读取到缓冲区7、关闭文件,并返回缓冲区首地

2020-09-24 18:56:43 411

原创 读写文件

文章目录一、打开文件二、判断打开文件是否失败三、获取文件大小四、申请内存,并判断五、将内容读取到内存,并判断六、将内存中的数据写到磁盘七、释放内存,关闭文件八、完整代码一、打开文件 FILE *pF = fopen("c:/fg.exe","rb"); FILE *pW = fopen("c:/fg1.exe","wb");二、判断打开文件是否失败 if(!pF) { printf("打开文件失败"); return 0; }三、获取文件大小 #include <wind

2020-09-22 22:24:26 262

原创 PE头打印

文章目录一、GetLogicalDrives()#include <windows.h>DWOR dwtLogicalDrives = GetLogicalDrives(); //返回一个数字1311011为存在,0为不存在,从右到左 ,A存在,B不存在,C存在,D存在

2020-09-22 18:29:10 390 2

原创 2020-09-15

// exe.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdlib.h> void ReadPEFile() { FILE *pFile = NULL; int fileSize = 0; int* pFileBuffer = NULL; //打开文件 pFile = fopen("c\\

2020-09-15 21:43:39 67

原创 事件 同步

文章目录一、通知类型一、通知类型 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SD BOOL bManualReset, // reset type BOOL bInitialState, // initial state LPCTSTR lpName

2020-09-13 21:00:03 574

原创 互斥体

文章目录一、互斥体二、互斥体与线程锁的区别三、防止多开一、互斥体CreateMutex() //创建令牌WaitForSingleObject() //获取令牌ReleaseMutex() //释放令牌#include "stdafx.h"#include "windows.h"int main(int argc, char* argv[]){ //创建令牌 HANDLE g_mutex = CreateMutex(NULL,FALSE,"HEHE");

2020-09-13 19:39:08 1708

原创 临界区

文章目录一、线程安全问题二、解决思路三、临界区实现之线程锁:一、线程安全问题每个线程都有自己的栈,而局部变量是存储在栈中的,这就意味着每个线程都有一份自己的“局部变量”,如果线程仅仅使用“局部变量”那么就不存在线程安全问题。#include "stdafx.h"#include "windows.h"int ticket = 10;DWORD WINAPI ThreadProc(LPVOID lpParameter){ while(ticket > 0) { printf("还

2020-09-13 17:17:57 413

原创 线程控制

文章目录一、如何让线程停下来?二、等待线程结束:三、单核如何实现多线程的一、如何让线程停下来?让自己停下来: Sleep()函数让别人停下来: SuspendThread()函数(需要一个参数,句柄)线程恢复: ResumeThread()函数(需要一个参数,句柄)演示:1、为了演示效果明显,创建线程后,停5秒Sleep(5000)2、将线程挂起SuspendThread(hThread)3、然后在停5秒Sleep(5000)4、线程恢复ResumeThread(hThrea

2020-09-13 15:32:44 263

原创 创建线程

文章目录一、什么是线程?二、创建线程三、传参数一、什么是线程?线程是附属在进程上的执行实体,是代码的执行流程。一个进程可以包含多个线程,但一个进程至少要包含一个线程如下就是一个线程:#include "stdafx.h"int main(int argc, char* argv[]){ for(int i=0;i<100;i++) { Sleep(500); printf("-------%d\n",i); } return 0;}二、创建线程创建线程函数HA

2020-09-13 14:42:10 155

原创 进程相关API

文章目录一、ID与句柄二、以挂起的形式创建进程三、模块目录与工作目录四、其他进程相关API一、ID与句柄1、每个进程都有一张私有的句柄表,系统有一张全局句柄表2、进程ID在所有进程都有意义演示:3、此代码打开一个软件,并打印进程ID和句柄#include "stdafx.h"#include "windows.h"//打开子进程函数BOOL CreateProcess(PTCHAR route,PTCHAR szCommandLine){ //定义两个结构体 STARTUPINF

2020-09-13 13:10:05 439

原创 句柄表

文章目录一、什么是内核对象?二、如何管理内核对象?三、每个进程都有一个句柄表四、多进程共享一个内核对象五、句柄是否”可以”被继承一、什么是内核对象?像进程、线程、文件、互斥体、事件等在内核都有一个对应的结构体,这些结构体由内核负责管理。我们管这样的对象叫做内核对象。二、如何管理内核对象?一个进程可以在创建进程、线程、事件、文件,在内核中也会对应一个内核对象(结构体)三、每个进程都有一个句柄表正常管理,因该是将内核对象地址返回来,应用层通过地址访问,但是因为内核对象在0环,如果将值改了,就会

2020-09-13 09:43:56 363

原创 进程

文章目录一、什么是进程二、进程内存空间的地址划分三、进程的组成部分:模块四、进程的创建:一、什么是进程进程提供程序所需的资源,如:数据、代码等等。二、进程内存空间的地址划分三、进程的组成部分:模块在OD中查看进程所包含的模块。每个模块都是一个可执行文件,遵守相同的格式,即PE结构四、进程的创建:任何进程都是别的进程创建的:CreateProcess()进程的创建过程1、映射EXE文件2、创建内核对象EPROCESS3、映射系统DLL(ntdll.dll)4、创建线程内核对象ETH

2020-09-12 23:05:20 168

原创 通用空间(2)

文章目录一、通用控件二、修改属性三、编译准备四、编译五、控件添加列一、通用控件布局如果想要通用控件内容,竖着显示二、修改属性上面控件IDC_LIST_PROCESS下面控件IDC_LIST_MOUDLE三、编译准备导入静态连接库#include <commctrl.h> #pragma comment(lib,"comctl32.lib") 告诉windows加载器,你要加载哪个控件,一般写在程序开始的地方 INITCOMMONCONTROLSEX i

2020-09-12 19:48:29 279

原创 通用控件(1)

文章目录一、创建父窗口二、布局三、修改属性四、生成资源文件五、创建窗口六、处理函数七、编译一、创建父窗口1、创建资源脚本File --> New --> Resource Script2、导入资源脚本头文件Resource Script --> Add Files to Folder --> resource.h3、创建一个窗口resource.h --> 资源脚本 --> Insert --> Dialog二、布局三、修改属性父窗口PE工

2020-09-12 18:35:38 206

原创 进阶

文章目录一、找所有窗口二、下断点三、找处理函数一、找所有窗口程序复杂时,找不到入口程序,想要找到消息处理函数,先找到所有窗口二、下断点所有事件,都会被系统或者消息处理函数,处理找消息处理函数,可以找一个事件,下断点此时程序跑起来,会在鼠标左键抬起时,下断点会跑到系统提供的处理函数那,并不是我们写的处理函数三、找处理函数系统提供的函数最终会调用我们写好的处理函数,所以我们需要在他调用我们处理函数时,再下个断点然后再让程序跑起来,会断点,此时不一定是我们的消息处理函数,但我们可以根据,

2020-09-12 13:11:11 103

原创 按钮

文章目录一、定义按钮一、定义按钮void CreateButton(HWND hwnd){ HWND hwndPushButton; hwndPushButton = CreateWindow ( TEXT("button"), TEXT("普通按钮"), //WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_DEFPUSHBUTTON, WS_CHILD | WS_VIS

2020-09-11 17:48:11 265

原创 基本逆向

一、打印消息类内容1、载入模块#include "stdio.h"void __cdecl OutputDebugStringF(const char *format, ...) { va_list vlArgs; char *strBuffer = (char*)GlobalAlloc(GPTR, 4096); va_start(vlArgs, format); _vsnprintf(strBuffer, 4096 - 1, format

2020-09-11 16:24:22 183

原创 第一个窗口

一、设计一个窗口TCHAR className[] = "My First Window"; // 创建窗口类的对象 WNDCLASS wndclass = {0}; //一定要先将所有值赋值 wndclass.hbrBackground = (HBRUSH)COLOR_MENU; //窗口的背景色 wndclass.lpfnWndProc = WindowProc; //窗口过程函数 wndclass.lpszClassName =

2020-09-09 22:49:27 296

原创 消息流程

1、系统/用户触发的某个动作2、系统将这些信息存储到MSG结构体中3、系统将该消息存储到相关应用程序的消息队列中4、把消息取出来,判断消息是不是我关心的,不是就交给windows处理

2020-09-09 19:33:15 204

原创 事件 消息

文章目录事件 消息说明:事件 消息Windows中的事件是一个“动作”,这个动作可能是用户操作应用程序产生的,也可能是Windows自己产生的.而消息,就是用来描述这些“动作”的,比如:这个动作是什么时候产生的?哪个应用程序产生的?在什么位置产生的?等等。。。Windows为了能够准确的描述这些信息,提供了一个结构体:MSG,该结构体里面记录的事件的详细信息.typedef struct tagMSG { HWND hwnd; UINT message;

2020-09-09 19:20:15 304

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除