自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (3)
  • 收藏
  • 关注

转载 Floyed算法

其实这个算法很简单啦,记不住各种算法的名字从这个链接拷过来的 http://hi.bccn.net/space-166490-do-blog-id-10914.html从有向图的带权的邻接矩阵 cost出发,对有向图的n个顶点加以编号,若从i到j有弧(i=1,2,...,n,j=1,2,...,n),则从i到j 存在一条长度为cost(i,j)的路线。但该路径不一定是最短路径,尚需

2012-09-07 14:50:36 3579

原创 C语言中的static关键字

static关键字可以作用于变量或函数,我们分别讨论这两种情况。        1.static 变量      static 标记的变量都是在静态数据区或者叫全局数据区分配的。这里的数据都是自动初始化的,而且在程序运行的时候是不会释放这部分空间,只有程序结束后才会释放。      知道这个特性后其实就很好理解static了。如果变量定义为static,那么至少在程序运行的期间

2012-06-08 10:19:03 2189

原创 Kernel Handle

上周把写的驱动挂上driver verifier之后发现驱动会挂掉。!analyze -v 提示说使用了User Mode的Handle。后来仔细查看代码,原来在驱动中我需要打开system进程,调用ZwOpenProcess的时候需要指定OBJECT_ATTRIBUTES,而这个attributes是需要指定为OBJ_KERNEL_HANDLE才表明这个Handle是Kernel Handle,

2012-03-19 10:32:54 2663

转载 UNREFERENCED_PARAMETER

转帖:http://blog.csdn.net/aiguo26/article/details/855347作用:告诉编译器,已经使用了该变量,不必检测警告!在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告。当你生命了一个变量,而没有

2011-10-09 14:40:57 1902

原创 Python/Installing pydasm and pydbg with Python 2.5, WinXP, VC++2008 Express Edition

<br />今天编pydbg折腾了很久,编译加载不了pydasm,google了一下正好发现了这篇好文章,写的很详细,Mark一下<br /> <br />http://www.glamenv-septzen.net/en/view/13

2011-01-21 14:55:00 2809

转载 C++对象模型之虚函数表

<br />http://hi.baidu.com/aztack/blog/item/9258b2355545a088a71e124c.html<br /> <br />对逆向C++程序有很大的帮助

2011-01-17 10:27:00 2249

原创 函数调用方式

<br />二进制分析很长时间了,对这些概念还是不太清楚,每次都是需要的时候才去查,现在记录一下吧。<br />摘自http://blog.csdn.net/yc_8301/archive/2007/10/08/1814744.aspx<br /> <br /> <br /> <br />函数调用方式--__thiscall调用方式和__cdecl,__stdcall有什么区别<br />首先,__thiscall是关于类的一种调用方式,它与其他调用方式的最大区别是:   <br />__thisc

2011-01-14 15:54:00 2185

原创 OLE2A转换变乱码的问题

<br />从网上找了个人的日志。它将的是OLE2T,我觉得应该差不多吧。<br />以下摘自章鱼花园博客<br /> <br />以前VC6的代码,从xml文件中读取属性文字(中文),返回BSTR类型,用OLE2T转换,然后显示,一直工作很正常,用来做本地化,比修改Res文件要方便的多。<br /><br />同样的代码,在VS2003里面居然不能工作了,调试,发现BSTR返回正常,而通过OLE2T转换居然就全转成“???”了,晕。<br /><br />做了无数尝试,发现用unico

2010-07-16 17:27:00 2759

原创 MDL

用户空间和内核的数据交换的两种方法:   1.缓冲区。进入内核后在系统空间分配一块相应的缓冲区,并从用户空间缓冲区把内容复制到系统空间的缓冲区 DO_DIRECT_IO   2.临时为用户空间缓冲区增添一个系统空间映射,这使同一组物理页面有了两个虚拟地址区间,其一就是原来的用户空间虚拟地址区间,其二是系统空间的虚拟地址区间。 DO_DIRECT_IO        采用直接方

2010-05-20 19:38:00 2720

原创 APC机制

    APC(Asynchronous Procedure Call)异步过程调用。NtQueueApcThread()这个系统调用把一个”用户APC请求”挂入目标线程的APC队列。KTHREAD数据结构中APCState指向线程的APC队列(用户APC和内核APC。     一般来说,只有把APC请求挂入队列,就不再需要触发,而只是等待执行的时机。对于用户APC请求,该时机同样也是目标线程从

2010-01-28 17:09:00 2993

原创 枚举进程

    前面看到用PspCidTable可以枚举所有进程,今天又看到系统中有个全局变量PsActiveProcessHead保存所有进程。通过这个全局变量也可以枚举所有进程。当然这种方法的原理同EPROCESS遍历是一样的。PsActiveProcessHead队列其实是保存 EPROCESS->ActiveProcessLinks LIST_ENTRY数据结构的。 void DisplayL

2010-01-27 10:48:00 2472

原创 关闭其它进程的已打开对象

    NtClose()只能关闭本进程的已打开对象,而关闭其他进程的已打开对象的方法:      打开目标进程;      调用NtDuplicateObject(),把参数Options中的标志位DUPLICATE_CLOSE_SOURCE设成1,并把参数TargetProcessHandle设成0.      用这种方法可不可以关闭杀软的进程呢?以后有时间了研究研究

2010-01-20 16:24:00 2261

原创 fs:[124]

    反汇编内核函数的时候经常会看到mov eax, fs:[124].一直没弄清楚fs寄存器在ring0存放的是什么。今天查了下资料。     fs寄存器在Ring0中指向一个称为KPCR的数据结构,即FS段的起点与KPCR结构对齐。而在Ring0中fs寄存器一般为0x30。     这样看KPCR的数据结构: nt!_KPCR +0x000 NtTib :

2010-01-20 15:42:00 3650

原创 《Windows内核情景分析》常用内核函数

1.ObReferenceObjectByHandle()     Handle->Object的过程。具体的查找过程是由ExpLookupHandleTableEntry函数实现的。具体过程(bla bla一堆)还是看别人的吧。http://www.debugman.com/read.php?tid=830&page=1&toread=1 2. ObReferenceObjectByName

2010-01-15 16:22:00 2443

原创 《Windows内核情景分析》对象管理

    对象的数据结构都是由对象头和具体对象类型的数据结构两部分组成。对象头OBJECT_HEADER在下,它的上方是具体对象类型的数据结构本身。 nt!_OBJECT_HEADER +0x000 PointerCount : Int4B +0x004 HandleCount : Int4B +0x004 NextToFree : Pt

2010-01-13 20:08:00 2263

原创 《Windows内核情景分析》系统空间缓冲区管理

    用户空间是从“堆(heap)”分配缓冲区的,内核中是从“池(pool)”中分配的。     用户空间的堆是属于进程的,而内核中的池则是全局的,属于整个系统。内核中池有两种:PagedPool,所占页面可以倒换的,NonPagedPool,所占页面是不可倒换的,每个页面都占着物理内存。 ntdll!_POOL_TYPE NonPagedPool = 0 PagedPo

2010-01-11 20:11:00 2664

原创 《Windows内核情景分析》内存区间的动态分配

    物理页面是以PHYSICAL_PAGE代表的。MmPageArray指向PHYSICAL_PAGE的数组(MS是在ReactOS中是这样,真正Windows内核找不到PHYSICAL_PAGE结构,不知道是未公开还是策略不一样)    物理内存有三种   1.已分配的内存队列:存放正在被使用的内存   2.待清理的内存队列:存放已被释放的内存,但是这些内存未被清零   3.空闲队列

2010-01-08 10:57:00 2691

原创 DPC函数

    DPC是Deferred Procedure Call,推迟的过程调用。内核中每个CPU都有一个DPC请求队列,DPC请求队列在每个CPU的PRCB数据结构中     设备对象的数据结构DEVICE_OBJECT中有个成分Dpc,它是KDPC数据结构,用来设置有关本设备对象的DPC函数的信息。 ntdll!_KDPC +0x000 Type : In

2009-12-28 20:29:00 3070

原创 Josephus问题

    算法不是一般的烂呀,这个Josephus问题还纠结了半天。还好最后纠结出来了,其实很简单呀,弄个循环链表,遇到需要出列的就把这个节点从链表中删除,直到最后循环链表中只有一个节点。 1  void Josephus( ) 2  {

2009-12-15 14:44:00 2116

原创 Windows进程的创建

1.打开目标映像文件 2.创建Windows的进程控制块EPROCESS及相应的句柄 3.创建该进程的第一个线程,包括其堆栈、上下文,及线程控制块ETHREAD 4.将新创进程通知Windows子系统(csrss.exe) 5.启动初始线程运行 5.在新创进程和线程的上下文中完成用户空间的初始化 csrss中会保存有进程PID等相关信息,那么通过csrss应该也能够枚举所有的线程。Ho

2009-12-08 23:11:00 2329

原创 Windows中断级别

Passive->APC->Dispatch(DPC)->硬件中断

2009-12-08 22:52:00 758

原创 枚举进程——PspCidTable

    看Windows内核情景分析的时候看到讲PspCidTable中会保存每个进程和线程的CID,就在想可以通过这个表来获取到每个进程的PID及相关信息,然后网上一搜,已经有N多人通过这种方法来获取进程列表了,Iceword也是有这种方法来枚举进程的。Anyway,还是自己实现一遍吧。当然也借鉴了别人的代码。 NTSTATUS DriverEntry(IN PDRIVER_OBJECT Dr

2009-12-07 21:57:00 1818

原创 Windows内核情景分析——Windows进程的用户空间

    应用软件在用户空间可以访问的最低地址是MM_LOWEST_USER_ADDRESS,定义为0x10000,就是一个64KB边界的地方,从0开始的64KB不能访问     KI_USER_SHARED_DATA这个常数定义为0xFFDF0000,是一个区间的起点。这个区间是在系统空间,却又划出来让用户空间的程序访问,目的是用来让用户空间的程序访问内核中的一些数据。而且,这个区间是由系统空间

2009-11-30 23:40:00 3266

原创 传统的Heap Spray(转)

传统的Heap Spray是使用js分配内存。根据heap spray的思想,就是用同样的一个指令,去覆盖一片大内存地址,在每块分配到的内存最后,都付上我们的shellcode。     对这个指令的要求是,相当于NOPS的作用。且该指令指向的地址,正好落在我们覆盖的这片大存在地址中。     上面说的可能有些绕口,在实际exploit中,就是分配这样的一片内存区域,比如 0B270

2009-11-26 11:57:00 2116

原创 Windows网络体系结构总结

http://bbs.pediy.com/showthread.php?t=101794

2009-11-25 10:06:00 419

原创 Windows进程线程

    EPROCESS:进程控制块;它代表着Windows的一个进程,“E”表示管理层(Executive)     KPROCESS:它是EPROCESS内部的一个成分,其名称就叫Pcb,所以是核心层进程控制块。K表示Kernel    用户空间中与进程有关的数据结构是“进程环境块”PEB(Process Enviroment Block)。PEB中记录着进程的运行参数,映像装入地址等

2009-11-19 23:00:00 752

原创 OllyDbg载入就退出

    今天在调试一个加壳程序时,脱完壳之后加载脱壳后程序,OllyDbg就自动退出了,折腾了N久,隐藏OllyDbg等方法都不行,后来在网上搜了下,终于找到了解决方案,但是原因还是不明。      在OD调试之前,需要先手动去修改一下这个PE程序“导出表”中的“函数名数目”值。方法:使用“LordPE”打开要编辑的PE程序,然后依次选择[目录]-> [导出表对应的“..”按钮],把“函数名数目

2009-11-09 17:57:00 2413 2

原创 搜索PEB结构获取Kernel32.dll基址

    TEB偏移0x30处,即FS:[0x30]地址处保存着一个指针,指向PEB,PEB结构的偏移0xC处保存着另外一个指针ldr,该指针执行PEB_LDR_DATA     该结构的后三个成员是指向LDR_MODULE链表结构中相应三条双向链表头的指针,分别是按照加载顺序、在内存中地址顺序和初始化顺序排列的模块信息结构的指针。       Peb->Ldr->Initializat

2009-11-04 10:08:00 3075 1

原创 Overlay

    原来用peid查看是否加壳,显示overlay是说明这个PE文件有附加数据。     附加数据是附加在文件后面的,不被映射到内存空间中的数据,它提供它自己的程序打开自己来读取,而在内存空间中看不到这部分数据 DWORD SetFilePointer( HANDLE hFile, //在用CreateFileA打开后得到的

2009-10-28 16:33:00 645

原创 《windows内核情景分析》对象的创建

      创建系统调用的过程:     1.通过ObCreateObject()创建目标对象     2.目标对象本身的初始化     3.通过ObInsertObject()将目标对象插入对象目录和句柄表,并返回句柄。     凡是创建对象的系统调用,都要提供至少两个输入参数,其一是DesiredAccess,说明所创建对象的访问模式;另外一个是ObjectAttributes,这是一

2009-10-10 16:47:00 504

原创 《windows内核情景分析》句柄和句柄表

    每个进程都有个句柄表,在EPROCESS结构的0xc4偏移处的ObjectTable,类型为_HANDLE_TABLE,用来指向本进程的句柄表   第一项TableCode是个指针数组,对应为HANDLE_TABLE_ENTRY数据结构,每个有效的句柄都对应着(某个)句柄表中的一个表项     表项的第一项Object指向某个对象的头部,而该表项在句柄表中的位置则取

2009-10-10 08:12:00 840

HideFromDebugger

通过NtSetInformationThread来隐藏调试器,使程序无法调试

2009-09-14

KerneExec 在内核中创建一个进程

在ring0中创建一个进程,不需要ring3交互

2009-05-06

MiniWeb代码——WebServer实现

实现的WebServer的TCP/IP协议栈

2009-05-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除