0x01 核心代码 发送端代码: HANDLE hMapObject; HANDLE hMapView; //创建FileMapping对象 hMapObject = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x1000,TEXT("shared")); if(!hMapObject) { MessageBox(NULL,TEXT("共享内存失败"),TEXT("Error"),MB_OK); ...

阅读全文>>

核心代码: 发送端代码: HWND hwnd = ::FindWindow(NULL,TEXT("接收端窗口名")); if(hwnd == NULL) { MessageBox(0,TEXT("没找到窗口"),TEXT("ERROR"),MB_OK); } else { // 发送消息 //SendMessage(hwnd,WM_USER+0x1,NULL, (LPARAM)100...

阅读全文>>

0x01主要是针对内部函数的hook 这里有需要注意的地方 内部含糊的地址 HOOK的位置 保存现场: pushfd  pushad 原本硬编码的恢复 extern "C" _declspec(naked)void HookProc() { //保存现场 _asm { pushad pushfd } //获取寄存器 _asm { mov reg.Eax,eax mov reg.Ecx,ecx mov reg.Ebx,ebx mov ...

阅读全文>>

0x01 HOOK函数的编写 有一定的格式要求 直接直接hook MessageBoxA 函数格式 int WINAPI NewMessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in message box LPCTSTR lpCaption, // message box title UINT uType // message box sty...

阅读全文>>

写代码的时候注意到的,以前没注意这两个函数的用法 主要区别: LoadLibrary是把一个模块映射进调用进程的地址空间,需要时增加引用计数 而GetModuleHandle是返回一个已经映射进调用进程地址空间的模块的句柄 并不增加引用计数 使用GetModuleHandle可以判断做需要加载的模块是否已经被加载(到调用进程的地址空间). 代码1: typedef void *(__stdcall *pfVirtualAllocEx)(unsigned long, void *, unsigned long, unsigned long, u...

阅读全文>>

0x01 学习进程注入的知识, 调试的代码 代码不是很完整, 已经写了很长的时间了, 终点遇到了各种各样的问题, 好多还没有解决!! 判断EXE在其他线程中运行,直接查询WinMain的地址, 进行比对 修复IAT表, 有些可以实现,修复, 有些事修复不了的, 看什么样的程序, 好多限制 0x02 代码贴上来, 有两段代码, 一段 pack端, 一段exe的back端 自己能看懂, 主要学习思路吧 0x03 代码下载地址 vc_code_20180202.zip

阅读全文>>

写一下方法就可以了, 1、CE查看内存数据, 只要确定内存地址, 就可以查看远程线程中的内存 2、 OD直接附加进程, 点位内存中的位置, 下断点 进行调试 找到自己程序写错的位置,真心很好的调试方法!!

阅读全文>>

测试代码可行, 推荐给大家 #pragma once #include <windows.h> #include <TlHelp32.h> #include "stdio.h" //线程参数结构体定义 typedef struct _RemoteParam { char szMsg[12]; //MessageBox函数中显示的字符提示 DWORD dwMessageBox;//MessageBox函数的入口地址 } RemoteParam, * PRemoteParam; ...

阅读全文>>

0x01 主要功能, 加载一个exe到 一个内存中, 并运行这块内存 0x02 有限制条件, EXE必须具有重定位表, 否则运行失败!! 截图 pid模块还没写完 想把进程移植到指定的 PID中运行! 0x03 关键代码 (有参考价值的代码,  重定位表的修复,  导入表的修复) // 20180118_20.cpp : Defines the entry point for the ap...

阅读全文>>

修改一个程序的过程如下:1、获得进程的句柄 2、以一定的权限打开进程 3、调用ReadProcessMemory读取内存,WriteProcessMemory修改内存,这也是内存补丁的实现过程。下面贴出的是调用ReadProcessMemory的例程 #include <windows.h> #include <tlhelp32.h> BOOL CALLBACK EnumChildWindowProc(HWND hWnd,LPARAM lParam);//枚举记事本中的子窗口 char mess[999999]; int WIN...

阅读全文>>

因为测试源码的失败,这里写一下原理和贴图 0x01 控制进程上下文 GetCurrentThread GetThreadContex 0x02 获取汇编的地址位置,修改Context memcpy [ctx.Ebx+8]内存处存的是外壳进程的加载基址,ctx.Eax存放有外壳进程的入口地址 0x03 __asm{     jmp  addr }

阅读全文>>

测试VirtualAlloc 的函数 一直提示 487 错误  无法解决!! 为了加深对PE文件结构的理解,写了个简单的模拟PE文件加载过程的程序,不过程序有些地方没处理好(资源节处),也存在这些小bug写的分四个文件写的,如下: ReadFile.h : 代码: #include <stdio.h> #include <windows.h> #include <assert.h> HANDLE OpenFile(char *name); int ReadFile(HANDLE ...

阅读全文>>

一.废话 最近因为公司的项目需要,顺带的学习了一点和PELoader相关的东西,恰见网上正在沸沸扬扬的谈论虚拟脱壳。本人不才,实在是没能力也没精力去写一个真正意义上的虚拟机,因此尝试做了一个简单而偷懒的PE加载器。 这个PE加载器也可以看做是VM的前身吧。我想它可以成为一个简易脱壳工具或者用户态的进程内调试器基础。 二.做这个东西干嘛? 1.公司的项目需要实现但进程内多插件并发运行,也就是说,1个PID需要同时给n个进程使用,这牵扯到更麻烦的进程内内存切换工作。 2.实现反向进程注入,隐藏进程,这样做的RK更不容易被发现。 3.自从离开了安全的伤心地之后,一直堕落于做IM软件的Server,...

阅读全文>>