12 2011 档案
摘要:前言 在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用 越来越来广泛。这里我们所谓的虚拟机(VirtualMachine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算 机系统。通过虚拟机软件(比如VMware,VirtualPC,VirtualBox),你可以在一台物理计算机上模拟出一台或多台虚拟的计算机, 这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。攻击者为了提高恶意程序的隐蔽性以及破坏真实主 机的成功率,他们
阅读全文
摘要:CRT运行库启动函数分析: 在进入main函数之前,系统会调用CRT运行库的启动函数,做如下工作: 全局变量已完成初始化, 堆的初始化, I/O也完成了初始化, Main调用 写的绝逼的好阿!!!!很有助于分析代码!! 1.*****CRTStartUp()的框架: ******CRTStartUp() { /*初始化一些操作系统版本的全局变量*/ _osver=GetVersion(); _winminor=(_osver>>8)&0x00FF; _winmajor=_osver&0x00FF; _winver=(_winmajor<<8)+_winm
阅读全文
摘要:Method:1 在计算机工作和学习中,当你准备开始一项工作的时候,要首先清晰认识到明确这项工作的目的,这个目的要尽量的具体和细化。2 对于这个目的,想出最有效率的步骤去解决这个问题,如果想不出有效的步骤去解决这个问题,那考虑阻碍自己的前进的原因在哪。Reason:当前一般的原因在于:问题和目的不清晰,明确,具体。------ 重新去思考问题的目的,重新考虑这项工作的必要性和意义。技术不足阻碍了自己。 ------ 仔细思考和搜索,询问自己所缺乏的知识点块,找到明确的资料,边学习资料边考虑自己的问题的解决方案。以上是在实践中快速成长的告诉解决方案。Reading:当然还要抽出时间来,好好的读一
阅读全文
摘要:1 先是mdl的数据结构。2 下面根据用法逐步的讲解mdl数据结构的含义:一般用法,先是 IoAllocateMdl :原型为:最常用的是VirtualAddress和Length。把自己的NonPageable buffer的起始地址传给IoAllocateMdl ,长度也传给他。可是这个函数具体做了啥呢(下面只是些基本的影响理解的部分,具体更多的东西,更细节的东西,自己去看WRK的代码)?根据length和VirtualAddress算出这块buffer总共跨越了几个virtual page。分配MDL的内存----包括上面介绍的struct _MDL(属于head部分),ULONG型bo
阅读全文
摘要:最近将WRK中的一部分代码挪出来自己修改编译做一套(具体是啥不透露)。可是我只修改了很基本的几个部分,hook上之后,代码运行老是出错。1 比如说在程序启动的时候,会调用DbgkCopyDebugObject拷贝explorer.exe中的DebugPort到即将启动进程中的DebugPort中。开始的时候,出现了这个奇怪的问题,按理说explorer.exe中的DebugPort应该为null的,可是运行起来的时候,在我的代码里面的时候,explorer.exe中的代码为DebugPort为0x1,太奇怪了。我是这么查看的:诡异吧,哈哈 使用dt SourceProcess,是查看dt So
阅读全文
摘要:linux强调的是进程自主性,windows则是对象自主性,其中线程本身也是一个对象,进程也是,所以一个进程可以操作另外一个进程的地址空间也就不足 为奇了,windows的通信实际上是对象间通信,而linux因为一切围着进程转,最新的内核中断也被线程化了,因此通信就是进程间通信,linux 中进程作为超级容器的意义要比windows的更大些,windows中进程是一个容器,也是一个对象,某种意义上它作为容器的意义是容纳别的对象。 windows的模块化思想更加鲜明。 windows中将缺页,调度等概念从线程,进程中分离,专门安排一个irql级别来处理之,而linux下相应的概念则永远和进程相绑
阅读全文
摘要:如何从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...
阅读全文
摘要:宽字符wchar_t.那就要和char来比较:The char specifier is an integral type.A char has enough storage to represent a character from the basic character set. The amount of storage allocated for a char is implementation-dependent.You initialize a variable of type char with a character literal (consisting of one cha
阅读全文
摘要:平时我们编写驱动程序用的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
阅读全文
摘要:1 windows下按照标准格式编写dll,然后gcc编译加-shared,生成dll文件。2 windows linux下均可以将.o文件,使用ar.exe,链接成lib[name].a文件,.a文件用来静态链接,生成.exe文件。 编译时候 gcc -o run.exe main.c libname.a.提示:dll的c源文件也可以用来当做.a文件的源,但是倒着回去不行。3 同一个dll文件,可以有两种不同的用法:Loading Library 和 Runtime Library.Loading Library --- 使用函数时候,像正常时候一样,不过头文件中的声明变为:__decls.
阅读全文
摘要: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
阅读全文
摘要:某些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
阅读全文
摘要:1 不要纠结于细节,先整体把握,用到实际中再说 ----- 需要很高的自省能力和清醒的认识。
阅读全文
摘要: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
阅读全文
摘要: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",..
阅读全文
摘要:因为在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);
阅读全文
摘要:查看反汇编主要的思路在于将 流程,处理,算法 区分开来。1 函数调用:原C代码:int sum(int, int);int main(){ int c = sum(1, 2); printf("c=%d", c); return 0;}int sum(int a, int b){ int c = a + b; return c;}反汇编的函数调用主要使用bp-frame式(不懂自己去查去)的调用方式:mmm然后是被调用的sum:ss2 for循环:基本的for循环是这样的:int sum(int b){ int c, i=0; c = 0; fo...
阅读全文

浙公网安备 33010602011771号