ring3 hook ZwWriteVirtualMemory
typedef LONG NTSTATUS;
typedef NTSTATUS (NTAPI
*PNtZwWriteVirtualMemory) ( IN HANDLE hProcess, IN PVOID BaseAddress, IN
PVOID Buffer, IN ULONG BytesToWrite, OUT PULONG BytesWritten );
PNtZwWriteVirtualMemory ZwWriteVirtualMemory;
BYTE m_OldZwWVMBytes[5];
BYTE m_HookJmpByte[5];
NTSTATUS WINAPI Mine_ZwWriteVirtualMemory( IN HANDLE hProcess, IN
PVOID BaseAddress, IN PVOID Buffer, IN ULONG BytesToWrite, OUT PULONG
BytesWritten )
{
memcpy(ZwWriteVirtualMemory,m_OldZwWVMBytes,sizeof(m_OldZwWVMBytes));
BOOL ret=ZwWriteVirtualMemory(hProcess,BaseAddress,Buffer,BytesToWrite,BytesWritten);
char buf[1024];wsprintf(buf,"ZWWPM : %X %X %X %d
%d",hProcess,BaseAddress,Buffer,BytesToWrite,ret);OutputDebugString(buf);
memcpy(ZwWriteVirtualMemory,m_HookJmpByte,sizeof(m_HookJmpByte));
return ret;
}
VOID _START()
{
ZwWriteVirtualMemory = (PNtZwWriteVirtualMemory)GetProcAddress(::GetModuleHandle("ntdll.dll"),"ZwWriteVirtualMemory" );
CString strMsg;
strMsg.Format("ZwWriteVirtualMemory: %X",ZwWriteVirtualMemory);OutputDebugString(strMsg);
ReadProcessMemory(GetCurrentProcess(),(LPVOID)ZwWriteVirtualMemory,m_OldZwWVMBytes,5,NULL);
strMsg.Format("m_OldRecvBytes: %x %x %x %x %x", m_OldZwWVMBytes[0],
m_OldZwWVMBytes[1], m_OldZwWVMBytes[2], m_OldZwWVMBytes[3],
m_OldZwWVMBytes[4]);OutputDebugString(strMsg);
m_HookJmpByte[0]=0xE9;
DWORD data=(DWORD)Mine_ZwWriteVirtualMemory-(DWORD)ZwWriteVirtualMemory-5;
memcpy(m_HookJmpByte+1,(VOID*)&data,4);
strMsg.Format("JmpByte: %x %x %x %x %x", m_HookJmpByte[0],
m_HookJmpByte[1], m_HookJmpByte[2], m_HookJmpByte[3],
m_HookJmpByte[4]);OutputDebugString(strMsg);
DWORD dwScratch;
VirtualProtectEx(GetCurrentProcess(),(LPVOID)ZwWriteVirtualMemory, 10, PAGE_EXECUTE_READWRITE, &dwScratch);
memcpy(ZwWriteVirtualMemory,m_HookJmpByte,sizeof(m_HookJmpByte));
}
BOOL CInjectDllApp::InitInstance()
{
OutputDebugString("InitInstance");
::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)_START, NULL, 0, NULL);
return CWinApp::InitInstance();
}
ring3 hook ZwWriteVirtualMemory的更多相关文章
- Windows API Hooking in Python
catalogue . 相关基础知识 . Deviare API Hook Overview . 使用ctypes调用Windows API . pydbg . winappdbg . dll inj ...
- Ramnit 蠕虫分析
0x00前言 Ramnit 蠕虫是一种通过可移动驱动器传播的蠕虫.该蠕虫还可以作为后门,允许远程攻击者访问受感染的计算机,通常会寄生在用户的浏览器中,难以察觉,因此每天都有数以万计的用户受其困扰. 分 ...
- ring3下的IAT HOOK
标 题: [原创]ring3下的IAT HOOK作 者: hostzhen时 间: 2013-03-28,11:30:53链 接: http://bbs.pediy.com/showthread.ph ...
- Ring3下Hook NtQueryDirectoryFile隐藏文件
NTSTATUS WINAPI Hook_NtQueryDirectoryFile(IN HANDLE FileHandle,IN HANDLE Event OPTIONAL,IN PIO_APC_R ...
- 驱动插ring3线程执行代码
近日有在写一个小东西 需要在内核态中运行一个WIN32程序 之前提到的插入APC可以满足部分要求 但是一到WIN7 x86平台下就崩溃了WIN7下只能插入第三方的进程 一插入系统进程就崩溃,但是这样满 ...
- Linux fork()、exec() Hook Risk、Design-Principle In Multi-Threadeed Program
目录 . Linux exec指令执行监控Hook方案 . 在"Multi-Threadeed Program"环境中调用fork存在的风险 . Fork When Multi-T ...
- Windows x86/ x64 Ring3层注入Dll总结
欢迎转载,转载请注明出处:http://www.cnblogs.com/uAreKongqi/p/6012353.html 0x00.前言 提到Dll的注入,立马能够想到的方法就有很多,比如利用远程线 ...
- SSDT Hook实现简单的进程隐藏和保护【转载】
原文链接:http://www.blogfshare.com/ssdthook-hide-protect.html 原文作者:AloneMonkey SSDT Hook实现简单的进程隐藏和保护 Alo ...
- 对付ring0 inline hook
对付ring0 inline hook的基本思路是这样的,自己写一个替换的内核函数,以NtOpenProcess为例,就是MyNtOpenProcess.然后修改SSDT表,让系统服务进入自己的函数M ...
随机推荐
- GCD与多线程
GCD与多线程 GCD,全称Grand Central Dispath,是苹果开发的一种支持并行操作的机制.它的主要部件是一个FIFO队列和一个线程池,前者用来添加任务,后者用来执行任务. GCD中的 ...
- 机器学习的Spark与Scala开发简介
一.机器学习常用开发软件:Spark.Scala 1. Spark简介: MLlib包含的库文件有: 分类 降维 回归 聚类 推荐系统 自然语言处理 在线学习 统计学习方法:偏向理论性,数理统计的方 ...
- 横瓜从WP7与WP8不兼容之处预测微软公司在未来20年将会倒闭
横瓜(601069289) 12:40:50 微软频繁升级操作系统版本捞钱,还不向下兼容,其企业的核心竞争力不再是技术,是钱!除了操作系统,其它产品没有任何核心技术和竞争力,微软必死. 横瓜从WP7 ...
- Fixjs实践——标签、按钮控件
Fixjs介绍 Fixjs是一款javascript界面基础框架,主要为开发复杂组件提供底层的框架支持. Fixjs 0.3.0主要增加了文本显示类fixjs.text.TextField 支持的主要 ...
- 使用JDK中的安全包对数据进行加解密
本文以使用DES对称加密算法为例使用jdk对数据进行加密解密. 首先需要了解Provider类,它是jdk引入的密码服务提供者概念,实现了Java安全性的一部分或者全部.Provider 可能实现的服 ...
- java如何避免死锁
在有些情况下死锁是可以避免的.本文将展示三种用于避免死锁的技术: 加锁顺序 加锁时限 死锁检测 加锁顺序 当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生. 如果能确保所有的线程都 ...
- mysql建立、删除索引及使用
同步发布:http://www.yuanrengu.com/index.php/2017-01-13.html 一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少 ...
- smoke.js是一款基于HTML5 Canvas的逼真烟雾特效js插件。通过该js插件,可以非常轻松的在页面中制作出各种烟雾效果。
Smoke.js 是一个浏览器默认警告系统的JavaScript替代品,如果你想要跨浏览器与平台的标准化JavaScript警告窗口,Smoke.js就是你想要的. Smoke.js是一个轻量级且灵活 ...
- 自动布局autolayout和sizeclass的使用
一.关于自动布局(Autolayout) 在Xcode中,自动布局看似是一个很复杂的系统,在真正使用它之前,我也是这么认为的,不过事实并非如此. 我们知道,一款iOS应用,其主要UI组件是由一个个相对 ...
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
syncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主 ...