随笔分类 -  谈谈windows 核心编程系列

《windows核心编程系列》谈谈修改导入段拦截API。
摘要:一个模块的导入段包含一组DLL。为了让模块能够运行,这些DLL是必须的。导入段还包含一个符号表。它列出了该模块从各DLL中导入的符号。当模块调用这些导入符号的时候,系统实际上会调用转换函数,获得导入函数在导入表的地址,然后再跳到相应的位置。如果我们能将导入段中相应导入函数的地址替换成自定义的函数的地址,即可实现对该函数的拦截。在自定义的函数中,我们既可以调用拦截的函数,也可以执行其他工作。要实现修改导入段来拦截API必须对PE文件格式有很好的了解。网上关于它的资料铺天盖地,自己搜吧。此处不打算介绍。为了修改要拦截的函数在导入段的地址,首先要获得PE文件导入段的地址。这可以调用ImageDire 阅读全文

posted @ 2011-12-14 19:49 ithzhang 阅读(297) 评论(0) 推荐(0)

《windows核心编程系列》谈谈基址重定位和模块绑定
摘要:每个DLL和可执行文件都有一个首选基地址。它表示该模块被映射到进程地址空间时最佳的内存地址。在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000。对于DLL来说,链接器会将它的首选基地址设为0x10000000,然后将该地址以及代码、数据的相关地址都写入它们的PE文件中。当它们被加载时,加载程序读取首选基地址的值,并试图把它们加载到相应位置。对于可执行文件和DLL中的代码,它们运行的时候所引用的的数据的地址,在链接的时候就已经确定。并且这些都是当exe文件或是DLL被加载到它们的首选基地址处时才是有效的。 对于汇编代码:MOV[0x00414540],5 它是将5赋值给0 阅读全文

posted @ 2011-12-09 22:52 ithzhang 阅读(278) 评论(0) 推荐(0)

《Windows核心编程系列》谈谈DLL高级技术
摘要:本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑定的技术。 第一种将DLL映射到进程地址空间的方式是直接在源代码中引用DLL中所包含的函数或是变量,DLL在程序运行后由加载程序隐式的载入,此种方式被称为隐式链接。 第二种方式是在程序运行时,通过调用API显式的载入所需要的... 阅读全文

posted @ 2011-12-07 22:24 ithzhang 阅读(372) 评论(0) 推荐(0)

《windows核心编程系列》谈谈使用远程线程来注入DLL。
摘要:windows内的各个进程有各自的地址空间。它们相互独立互不干扰保证了系统的安全性。但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作。虽然他们是为调试器设计的,但是任何应用程序都可以调用它们 。接下来我们来谈谈使用远程线程来注入DLL。 从根本上说,DLL注入就是将某一DLL注入到某一进程的地址空间。该进程中的一个线程调用LoadLibrary来载入想要注入的DLL。由于我们不能直接控制其他进程内的线程,因此我们必须在其他进程内创建一个我们自己的线程。我们可以对新创建的线程加以控制,让他调用LoadLibrary来载入DLL。windows提. 阅读全文

posted @ 2011-12-05 17:41 ithzhang 阅读(255) 评论(0) 推荐(0)

《windows核心编程系列》谈谈windows钩子
摘要:windows应用程序是基于消息驱动的。各种应用程序对各种消息作出响应从而实现各种功能。 windows钩子是windows消息处理机制的一个监视点,通过安装钩子可以达到监视指定窗口某种类型的消息的功能。所谓的指定窗口并不局限于当前进程的窗口,也可以是其他进程的窗口。当监视的某一消息到达指定的... 阅读全文

posted @ 2011-12-01 16:47 ithzhang 阅读(274) 评论(0) 推荐(0)

《windows核心编程系列》谈谈dll
摘要:DLL全称dynamic linking library.即动态链接库。广泛应用与windows及其他系统中。因此对dll的深刻了解,对计算机软件开发专业人员来说非常重要。windows中所有API都包含在DLL中。三个最重要的DLL是Kernel32.dll,User32.dll,GDI32.dll。使用dll的好处: 1:扩展了应用程序的特性。 2:简化了项目管理 可以让不同的开发团队管理不同的模块。 3:有助于节省内存。 一个dll可被多个程序共享。多个程序调用同一个dll内的同一个函数时,系统却只需将该dll加载一次。 4:促进资源共享。 5:促进了本地化 可以使应用程序只包含代码但不 阅读全文

posted @ 2011-11-28 22:24 ithzhang 阅读(230) 评论(0) 推荐(0)

《windows核心编程系列》谈谈内存映射文件
摘要:内存映射文件允许开发人员预订一块地址空间并为该区域调拨物理存储器,与虚拟内存不同的是,内存映射文件的物理存储器来自磁盘中的文件,而非系统的页交换文件。将文件映射到内存中后,我们就可以在内存中操作他们了,就像他们被载入内存中一样。内存映射文件主要有三方面的用途:1:系统使用内存映射文件来将exe或是dll文件本身作为后备存储器,而非系统页交换文件,这大大节省了系统页交换空间,由于不需要将exe或是dll文件加载到页系统交换文件,也提高了启动速度。2:使用内存映射文件来将磁盘上的文件映射到进程的空间区域,使得开发人员操作文件就像操作内存数据一样,将对文件的操作交由操作系统来管理,简化了开发人员的. 阅读全文

posted @ 2011-11-22 21:30 ithzhang 阅读(205) 评论(0) 推荐(0)

《windows核心编程系列》谈谈windows线程栈
摘要:谈谈windows线程栈。 当系统创建线程时会为线程预订一块地址空间区域,注意仅仅是预订。默认情况下预定的这块区域的大小是1MB,虽然预订这么多,但是系统并不会给全部区域调拨物理存储器。默认情况下,仅仅为两个页面挑拨。x86系统下每个页面是4KB.其他页面会在访问的时候由系统调拨。这仅仅是在创建线程时,程序员指定CreateThread的第二个参数StackSize为0时才会发挥作用。如果程序员传入的是非零值,那么调拨的物理存储器的数量就是这个非零值。 这两个默认的页面是从哪里来的呢?原来是在链接的时候,系统会将当前编译器中指定的大小写入PE文件中。(PE文件即为exe可执行文件),如果Sta 阅读全文

posted @ 2011-11-21 22:51 ithzhang 阅读(241) 评论(0) 推荐(0)

导航