随笔分类 -  Windows_Kernel_Program

摘要:前言 在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用 越来越来广泛。这里我们所谓的虚拟机(VirtualMachine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算 机系统。通过虚拟机软件(比如VMware,VirtualPC,VirtualBox),你可以在一台物理计算机上模拟出一台或多台虚拟的计算机, 这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。攻击者为了提高恶意程序的隐蔽性以及破坏真实主 机的成功率,他们 阅读全文
posted @ 2011-12-27 20:19 Jack204 阅读(1223) 评论(0) 推荐(0)
摘要:CRT运行库启动函数分析: 在进入main函数之前,系统会调用CRT运行库的启动函数,做如下工作: 全局变量已完成初始化, 堆的初始化, I/O也完成了初始化, Main调用 写的绝逼的好阿!!!!很有助于分析代码!! 1.*****CRTStartUp()的框架: ******CRTStartUp() { /*初始化一些操作系统版本的全局变量*/ _osver=GetVersion(); _winminor=(_osver>>8)&0x00FF; _winmajor=_osver&0x00FF; _winver=(_winmajor<<8)+_winm 阅读全文
posted @ 2011-12-26 23:56 Jack204 阅读(996) 评论(0) 推荐(0)
摘要:1 先是mdl的数据结构。2 下面根据用法逐步的讲解mdl数据结构的含义:一般用法,先是 IoAllocateMdl :原型为:最常用的是VirtualAddress和Length。把自己的NonPageable buffer的起始地址传给IoAllocateMdl ,长度也传给他。可是这个函数具体做了啥呢(下面只是些基本的影响理解的部分,具体更多的东西,更细节的东西,自己去看WRK的代码)?根据length和VirtualAddress算出这块buffer总共跨越了几个virtual page。分配MDL的内存----包括上面介绍的struct _MDL(属于head部分),ULONG型bo 阅读全文
posted @ 2011-12-25 14:14 Jack204 阅读(8092) 评论(2) 推荐(1)
摘要:最近将WRK中的一部分代码挪出来自己修改编译做一套(具体是啥不透露)。可是我只修改了很基本的几个部分,hook上之后,代码运行老是出错。1 比如说在程序启动的时候,会调用DbgkCopyDebugObject拷贝explorer.exe中的DebugPort到即将启动进程中的DebugPort中。开始的时候,出现了这个奇怪的问题,按理说explorer.exe中的DebugPort应该为null的,可是运行起来的时候,在我的代码里面的时候,explorer.exe中的代码为DebugPort为0x1,太奇怪了。我是这么查看的:诡异吧,哈哈 使用dt SourceProcess,是查看dt So 阅读全文
posted @ 2011-12-23 11:21 Jack204 阅读(600) 评论(0) 推荐(0)
摘要:linux强调的是进程自主性,windows则是对象自主性,其中线程本身也是一个对象,进程也是,所以一个进程可以操作另外一个进程的地址空间也就不足 为奇了,windows的通信实际上是对象间通信,而linux因为一切围着进程转,最新的内核中断也被线程化了,因此通信就是进程间通信,linux 中进程作为超级容器的意义要比windows的更大些,windows中进程是一个容器,也是一个对象,某种意义上它作为容器的意义是容纳别的对象。 windows的模块化思想更加鲜明。 windows中将缺页,调度等概念从线程,进程中分离,专门安排一个irql级别来处理之,而linux下相应的概念则永远和进程相绑 阅读全文
posted @ 2011-12-21 13:38 Jack204 阅读(374) 评论(0) 推荐(0)
摘要:如何从dll文件导出对应的lib文件? Visual C++ 开发工具提供了两个命令行工具,一个是dumpbin.exe,另一个是lib.exe。利用这两个工具即可从dll导出其对应的lib。 1、在命令行执行: dumpbin /exports yourdll.dll > yourdll.def 2、编辑 yourdll.def 文件,使之格式与.def文件格式一致 。比如: EXPORTS; fn1; fn2; 3、在命令行执行: lib /def:yourd... 阅读全文
posted @ 2011-12-15 10:59 Jack204 阅读(3968) 评论(0) 推荐(0)
摘要:平时我们编写驱动程序用的DEVICE_OBJECT, DEBUG_OBJECT等等都是位于灰色处Object_Body处。Object_Body上面是Object_Header记录着各种该对象的信息。图中的POBJECT只的是平时我们在编写驱动时候得到的对object指针其实是指向对象object_body开头。Object_Header:这里面我现在关心的是:PointerCount和HandleCount,IoManager就是靠这个来记录count数字的。还有一个很特殊的pObjectType的信息:这是我在WRK的wdbg模块中初始化DEBUG_OBJECT的信息。说明Object_T 阅读全文
posted @ 2011-12-08 21:43 Jack204 阅读(494) 评论(0) 推荐(0)
摘要:First we will discuss the issues and the requirements that you should consider when you develop your own DLLs.Types of DLLsWhen you load a DLL in an application, two methods of linking let you call the exported DLL functions. The two methods of linking are load-time dynamic linking and run-time dyna 阅读全文
posted @ 2011-12-06 20:56 Jack204 阅读(263) 评论(0) 推荐(0)
摘要:某些Zw*和Nt*函数既在ntdll.dll中导出又在ntoskrnl.exe中导出,他们有什么区别呢?我们分三部分比较:step 1: ntdll.dll中的Zw*和Nt*有什么区别?step 2: ntoskrnl.exe中的Zw*和Nt*有什么区别?step 3: ntdll.dll中的Zw*与ntoskrnl.exe中的Zw*有什么区别? ntdll.dll中的Nt*与ntoskrnl.exe中的Nt*有什么区别?在下面的讨论中我们以ZwCreateFile和NtCreateFile为例讨论前:我先贴点Kd给我们的答案Part1:kd> u Ntdll! ZwCreateFile 阅读全文
posted @ 2011-12-06 19:22 Jack204 阅读(2880) 评论(1) 推荐(0)
摘要:1 先看C语言中的可以使用的__declspec(...)的参数。下面是拷贝的微软msdn文档中的解释:Extended attribute syntax simplifies and standardizes the Microsoft-specific extensions to the C language. The storage-class attributes that use extended attribute syntax include thread, naked, dllimport, and dllexport.The extended attribute syntax 阅读全文
posted @ 2011-12-05 13:10 Jack204 阅读(308) 评论(0) 推荐(0)
摘要:1 首先是Windows的inline asm形式:void function_name{ .... __asm{ MASM inline syntax; } ....}使用Windows的编译器,cl.exe来编译。默认使用的MASM汇编语法,使用ml.exe进行编译。具体语法查看MSDN。2 如果使用Dev-C++编译器进行编译,查看安装目录,里面全是gcc.exe, as.exe默认使用gnu的标准,即inline asm的形式为:void c_func();int main(int argc, char* argv[]){ printf("%d : %s\n",.. 阅读全文
posted @ 2011-12-05 11:46 Jack204 阅读(729) 评论(0) 推荐(0)
摘要:因为在Windows下使用VS编写程序再编译的方式,对我在linux整天游荡的人来说实在是感觉被IDE束缚着很不爽。我喜欢用emacs写完了然后用一个命令编译完了就ok了。下面是在Windows下的C与Asm互相调用如何编写,编译,链接成功的?前提是确定下面使用的命令路径能够找得到。先贴c代码:A.c#include <stdio.h>#include <stdlib.h>int asm_func(int);int c_var;int main(int argc, char* argv[]){ int r; c_var = 0; r = asm_func(c_var); 阅读全文
posted @ 2011-12-03 14:25 Jack204 阅读(1975) 评论(0) 推荐(0)
摘要:从上周五下午开始进入暂时停止了Linux Kernel的学习,转而投身于Windows驱动编程。就像煤老板说的,我看了那么多了,是时候将所学知识转化为生产力了。怎么说呢?《windows驱动开发技术详解》我花了一天就看了200页,其中的感受不只是惊叹。惊叹的是:Linux内核与Windows内核在一些机制上是那么的相似,尽管在整体上Linux内核是宏内核,而Windows内核是所谓的伪微内核。我深刻的体会到如果遇到什么思想性不懂的东西,还是要回去看《cpu手册》,去看《Linux Device Driver》,去看《Understanding the Linux Kernel》。Linux是开 阅读全文
posted @ 2011-11-27 14:00 Jack204 阅读(1440) 评论(1) 推荐(0)