- 博客(50)
- 资源 (25)
- 收藏
- 关注
转载 DLL相关知识
MFC的DLL 一般的,在介绍Windows编程的书中讲述DLL的有关知识较多,而介绍MFC的书则比较少地提到。即使使用MFC来编写动态链接库,对于初步接触DLL的程序员来说,了解DLL的背景知识是必要的。另外,MFC提供了新的手段来帮助编写DLL程序。所以,本节先简洁的介绍有关概念。 DLL的背
2008-04-30 10:46:00 824
原创 字节对齐预编译指令的复杂用法及应用场合
我看到这样的: #pragma pack(,[n]) 预编译指令,看了msdn后还是不甚明白,应用场合,#pragma pack()功能是局部调整结构成员内存位置对齐用的. 因为操作系统为了加快内存访问速度,缺省时总是将结构成员分配在整数对齐边界的内存位置. #pragma pack()可以改变这一缺省行为. 除了一些Hook程序
2008-04-29 17:01:00 1135
原创 什么是字节对齐,为什么要对齐?
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU
2008-04-29 14:10:00 1274 1
原创 内存分配相关,new , GlobalAlloc, VirtualAlloc, HeapAlloc
Windows 内存模式从用户的角度来看,WIN32的内存管理是非常简单和明了的。每一个应用程序都有自己独立的4G地址空间,这种内存模式叫做“平坦”型地址模式,所有的段寄存器或描述符都指向同样的起始地址,所有的地址偏移都是32位的长度,这样一个应用程序无须变换选择符就可以存取自己的多达4G的地址空间。这种内存管理模式是非常简洁而便于管理的,而且我们再不用和那些令人讨厌的“near”和“far”
2008-04-29 13:24:00 3366
原创 ddk source文件编写,加入库
我看了你的程序了,解决办法(在windows xp sp2+ddk xp上编译通过)如下: 在sources文件中 *去掉 DRIVERTYPE=WDM 这一行 **另外把 TARGETLIBS 要设置对.我把它改成了使用环境变量的,这样比较灵活。 最终的sources文件如下 TARGETNAME=pmoni
2008-04-28 13:59:00 2939
原创 宏内核 VS 微内核
Minix与Linux创建新进程的过程比较可以看出二者之间的区别,Minix是建立在分模块之上的,模块之间以信息传递联系。Linux内部也是分模块的,但在运行的时候,他是一个独立的二进制大映像,其模块间的通讯是通过直接调用其他模块中的函数实现的。宏内核与微内核的区别也就在这吧,微内核是一个信息中转站,自身完成很少功能,主要是传递一个模块对另一个模块的功能请求,而宏内核则是一个大主管,把内存管理,文
2008-04-24 09:18:00 1015
原创 ZwSetSystemInformation的SystemLoadAndCallImage 加载驱动的缺陷
绕过监控进入ring0安装驱动这部分是重中之重。由于几乎每个主动防御系统都会监控未知驱动的加载和试图进入ring0的举动, 而我们在第一,第二和第三部分绕过主动防御要做的处理,都必须需要ring0权限。因此监控进入ring0,是一个独立的话题,也是我们实现前三个部分需要的条件。直接添加注册表项,ZwLoadDriver安装驱动,是几乎要被任何主动防御系统报警。必须要采用一些隐蔽的或者是为人不知的方
2008-04-23 09:13:00 2349 1
原创 病毒的行为分析帮助理解驱动pe等
来哇,病毒也整主动防御了!<!-- if (!document.phpAds_used) document.phpAds_used = ,; phpAds_random = new String (Math.random()); phpAds_random = phpAds_random.substring(2,11); document.wr
2008-04-22 20:21:00 1137
转载 zwload隐藏服务加载驱动
五、隐藏服务: 普通情况下加载驱动需要 OpenSCManager->CreateService->StartService,这样驱动就会跑到服务管理器中去注册一下自己,并且要隐藏这样加载驱动的服务,不是不行,只是太麻烦而且没效率了。要hook一大堆的服务函数。不过在逆向IS的时候发现了一个不需要去服务管理器注册而直接加载驱动的方法。就是使用ZwLoadDriver(这个函数通常是ring0
2008-04-22 16:53:00 2309
转载 WDM系统入门基础篇
WDM(Win32 Driver Model),即Win32驱动程序模型,是Microsoft力推的全新驱动程序模式,旨在通过提供一种灵活的方式来简化驱动程序的开发,在实现对新硬件支持的基础上减少并降低所必须开发的驱动程序的数量和复杂性。 除了通用的平台服务和扩展外,WDM还实现了一个模块化的、分层次类型的微型驱动程序结构(见图1)。类型驱动程序实现了支持通用总线、协议或设备类所需的功能性接口
2008-04-22 10:37:00 2870
转载 重建 PE 文件的输入表 TiTi
标题:重建 PE 文件的输入表原著:TiTi/BLiZZARD 翻译:Sun Bird [CCG] 日期:2000年5月24日 1. 前言 ======= 大家好 :) 我之所以写这篇短文,是由于我在 Dump 时发现,很多加压、加密软件都使得输入表(Import Table)不可用,所以 Dump 出的可执行文件必须要重建输入表。而在普通的讲授 Win32 汇编的站点上我没有
2008-04-21 18:52:00 2390
转载 驱动版Hello World
我们学习程序设计,都是从“Hello World”开始的,驱动程序也不例外,今天我就写一个驱动版的“Hello World”来热热身,目的希望大家能对驱动程序的基本框架有所了解。驱动程序分为2类,一个是Kernel模式驱动,另一个是Windows模式驱动,2种模式本质是相同,但细节不同,本文介绍的是内核模式驱动和驱动程序的安装、使用。驱动程序同普通的EXE,DLL一样,都属于PE文件,而且
2008-04-21 16:39:00 763
转载 使用ZwLoadDriver加载驱动
#include #include typedef struct _LSA_UNICODE_STRING { USHORT Length; USHORT MaximumLength; PVOID Buffer;} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; typedef LSA_UNICODE_STRING UNICODE_STRING,
2008-04-21 16:38:00 3808
转载 一个简单的tcp filter的例子
这两天版面日渐萧条,我只好硬着头皮把我自己的一个尚在开发,非常不成熟的东西拿出来了。 前面我曾经就网络加密这个议题讨论过,那个时候我提出的方法是imd,9x下就是利用hook_device_service,用这些方法的一个好处就是,接收数据比较低层,直接得到的就是mac数据,而且可以知道是哪块网卡上来的,而且,可以加密各种数据帧,ipx,ip什么的都不在话下。因为我所遇到的加密
2008-04-18 17:10:00 1249
原创 驱动学习笔记bosch
windows内核驱动分为三种类型:总线驱动,过滤驱动, 功能驱动。各自作用如下:总线驱动:就是驱动总线的,负责发现设备和管理设备。过滤驱动:就是在消息(irp)到达目的地之前将其截获,可以改变最终驱动的行为。功能驱动:实现最终的设备功能。我们要做一个虚拟的串口驱动程序,大家就很清楚,这个设备是一个虚拟的,虚拟的就不能在任何总线上面了。这样子,我们就先虚拟一个总线出来,然后
2008-04-18 11:19:00 1078
转载 win32使用OutputDebugString输出调试信息的方法
在win32程序中可以使用函数OutputDebugString输出调试信息。输出的结果可以在vs的集成环境中看到,也可以使用工具DbgView.exe捕捉结果。函数的原形如下:OutputDebugStringThe OutputDebugString function sends a string to the debugger for display. void Output
2008-04-18 11:00:00 3191
转载 PE文件格式
PE文件格式引言分析内核版本是v0.3.1内核ntoskrnl.exe是一个可执行的文件即PE文件,freeldr在引导时候将这个文件读入到物理内存的0x200000处,整个读取过程采用了可执行文件加载器类是的方式,因此要搞清楚加载器如可工作,首先是要搞清楚PE文件格式。以下是PE文件格式的转贴标 题: 【翻译】“PE文件格式”1.9版 完整译文(附注释)作 者: ah00
2008-04-17 19:02:00 1647
原创 0xc0000008 invalid handle 错误原因纪实
关于调试时程序报 0xC00000008: Invalid Handle 错误的原因。前几天在调试一个产品时,进入到某一个函数调试,在函数返回时, IDE开始报 "叉叉叉...0xC00000008: Invalid Handle " 的调试错误,此时按F10, 不能继续往下执行,只能转到汇编模式调试……这不明白着流氓吗!?我怎么能看得懂汇编……来劲了,非要弄明白到底是什么原因导致了报这个叉
2008-04-17 17:29:00 12533 1
转载 导出表 export table
理论:当PE装载器执行一个程序,它将相关DLLs都装入该进程的地址空间。然后根据主程序的引入函数信息,查找相关DLLs中的真实函数地址来修正主程序。PE装载器搜寻的是DLLs中的引出函数。DLL/EXE要引出一个函数给其他DLL/EXE使用,有两种实现方法: 通过函数名引出或者仅仅通过序数引出。比如某个DLL要引出名为"GetSysConfig"的函数,如果它以函数名引出,那么其他DLLs
2008-04-17 11:51:00 1653
转载 加壳相关的一点点知识,跟病毒类似
一。免杀1。最简单的:加壳Svkp,Pelock,Telock,Asprotect等等牛壳,或者一些私人壳如免役007之类的,虽然方便,但免杀效果不一定好,因为现在杀毒会把壳的特征当病毒或者把加壳后的特征也收录,而且加壳的不能用于内存代码注射2。手工免杀用CCL一类的定位工具定位出特征码,不同的杀毒的特征录入是不一样的,而且不止一处,所以免杀是体力活;然后逐一修改定位出来的特征码,例如修改入口(代
2008-04-17 11:39:00 926
原创 今天发现了vmware6.o ace的一个bug
今天发现了vmware6.o ace的一个bug。今天为了确定rky2 .net加密后的程序在没有安装.netframework的系统上运行时会出现什么样的错误提示,我打开了虚拟机环境。我从本机选中要运行的加密后程序,通过拖拽到虚拟机的xp上运行,但就是拖拽不成功,显示“Cannot determine file size . or....” , 我很纳闷,以前拖拽过两次,成功啊!几天
2008-04-16 14:43:00 840
转载 CreateRemoteThread和WriteProcessMemory技术
CreateRemoteThread和WriteProcessMemory技术 示例程序:WinSpy另一种注入代码到其他进程地址空间的方法是使用WriteProcessMemory API。这次你不用编写一个独立的DLL而是直接复制你的代码到远程进程(WriteProcessMemory)并用CreateRemoteThread执行之。让我们看一下CreateRemoteThread
2008-04-16 10:27:00 8083 2
转载 可以参考用来写自己的猛壳
可以参考用来写自己的猛壳 NtoskrnlThis article is just for fun, dont take it too serious. Some time ago a friend
2008-04-15 21:08:00 1290 1
转载 如何合并DLL到你的EXE程序中
引用张尹 的 如何合并DLL到你的EXE程序中作者:任明汉 转自vckbase下载源代码 前言 你可能不希望在发布程序时附带上一个外部的 DLL,因为可能会有些用户在无意中把 DLL 删除了而造成 EXE 不能正确运行,也有可能该 DLL 会被别人拿去使用,也有可能,此 DLL 会成为破解者破解你的程序的突破口。无论出于何种原因,如果你想把一个 DLL 合并到一个 EXE 中
2008-04-15 21:06:00 8833
转载 获得重定位表&调试表的函数—from pediy
和前面一个类一样,这两个函数是对我前面那个类的更新!这次不和那个贴放一块了,我觉得重定位好像还是有点不足的地方,但是已经完全正常,就是不完美! 喜欢的就拿去用吧!这两类函数可是网络上的稀罕货!简单先说一下重定位的结构:地址:DWORD类型大小:DWORD类型内容:WORD数组主要来说内容;比如,内容的WO
2008-04-15 21:05:00 1047
转载 完美界面换肤解决方案 vc调用delphi皮肤库
http://www.vckbase.com/code/viewcode.asp?id=3120VC里边界面换肤是比较头痛的问题,网上有不少介绍,但是大多数仅仅提供Dll或者Lib,有代码的又有很多问题,效果很差。这几日突然想到一个解决方案,有源码,皮肤有一百多个,就是采用Delphi里边成熟的界面组件vclskin,将它做成Dll来用,效果相当不错,赶紧介绍给大家。zhai_hong_tao
2008-04-15 17:39:00 1349 1
转载 windows内存结构
NT/2000的每一个进程都在启动时分配了4GB(0xFFFFFFFF)的虚拟内存。其中的某些部份实际上是由所有进程共享的,例如核心和设备驱动程序区域。但它们都会被映射到每个进程的虚拟地址空间里。实际上没有进程分配到4GB的物理内存,而是仅当需要时才分配物理内存。因此每一个进程都有各自的4GB虚拟内存,编址范围从0x00000000到0xFFFFFFFF。其中,0x00000000-0x000
2008-04-15 17:10:00 616
转载 从内存中加载并启动一个exe
windows似乎只提供了一种启动进程的方法:即必须从一个可执行文件中加载并启动。而下面这段代码就是提供一种可以直接从内存中启动一个exe的变通办法。用途嘛, 也许可以用来保护你的exe,你可以对要保护的 exe 进行任意切分、加密、存储,只要运行时能将exe的内容正确拼接到一块内存中,就可以直接从内存中启动,而不必不安全地去生成一个临时文件再从临时文件启动进程。另外这段代码也提供了一种自己写ex
2008-04-15 17:07:00 1157
原创 VirtualAllocEx 跨进程读写数据 代码注入
VirtualAllocEx 函数的作用是在指定进程的虚拟空间保留或提交内存区域,除非指定MEM_RESET参数,否则将该内存区域置0。 LPVOID VirtualAllocEx( HANDLE hProcess, // 申请内存所在的进程句柄 LPVOID lpAddress, // 保留页面的内存地址;一般用NULL自动分配 SIZE_T dwSize, // 欲分配的内存大小,字节
2008-04-15 16:33:00 7465
转载 重定位相关知识,为什么要重定位
在NT环境下隐藏进程,也就是说在用户不知情的条件下,执行自己的代码的方法有很多种,比如说使用注册表插入DLL,使用Windows挂钩等等。其中比较有代表性的是Jeffrey Richer在《Windows核心编程》中介绍的LoadLibrary方法和罗云彬在《windows环境下32位汇编语言程序设计》中介绍的方法。两种方法的共同特点是:都采用远程线程,让自己的代码作为宿主进程的线程在宿主进程的地
2008-04-15 13:25:00 11844
转载 通过病毒原理较好的阐述了如何在pe中添加一个section
PE 文件的修改和感染策略 既然已经能够搜索磁盘及网络共享文件中的所有文件,要实现寄生,那么自然下一步就是对搜索到的PE文件进行感染了。感染PE的很重要的一个考虑就是将病毒代码写入到PE 文件的哪个位置。读写文件一般利用Win32 API CreateFile、CreateFileMapping、MapViewOfFile等API以内存映射文件的方式进行,这样可以避免自己管理缓冲的麻烦,因而为较
2008-04-15 13:17:00 2545
转载 重定位的原理&实现
重定位 病毒自身的重定位是病毒代码在得以顺利运行前应解决的最基本问题。病毒代码在运行时同样也要引用一些数据,比如API 函数的名字、杀毒软件的黑名单、系统相关的特殊数据等,由于病毒代码在宿主进程中运行时的内存地址是在编译汇编代码时无法预知的,而病毒在感染不同的宿主时其位于宿主中的准确位置同样也无法提前预知,因此病毒就要在运行时动态确定其引用数据的地址,否则,引用数据时几乎肯定会发生错误。对于普通
2008-04-15 12:01:00 7619
转载 EXE文件的重定位表起作用
=====重定位表的使用方法为(我自己的理解):文件的实际装入地址-文件的建议装入地址=修正值实际装入地址+VirtualAddress+重定位项中的地址=需要重定位的代码在内存中的位置修正值+需要重定位的代码=正确的代码(只需要把地址加上修正值)只需要定位到需要重定位的代码在内存中的位置把该处的代码修改成正确的代码即可。注:上面说的代码应该是用于立即寻址的地址。=====算法:1.计算修正值(修
2008-04-15 11:40:00 3133
原创 对AddMessage源代码的部分解释
stardragon2007-12-03, 19:18在学习修改PE文件的源代码中,遇到这么一条语句,看了半天不懂 还请高手指教: // 得到代码偏移,用代码段起始RVA减去此段的物理偏移 // 应为程序的入口计算公式是一个相对的偏移地址,计算公式为: // 代码的写入地址+dwCodeOffset. dwCodeOffset=header-> opt_head.BaseOfCode-he
2008-04-14 21:45:00 1783 2
原创 DLL共享数据段
在主文件中,用#pragma data_seg建立一 个新的数据段并定义共享数据,其具体格式为: #pragma data_seg ("shareddata") //名称可以 //自己定
2008-04-14 20:39:00 11675 1
转载 对IRP的理解
对IRP的理解 驱动程序与I/O管理器通信,使用的是IRP,即I/O请求包。IRP分为2部分:1)IRP首部;2)IRP堆栈。IRP首部信息如下:IRP首部:IO_STATUS_BLOCK IoStatus 包含I/O请求的状态 PVOID AssociatedIrp.SystemBuffer 如果执行缓冲区I/O,这个指针指向系统缓冲区 PMDL MdlAddress
2008-04-14 20:25:00 1158
原创 文件系统驱动(IFS DDK)学习笔记
文件系统驱动是windows系统中最复杂的驱动种类之一。它的全称 IFS DDK 是指可安装文件系统 设备驱动程序开发工具。这方面的资料非常少,我从网上找到的资料大都是文档,都是一些在学习文件系统驱动的人自己写的,几乎没有这方面的专门书籍,更不用说中文资料了。而且ifs ddk中的帮助文档没多大意义,文件系统相关的ddk帮助极其简略,很多重要的部分仅仅轻描淡写的带过。下图是我们的IFS DD
2008-04-14 20:15:00 1124
最新windows server在RAID卡上创建存储分层高清版
2014-08-06
Windows 内核研究学习全资料 精华
2009-07-23
SMTP邮件发送客户端(VC源码)
2009-04-25
WndTap VC辅助工具
2008-02-24
多线程_异步IO_RS232串口通信例子源代码
2008-02-24
Visual.Assist.X.v10.4.1624Craked_best
2008-02-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人