分类: |

peb结构

虽然之前的某篇文章里有写过peb的结构,但我觉得还是有必要把peb的结构清晰的列出来。这样方便我以后用到这个结构的时候查找,也方便其他人搜索。

typedef struct _PEB {


BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
BOOLEAN Spare;
HANDLE Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA LoaderData;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;//
Pointer to RTL_USER_PROCESS_PARAMETERS
structure
PVOID SubSystemData;
PVOID ProcessHeap;
PVOID FastPebLock;
PPEBLOCKROUTINE FastPebLockRoutine;
PPEBLOCKROUTINE FastPebUnlockRoutine;
ULONG EnvironmentUpdateCount;
PPVOID KernelCallbackTable;
PVOID EventLogSection;
PVOID EventLog;
PPEB_FREE_BLOCK FreeList;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[0x2];
PVOID ReadOnlySharedMemoryBase;
PVOID ReadOnlySharedMemoryHeap;
PPVOID ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
BYTE Spare2[0x4];
LARGE_INTEGER CriticalSectionTimeout;
ULONG HeapSegmentReserve;
ULONG HeapSegmentCommit;
ULONG HeapDeCommitTotalFreeThreshold;
ULONG HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PPVOID *ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
PVOID GdiDCAttributeList;
PVOID LoaderLock;
ULONG OSMajorVersion;
ULONG OSMinorVersion;
ULONG OSBuildNumber;
ULONG OSPlatformId;
ULONG ImageSubSystem;
ULONG ImageSubSystemMajorVersion;
ULONG ImageSubSystemMinorVersion;
ULONG GdiHandleBuffer[0x22];
ULONG PostProcessInitRoutine;
ULONG TlsExpansionBitmap;
BYTE TlsExpansionBitmapBits[0x80];
ULONG SessionId;


} PEB, *PPEB;

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 14209

c++ new详解

“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。
new的过程
当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:
class A
{

查看更多...

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 9947

windows 关机过程

1、关机原理
   我们执行关机操作后,通常看到的是系统的关机画面,然后是或短或长的等待,究竟这个关机画面后隐藏怎么样的过程呢?关机其实和开机一样涉及到多个过程,是多个进程,组件之间一个相互协作的过程,下面我们来细致了解一下:
   1)发起关机指令
    当用户发起关机指令时,将调起关机程序,windows xp下是shutdowm.exe,win98和win2000是rundll32.exe,该程序会通知windows子系统进程 csrss.exe,CSRSS.EXE收到通知以后会和Winlogon.EXE做一个数据交换,做好关机的准备工作,接着由Winlogon.EXE 通知CSRSS.EXE开始关闭系统的流程。
    csrss.exe是客户端服务子系统,用以控制windows图形相关子系统;

查看更多...

分类:破解调试 | 固定链接 | 评论: 0 | 查看次数: 10877

Keyboard Hook

Hook is a mechanism, by which a function can intercept events before they reach an application. The function can act on events, modify or discard them. Functions which receive the events are called Filter Functions, every Filter Function is classified by its type. Hooks provide powerful capabilities: Procces or modify every message; Record or play back keyboard and mouse events; Prevent another filter from being called; And many more capabilities... Generally, there are two types of hooks: System-wide, and Thread-specific. The System-wide hook is used for filtering messages of all applications(IE: when writing a key logger). And the Thread-specific hook is used for filtering messages of a specific thread. In this tutorial, I'll cover just System-wide keyboard hook. To set a System-wide hook we need a DLL.

A DLL is an indirectly executable which doesn't have a message loop to receive user input. DLLs are seperate files containing functions(not only) that can be called by programs and other DLLs. To the end-user a DLL is a program that can't be executed directly from the Program Manger(or other Shells), but from the system's point of view, there are two differences between DLLs and applications: DLLs cannot have multiple running instances loaded in memory. and DLLs attach themselves to processes, only application instances are processes. DLL stands for Dynamic-Link Library. Dynamic-Link is a mechanism to link libraries to applications at run time. These libraries(DLLs) reside in their own executable files(.dll) and are not copied into applications' executable files(.exe) as with Static-Link libraries. It's important to understand that a .DLL is loaded into the address space of the specified linking application and not into the global heap! The advantages of using dynamic linking method are:
They can be updated without requiring applications to be recompiled or relinked.
When several applications use the same .DLL, the .DLL is just loaded once for all applications(reducing memory and disk space).

查看更多...

Tags: c语言 代码 windows api vc hook

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 9410

3GP转换器 Pro 3.5 注册码 破解版

[img]attachments/month_1004/g2010417201330.jpg[/img]

原版下载地址:http://www.newhua.com/soft/24065.htm

就提供几个[b]注册码[/b]吧!不提供补丁了!

查看更多...

Tags: 3GP转换器 3GP转换器破解版 3GP转换器注册码

分类:下载专区 | 固定链接 | 评论: 0 | 查看次数: 9403

VC++网络编程

一、Windows Sockets API简介 
VC++对网络编程的支持有socket支持,WinInet支持,MAPI和ISAPI支持等。其中,Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的Berkeley Socket接口(套接字)。 
在桌面操作系统进入Windows时代后,仍然继承了Socket方法。在TCP/IP网络通信环境下,Socket数据传输是一种特殊的I/O,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket()。 
可以这样理解:Socket实际上是一个通信端点,通过它,用户的Socket程序可以通过网络和其他的Socket应用程序通信。Socket存在于一个“通信域”(为描述一般的线程如何通过Socket进行通信而引入的一种抽象概念)里,并且与另一个域的Socket交换数据。Socket有三类。第一种是SOCK_STREAM(流式),提供面向连接的可靠的通信服务,比如telnet,http。第二种是SOCK_DGRAM(数据报),提供无连接不可靠的通信,比如UDP。第三种是SOCK_RAW(原始),主要用于协议的开发和测试,支持通信底层操作,比如对IP和ICMP的直接访问。
二、Windows Socket机制分析 

查看更多...

Tags: c语言 代码 网络 windows api vc

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 8711

Fckeditor漏洞利用方法总结

1.查看编辑器版本
FCKeditor/_whatsnew.html
—————————————————————————————————————————————————————————————

2. Version 2.2 版本

查看更多...

分类:网络安全 | 固定链接 | 评论: 0 | 查看次数: 10805

SendMessage()函数详解

我们先了解一下Windows的消息机制。Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。
举个例子,打开记事本程序,该程序有一个 “文件“菜单。 那么,在运行该程序的时候,如果用户单击“文件菜单“里的“新建“命令, 这个动作将被Windows所捕捉,Windows经过分析得知这个动作应该由我们打开的记事本程序所来处理,然后Windows就发送个消息 譬如我们编程的时候有时用到的 WM_COMMAND的消息给记事本,然后记事本就把这个消息处理掉。 这个过程就是消息处理。
接下来,我们把 SendMessage的完整形式讲一下SendMessage
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
别名

查看更多...

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 9879

c++ 内存加载exe

原理:

1. 把你的程序读要内存

2. 以 Create_SUSPENDED模式CreateProcess打开svchost.exe

查看更多...

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 8726

api hook和pe格式的关系

api hook技术的难点,并不在于hook技术,初学者借助于资料“照葫芦画瓢”能够很容易就掌握hook的基本使用技术。但是如何修改api函数的入口地址?这就需要学习pe可执行文件(.exe,.dll等)如何被系统映射到进程空间中,这就需要学习pe格式的基本知识。windows已经提供了很多数据结构struct帮助我们访问pe格式,借助它们,我们就不要自己计算格式的具体字节位置这些繁琐的细节。但是从api hook的实现来看,pe格式的访问部分仍然是整个编程实现中最复杂的一部分,对于经常crack的朋友不在此列。
假设我们已经了解了pe格式,那么我们在哪里修改api的函数入口点比较合适呢?这个就是输入符号表imported symbols table(间接)指向的输入符号地址。
   下面对于pe格式的介绍这一部分,对于没有接触过pe格式学习的朋友应该是看不太明白的,但我已经把精华部分提取出来了,学习了pe格式后再看这些就很容易了。

pe格式的基本组成
+-------------------+
    | DOS-stub          |    --DOS-头
    +-------------------+
    | file-header       |    --文件头
    +-------------------+
    | optional header   |    --可选头
    |- - - - - - - - - -|
    |                   |
    | data directories |    --(可选头尾的)数据目录
    |                   |
    +-------------------+
    |                   |
    | section headers   |     --节头
    |                   |
    +-------------------+
    |                   |
    | section 1        |     --节1
    |                   |
    +-------------------+
    |                   |
    | section 2        |     --节2
    |                   |
    +-------------------+
    |                   |
    | ...               |
    |                   |
    +-------------------+
    |                   |
    | section n        |     --节n
    |                   |
    +-------------------+
    在上图中,我们需要从“可选头”尾的“数据目录”数组中的第二个元素——输入符号表的位置,它是一个IMAGE_DATA_DIRECTORY结构,从它中的VirtualAddress地址,“顺藤摸瓜”找到api函数的入口地点。
    下图的简单说明如下:
OriginalFirstThunk 指向IMAGE_THUNK_DATA结构数组,为方便只画了数组的一个元素,AddressOfData 指向IMAGE_IMPORT_BY_NAME结构。
IMAGE_IMPORT_DESCRIPTOR数组:每个引入的dll文件都对应数组中的一个元素,以全0的元素(20个bytes的0)表示数组的结束
IMAGE_THUNK_DATA32数组:同一组的以全0的元素(4个bytes的0)表示数组的结束,每个元素对应一个 IMAGE_IMPORT_BY_NAME结构
IMAGE_IMPORT_BY_NAME:如..@Consts@initialization$qqrv. 表示
Unmangled Borland C++ Function: qualified function __fastcall Consts::initialization() 
 
    为了减少这个图的大小,不得已将汇编和c++的结构都用上了。这个图是输入符号表初始化的情形,此时两个IMAGE_THUNK_DATA结构数组的对应元素都指向同一个IMAGE_IMPORT_BY_NAME结构。
    程序加载到进程空间后,两个IMAGE_THUNK_DATA结构数组指向有所不同了。看下图: 


// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=1036&d=cf6de2
始化的,“两个结构都指向同一个IMAGE_IMPORT_BY_NAME”,此时还没有api函数地址 


当PE文件准备执行时,前图已转换成上图。一个结构指向不变,另一个出现api函数地址

    如果PE文件从kernel32.dll中引入10个函数,那么IMAGE_IMPORT_DESCRIPTOR 结构的 Name1域包含指向字符串"kernel32.dll"的RVA,同时每个IMAGE_THUNK_DATA 数组有10个元素。(RVA是指相对地址,每一个可执行文件在加载到内存空间前,都以一个基址作为起点,其他地址以基址为准,均以相对地址表示。这样系统加载程序到不同的内存空间时,都可以方便的算出地址)
    上述这些结构可以在winnt.h头文件里查到。

查看更多...

Tags: pe 格式 汇编 导入表 api 原理 hook

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 10308

API获取自己进程的PID


其实用GetCurrentProcessId()这个api就可以获取PID了


  GetCurrentProcessId

查看更多...

分类:c/c++ | 固定链接 | 评论: 0 | 查看次数: 13522

HOOK_SYSCALL 和 UNHOOK_SYSCALL宏

HOOK_SYSCALL 和 UNHOOK_SYSCALL宏采用被勾住的Zw*函数的地址,获取器索引号,并自动讲SSDT中该索引的相应地址与_Hook函数的地址进行交换。

#define HOOK_SYSCALL(_Function,_Hook,_Orig)\
_Orig=(PVOID)InterlockedExchange((PLONG)\
&MappedSystemCallTable[SYSCALL_INDEX(_Function)],(LONG)_Hook)

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 12427

SYSCALL_INDEX宏

SYSCALL_INDEX宏采用Zw*函数地址并返回它在SSDT中相应的索引号。

#define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 10642

SYSTEMSERVICE()宏

SYSTEMSERVICE()宏采用ntoskrnl.exe导出的Zw*函数的地址,并返回相应的Nt*函数在SSDT中的地址。

#define SYSTEMSERVICE(_func)\
KeSerViceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)_func+1)]

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 10062

IO_STACK_LOCATION 结构

struct _IO_STACK_LOCATION (sizeof=36)
00 byte MajorFunction
01 byte MinorFunction
02 byte Flags
03 byte Control

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 10070

IRP结构详解

IRP结构


图5-1显示了IRP的数据结构,阴影部分代表不透明域。下面是该结构中重要域的简要描述。


MdlAddress(PMDL)域指向一个内存描述符表(MDL),该表描述了一个
与该请求关联的用户模式缓冲区。如果顶级设备对象的Flags域为DO_DIRECT_IO,则I/O管理器为IRP_MJ_READ或
IRP_MJ_WRITE请求创建这个MDL。如果一个IRP_MJ_DEVICE_CONTROL请求的控制代码指定METHOD_IN_DIRECT
或METHOD_OUT_DIRECT操作方式,则I/O管理器为该请求使用的输出缓冲区创建一个MDL。MDL本身用于描述用户模式虚拟缓冲区,但它同
时也含有该缓冲区锁定内存页的物理地址。为了访问用户模式缓冲区,驱动程序必须做一点额外工作。


查看更多精彩图片


图5-1. I/O请求包数据结构


查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 14799

EPROCESS结构

EPROCESS的结构定义
typedef struct _EPROCESS {
KPROCESS Pcb;
NTSTATUS ExitStatus;
KEVENT LockEvent;

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 12519

修改内核对象隐藏进程

修改内核对象隐藏进程
Windows NT/2000/XP/2003操作系统具有描述了进程的可执行对象。Taskmgr.exe列出机器上运行的进程。 ZwQuerySystemInformation 也使用这 些 对象列出运行的进程,修改这 些 对象,可以隐藏进程。
通过遍历 在每 个进程的EPROCESS结构中引用的一个双向链表,EPROCESS结构包含一个具有指针成员FLINK和BLINK的lLIST_ENTRY结构。这两个指针分别指向当前进程描述符的前方和后方进程,通过修改这 两个指针可以隐藏指定进程。
(EPROCESS结构请看http://www.zeroplace.cn/article.asp?id=401)

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 8675

内核级HOOK的几种实现与应用

实现内核级 HOOK 对于拦截、分析、跟踪系统内核起着致关重要的作用。实现的方法不同意味着应用侧重点的不同。如想要拦截 NATIVE API 那么可能常用的就是 HOOK SERVICE TABLE 的方法。如果要分析一些系统调用,那么可能想到用 HOOK INT 2E 中断来实现。如果想要拦截或跟踪其他内核 DRIVER 的调用,那么就要用到HOOK PE 的方法来实现。这里我们更注重的是实现,原理方面已有不少高手在网上发表过文章。大家可以结合起来读。下面以我写的几个实例程序来讲解一下各种方法的实现。错误之处还望各位指正。


1、HOOK SERVICE TABLE 方法:
  这种方法对于拦截 NATIVE API 来说用的比较多。原理就是通过替换系统导

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 10127

Rootkit技术之内核钩子原理[4]

四、内核函数系列 
经过上面的介绍,我们已经了解了系统调用表有关知识,也已知道如何拦截系统调用表中的函数,下面,我们再来了解一下我们要钩取的函数:目标函数。这方面,如果我们不仅了解系统调用表中有哪些函数,还知道这些函数的工作机制就最好了。但实际上,ntdll.dll 中的导出函数有好几百个,别说一个一个的探究,就是把它们都列出来,看着看着头都大了。幸运的是,我们不必了解每个函数,只要了解其所在的系列就行了。为什么这么说?因为微软已经按照函数的功能对Ntdll.dll的导出函数进行了分组,并冠以意义明确的前缀,所以根据函数系列的前缀就能明白它们的大体功能了。下面对这些函数系列进行简单的介绍:

1.KiEtw系列:本系列内核函数用于系统内核,这些函数只能从内核的内部进行调用,常用的有:KiUserCallbackDispatcher、KiRaiseUserExceptionDispatcher、KiUserApcDispatcher、KiUserExceptionDispatcher等。

查看更多...

分类:内核探究 | 固定链接 | 评论: 0 | 查看次数: 9514