0x01 核心代码
父进程:
HANDLE hRead;
HANDLE hWrite;
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
if(!CreatePi...
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 ...
#include <windows.h>
#include <winnt.h>
用#include <winnt.h> 记得前面加上 #include <windows.h>
调试了半天, 我去!!!
一.废话
最近因为公司的项目需要,顺带的学习了一点和PELoader相关的东西,恰见网上正在沸沸扬扬的谈论虚拟脱壳。本人不才,实在是没能力也没精力去写一个真正意义上的虚拟机,因此尝试做了一个简单而偷懒的PE加载器。
这个PE加载器也可以看做是VM的前身吧。我想它可以成为一个简易脱壳工具或者用户态的进程内调试器基础。
二.做这个东西干嘛?
1.公司的项目需要实现但进程内多插件并发运行,也就是说,1个PID需要同时给n个进程使用,这牵扯到更麻烦的进程内内存切换工作。
2.实现反向进程注入,隐藏进程,这样做的RK更不容易被发现。
3.自从离开了安全的伤心地之后,一直堕落于做IM软件的Server,...