恢复平衡0x8b,0xff,0x55,0x8b,0xec
简单inline hook ObReferenceObjectByHandle保护进程和屏蔽文件执行
时 间:2008-05-30,19:16 链 接:http://bbs.pediy.com/showthread.php?t=65731
// ***************************************************************
// Author: Sysnap
// Link: http://hi.baidu.com/sysnap
//
// ***************************************************************
好久没弄hook了.最近看到还是很多人弄,而且蓝屏,就把我以前的inline hook的code改下,于是有此文,呵呵,给跟我一样的菜鸟科普用的,高手飘过
现在一般工具的进程保护可能是hook NtOpenProcess和NtTerminateProcess...其实关于进程的话题很多,印象中Sudami同学对这方面面比较懂.下面的代码可以保护进程
WsysCheck--->>>failed
IceSword---->>>failed
Gmer-->>>failed
RUK--->>>failed
SnipeSword---->>>failde(不包括内存清0)
其实这只是简单的进程保护,唯一的好处就是hook导出函数ObReferenceObjectByHandle,稳定...而结束之的方法也有很多,比如内存清0..PspTerminateProcess...PspExitThread等等...其中很多很强大的办法很多anti-rootkit的工具没使用,我想可能就是为了稳定吧.的确
另外,你可以用这个code来屏蔽某些程序的运行...其实这个code的效果就是已经运行的保护其进程,没有运行的屏蔽其运行....代码写得很草/.对系统性能也有一定影响,自己根据需要再改下吧...
代码就是inline hook ObReferenceObjectByHandle使其跳到T_ObReferenceObjectByHandle中
__declspec(naked) T_ObReferenceObjectByHandle(
IN HANDLE Handle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_TYPE ObjectType OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
OUT PVOID *Object,
OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
)
{
_asm
{
mov edi,edi------>>>执行被修改的前5个字节
push ebp
mov ebp,esp
push [ebp+0x1c]------>>>参数压栈
push [ebp+0x18]
push [ebp+0x14]
push [ebp+0x10]
push [ebp+0xc]
push [ebp+8]
call MyObReferenceObjectByHandle -------->>>>调用我们的功能函数
cmp eax,1
jz end
mov eax,ObReferenceObjectByHandle -------->>>>正常运行原来的函数
add eax,5
jmp eax
end:
mov [ebp+8],-1------>>>>如果不想让这个函数正常运行..无效句柄就可以
mov eax,ObReferenceObjectByHandle
add eax,5
jmp eax
}
对原来函数是否要让其正常运行的判断由MyObReferenceObjectByHandle完成
int MyObReferenceObjectByHandle(
IN HANDLE Handle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_TYPE ObjectType OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
OUT PVOID *Object,
OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
)
{
PEPROCESS Process;
KIRQL oldIrql;
int JmpOffSet;
unsigned char Code[5]={0x8b,0xff,0x55,0x8b,0xec};//用来恢复现场
unsigned char JmpCode[5] = { 0xe9, 0x00, 0x00, 0x00, 0x00 };
if(*PsProcessType==ObjectType)//判断句柄所属对象类型是不是*PsProcessType
{
oldIrql = KeRaiseIrqlToDpcLevel();
__asm
{
CLI
MOV eax, CR0
AND eax, NOT 10000H
MOV CR0, eax
}
RtlCopyMemory ( ObReferenceObjectByHandle, Code, 5 );//恢复inline hook以便正确调用ObReferenceObjectByHandle
///
ObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,&Process,NULL);
if (_stricmp((char*)((char*)Process+0x174), ProtectName) == 0 )//判断是不是我们要保护的进程
{
JmpOffSet= (char*)T_ObReferenceObjectByHandle - (char*)ObReferenceObjectByHandle - 5;
RtlCopyMemory ( JmpCode+1, &JmpOffSet, 4 );
RtlCopyMemory ( ObReferenceObjectByHandle, JmpCode, 5 );
__asm
{
MOV eax, CR0
OR eax, 10000H
MOV CR0, eax
STI
}
KeLowerIrql(oldIrql);
return 1;
}
///
//否则再次HOOK这个函数
JmpOffSet= (char*)T_ObReferenceObjectByHandle - (char*)ObReferenceObjectByHandle - 5;
RtlCopyMemory ( JmpCode+1, &JmpOffSet, 4 );
RtlCopyMemory ( ObReferenceObjectByHandle, JmpCode, 5 );
__asm
{
MOV eax, CR0
OR eax, 10000H
MOV CR0, eax
STI
}
KeLowerIrql(oldIrql);
}
return 0;
}
恢复平衡0x8b,0xff,0x55,0x8b,0xec相关推荐
- 关于Win7 x64下过TP保护(应用层)(转)
非常感谢大家那么支持我上一篇教程. Win10 快出了,所以我打算尽快把应用层的部分说完. 调试对象:DXF 调试工具:CE.OD.PCHunter.Windbg 调试先言:TP的应用层保护做得比较多 ...
- [转载] 关于Win7 x64下过TP保护的一些思路,内核层过保护,驱动过保护
首先特别感谢梦老大,本人一直没搞懂异常处理机制,看了他的教程之后终于明白了. 在他的教程里我学到了不少东西. 第一次在论坛发帖,就说说Win7 x64位下怎么过TP保护.如果有讲错的地方,还望指出. ...
- IDT系列:(二)中断处理过程,使用bochs调试IDT中的中断服务程序
一.中断处理的过程 根据Intel 64 and IA-32 Architectures Software Developer's Manual 的介绍,在中断或异常产生是,CPU会将当前执行的指令( ...
- D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法
欢迎转载,转载请注明出处:http://blog.csdn.net/gnorth/article/details/9327971 说白了,也就是HOOK掉Present,这种代码,其实百度上某些地方有 ...
- 用c++编写破解Windows密码程序
用c++编写破解Windows密码程序(缺点只能破解当前电脑的密码) .cpp文件 #include "CrackWinPassword.h" #pragma warning(di ...
- C/C++ 到 shellcode 过程
最简单的弹出cmd代码 1 #include<stdio.h>2 #include <windows.h>3 void main()4 {5 system("star ...
- 红黑树:自平衡的二叉查找树
前一篇博文中写道,二叉查找树是一种具有较高性能的符号表实现,在理想情况下它可以保证查找.插入和删除操作的时间复杂度在对数级别.二叉查找树可以动态地插入和删除元素,在插入和删除操作的过程中,二叉查找树的 ...
- pid算法通俗解释,平衡车,倒立摆,适合不理解PID算法的人来看!
先插句广告,本人QQ522414928,不熟悉PID算法的可以一起交流学习,随时在线 http://liuxinyu520zhuanshu.qzone.qq.c ...
- 《恋上数据结构第1季》平衡二叉搜索树、AVL树
AVL树 二叉搜索树缺点分析 改进二叉搜索树 平衡(Balance) 理想平衡 如何改进二叉搜索树? 平衡二叉搜索树(Balanced Binary Search Tree) AVL树 BST 对比 ...
最新文章
- 何恺明等人提TensorMask框架:比肩Mask R-CNN,4D张量预测新突破
- 1010 [HNOI2008]玩具装箱toy
- Codeforces 482E ELCA (LCT)
- 前K个高频元素(top k)(TX)
- LINUX下的RAID使用
- directly test Gateway frontend service in AG3 SICF
- 去中心化存储项目Sia计划于2月初启动Sia基金会
- git 报错does not have a commit checked out
- 基于深度学习的青菜病害区域图像语义分割与定位
- python如何看字符串长度_Python如何查找字符串的长度?(代码示例)
- matlab怎么编写风雨荷载时程,风雨荷载作用下输电塔动力响应分析
- T检验、卡方检验、F检验
- java源代码审计报告_审计档案管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
- 算是我看源码时的一个小技巧吧~
- 《那些年啊,那些事——一个程序员的奋斗史》——28
- 计算机显示在屏幕上怎么取消,电脑显示屏显示的九宫格怎样取消掉
- 编写iptables模块实现不连续IP地址的DNAT-POOL
- buu firmware
- 提示猜数字范围python_Python 猜数字游戏
- 酒链世界为何会火起来?酒链世界是什么?
热门文章
- 降雷皇(最长上升子序列数量)解题报告
- 有效解决solidworks无法获得下列许可solidworks standard。使用此许可文件不支持此版本(-21.126.0)
- iOS推送证书显示“此证书不受信任”
- 微软对联服务器关闭了吗,新浪与微软签中文对联生成器许可协议
- VM 16 Pro 遇到VPMC无法启动导致虚拟机无法启动求大神赐教!
- 香港金曲奖分析(1983-2017 by SIRMAN)
- OpenCV--性别年龄预测(附源码)
- 几种常用的接口协议的积累,欢迎补充
- html地图添加marker,腾讯地图添加多marker标注样式
- 减少无线链接切换导致数据体验变差的技术简介