自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 Ring3下Hook API实现分析

    本文主要针对用户级别下HOOK API的方法进行一下总结。对应的,自然也有ring0下的HOOK API方法,但是这个需要一些驱动方面的基础,暂时不在本文讨论范围内。另外ring3下的HOOK API方法也有很多种,我只列举我所能想到的。    所谓HOOK API,与Windows 下的HOOK其实是完全两个概念,风马牛不相及。当然在之后的讨论中你也会看到有关于windows hook的讨论,但是这是另外一个话题了。    那么到底什么是HOOK API呢?我们可以暂且简单的认为HOOK API就

2011-01-18 13:37:00 7689 4

原创 自删除程序的研究及实现

Self Delete自删除CreateRemoteThreadInvalid access to memory locationFILE_FLAG_DELETE_ON_CLOSEOnly part of a Read ProcessMemory or WriteProcessMemory request was completed

2010-12-09 10:57:00 5265 2

原创 远程线程注入时遇到的问题

Self DeleteNot enough storage is available to process this commandAdjustTokenPrivilegesCreateRemoteThread

2010-11-30 15:00:00 3955 1

原创 运行时和编译时的安全性检查

运行时检查 /RTCc /RTCs /RTcu __RTC_CheckEsp _RTC_CheckStackVars /GS __security_check_cookie /INCREMENTAL 增量链接

2010-10-19 21:30:00 4565

原创 delay load深入分析

延迟加载 delay load bind rebase __FUnloadDelayLoadedDLL2 __delayLoadHelper2 ImgDelayDescr

2010-10-12 21:26:00 9780 1

原创 PE中的import table/IAT 分析

本文将通过一个实例说明PE结构中的import table及import address table(IAT). 在data directory中有两项:IMAGE_DIRECTORY_ENTRY_IMPORT(1)和IMAGE_DIRECTORY_ENTRY_IAT(12),IMAGE_DIRECTORY_ENTRY_IMPORT指向了该PE文件中所有的输入信息,而IMAGE_DIRECTORY_ENTRY_IAT指向了该PE文件中的导入地址表。现在不必关心这两个表的关系,在之后的分析中将渐渐明朗。如果用

2010-10-08 20:29:00 11170 4

原创 OBJ分析代码

紧跟着上一篇,自己写了个简单的分析OBJ的源代码,知道了基本的COFF结构以后其实分析起来不难,但是要以比较整齐的方式输入比较麻烦,于是乎...代码变得很难看...将就一下吧,以实现功能为主...争取下次写PE分析代码的时候好好重构一下...#include "pch.h"#include #include #include using namespace std;#define C(X) ((unsigned char)(fileHeader[X]) + 0)#define D(X

2010-08-07 21:31:00 1939

原创 COFF - obj

COFF OBJ PE SYMBOL TABLE STRING TABLE SECTION TABLE RELOCATION重定位 符号表 字符串表

2010-08-02 21:12:00 4852 2

原创 visual studio tips

个人认为比较好用的:(有些需要2010支持)1. Incremental Search    CTRL+I->输入关键字       --      快速搜索2. zoom    CTRL+MOUSE WHEEL    --     实时缩放3. 矩阵选取    ALT + MOUSE SELECTION     --    选中后可键盘输入,可复制至其他矩阵,可用单词复制至矩阵,可选择0长度矩阵用于批量添加。4. CTRL + F3    用当前选中的字符串快速搜索当前文档。SHIFT+CTRL+F3从后

2010-07-06 23:15:00 1337 1

转载 zz - Expat学习笔记

<br />expat是一个由C语言编写的XML解析库。James Clark创建了这个库,现在是制定XML标准的W3组织的技术leader。现在的版本是2.0。2.0开始就由Clark Cooper领导的开发组在sourceforge.net负责开发。<br /><br />expat是一个基于SAX模型的、非验证(默认,v1.2开始提供验证接口,需要用户手动处理)的轻量级XML解释器。<br />          目前XML的解析主要有两大模型:SAX和DOM。<br />      其中SAX(Si

2010-06-01 11:32:00 629

转载 zz - Google Sparsehash

<br />Google Sparsehash 包<br />实现背景:<br />该包由2种类型和HashTable实现组成。<br />Sparse 设计的实现过程中考虑的是空间优先;dense 设计上考虑的是时间优先。设计的注重点不一样,所以实现也不一样。为了和通用的STL相适应,每一种实现提供了hash-map和Hash-set2种封装方式。<br /><br /><br /><br />在使用Hash_map和Hash_set的过程中是不需要安装STL库的,google提供了整个的实现过程。Goo

2010-06-01 11:25:00 1211 1

转载 zz - 用调试函数跟踪API

[转载]用调试函数跟踪API文章作者:彭春华我们知道,当一个目标程序运行时,或多或少的都会调用一下API函数。当我们在调试该目标程序进行除错时,非常希望知道某些API的输入输出参数以及运行结果,对API的调用路径及参数的跟踪监视,在分析研究目标程序的内部调用机制时是非常有帮助的。在这里所指的API,不仅包括狭义上的Windows系统函数,还包括广义上第三方(及自身)提供DLL的输出

2010-05-11 10:28:00 1163

转载 zz - boost源码剖析之:泛型编程精灵type_traits

boost源码剖析之:泛型编程精灵type_traits(rev#2)                                                                                     刘未鹏                                                           C++的罗浮宫(http://blo

2010-05-10 15:08:00 694

原创 读Windows核心编程 - 14

GetSystemInfo函数将用于检索与主机相关的值:VOID GetSystemInfo(LPSYSTEM_INFO psinf);typedef struct _SYSTEM_INFO{ union { DWORD dwOemId; // 已作废 struct {

2009-02-03 17:09:00 706

原创 读Windows核心编程 - 13

每个进程都被赋予它自己的虚拟地址空间。对于32位进程来说,这个地址空间是4GB,因为32位指针可以拥有从0x00000000至0xFFFFFFFF之间的任何一个值。当你因为拥有如此大的地址空间可以用于应用程序而兴高采烈之前,记住,这是个虚拟地址空间,不是物理地址空间。该地址空间只是内存地址的一个范围。在你能够成功地访问数据而不会出现违规访问之前,必须赋予物理存储器,或者将物理存储器映射到各个部分的

2009-02-03 11:25:00 731

原创 vs remote debug

 第一天知道vs也可以remote debug,所谓remote debug就是用本地的vs跟source code调试远程机器的程序。这样一来就有效的解决了有些bug只能在TD机器上才能重现的问题。虽说速度有点慢,但也总比拷贝几十G的文件好多了。步骤如下:1. 找到本机的vs路径:.../Common7/IDE/Remote Debugger,把响应的目录share。2. 在远程机器上访问该目录

2009-01-09 10:47:00 4560 1

转载 zz - 跨进程API Hook

 原文出处: http://dev.csdn.net/article/23/23766.shtm跨进程API Hook(初稿)detrox什么是“跨进程 API Hook”?众所周知Windows应用程序的各种系统功能是通过调用API函数来实现。API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的调用。所谓跨进程也就是让自己的程序来控制别人

2008-11-04 09:29:00 875

原创 连连看外挂1.0

        一时兴起,决定写个连连看的外挂玩玩...于是断断续续经过几个晚上的努力基本呈现雏形...之前也看过一些外挂技术的文章,确实这里面的技术深不可测,第一次写就搞个简单的吧,以后再慢慢改进。        最简单的外挂莫过于器械式的,也就是通过界面分析,然后去模拟一些鼠标或者键盘动作。连连看外挂就可以通过这种方式去写。整个外挂基本分为以下几步完成:1. 获取界面信息,当然最主要的

2008-11-01 13:12:00 7642 2

转载 zz - DLL远程注入

 From : http://publish.it168.com/2007/0622/20070622041301.shtml         DLL的远程注入技术是目前Win32病毒广泛使用的一种技术。使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运行。   这样一来,普通的进程管理器就很难发

2008-09-23 17:00:00 1109 1

原创 读Windows核心编程 - 10 ~ 12

     这三章分别介绍了线程同步工具包、线程池的使用、纤程。线程同步工具包主要以代码的方式完成了个性化的线程同步工具包。不详细介绍了,具体内容参看核心编程page229. 这里简单介绍一下线程池的使用及纤程的概念。线程池的使用:    我们知道创建多线程程序是非常困难的,需要面临两大问题:线程创建、撤销进行管理,资源访问的同步。Microsoft公司的Windows2000提供了一系列的

2008-07-27 22:38:00 683

原创 读Windows核心编程 - 9

    上一章我们介绍了用户方式的线程同步,它的优点是速度非常快。但是它也有其局限性,比如互锁函数只能在单值上运行,根本无法使线程进入等待状态。使用关键代码段可以使线程进入等待状态,但是只能用这些代码段对单个进行中的线程进行同步。另外,使用关键代码段容易导致死锁,因为在等待进入关键代码段时无法设定超时值。    这一章中我们要介绍的是内核方式的线程同步,它唯一的确定就是速度比较慢。当调用本章提

2008-07-27 01:37:00 1008 1

转载 字符编码笔记:ASCII,Unicode和UTF-8

 文章出处:http://blog.163.com/gjm_ku/blog/static/30335502200822534134970/ 字符编码笔记:ASCII,Unicode和UTF-8今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔

2008-07-25 16:47:00 502

转载 zz C++ 虚函数表解析

From:http://www.cppblog.com/mzty/archive/2008/02/18/42877.htmlC++ 虚函数表解析 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试

2008-04-25 16:40:00 445

转载 zz 理解I/O Completion Port(完成端口)

From:http://www.cnblogs.com/flying_bat/archive/2006/09/29/517987.html           欢迎阅读此篇IOCP教程。我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼。OK,但我不能保证你明白IOCP的一切,但我会尽我最大的努力。以下是我会在这篇文章中提

2008-04-24 17:21:00 454

转载 zz bat文件的写法

BAT文件写法 BAT文件写法扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件。 ==== 注 ======================================= .bat是dos下的批处理文件 .cmd是nt内核命令行环境的另一种批处理文件 从更广义的

2008-04-22 17:25:00 989

原创 读Windows核心编程 - 8

 线程需要在下面两种情况下互相进行通信:1. 当有多个线程访问共享资源而不使资源被破坏时。2. 当一个线程需要将某个任务已经完成的情况通知另外一个或多个线程时。线程同步问题在很大程度上与原子访问有关。来看一个例子:// Define a global variablelong g_x = 0;DOWRD WINAPI ThreadFunc1(PVOID pvParam)...{

2008-04-15 22:39:00 665

原创 读Head First设计模式 - 1

一个公司有一款游戏,鸭子(有很多种类的鸭子)可以有不同的外观(display函数表示),也可以游泳(swim函数表示),有些鸭子可以飞(fly函数表示)。方法一:基类Duck定义display,swim,fly三个函数,所有鸭子继承Duck。问题:如果某种鸭子没有fly行为,需要在该类中重写fly函数,fly(){},麻烦...方法二:定义接口Flyable,只要拥有fly功能的鸭子就实现

2008-04-15 00:22:00 590

原创 读Windows核心编程 - 7

         windows是抢占式的,我们无法保证线程在某个事件的某个时间段内开始运行。系统只调度可以调度的线程,但实际情况是,系统中的大多数线程是不可调度的。除了暂停的线程外,还有其他许多线程也是不可调度的,因为它们正在等待某些事情的发生。例如,如果运行Notepad,但是并不输入任何数据,那么Notepad的线程就没有什么事情要做。系统不给无事可做的线程分配CPU时间。当我们移动Note

2008-04-10 22:09:00 1938

原创 读Windows核心编程 - 6

        线程由两部分构成:线程堆栈+线程内核对象。通常情况下,一个应用程序拥有一个用户界面线程,用于创建所有窗口,并且有一个GetMessage循环。进程中的所有其他线程都是工作线程,它们与计算机或者I/O相关联,但是这些线程从不创建窗口。虽然单个进程拥有多个用户界面线程的情况并不多见,但是这种情况有着某种有效的用途。Windows Explorer为每个文件夹窗口创建了一个独立的线程。它

2008-04-08 23:30:00 1377

原创 读Windows核心编程 - 5

        Windows2000 提供了一个新的作业内核对象,使你能够将进程组合在一起,并且创建一个"沙框",以便限制进程能够进程的操作,最好将作业对象视为一个进程的容器。与其他所有内核对象相似,创建作业对象需要调用Handle CreateJobObject(PSECURITY_ATTRIBUTES psa, PCTSTR pszName),第一个参数与其他类似Create*函数相同,第二

2008-04-08 21:30:00 1054

原创 VC下多进程的调试方法

         比如:A函数调用了CreateProcess创建了另外一个相同的进程,然后这个新进程调用了函数B,我们直接把断点设在函数B中肯定是不可行的。这里有两种方法可以解决这个问题:        1. 在B函数入口调用AfxMessageBox函数,当进程一旦进入这个函数就挂起。然后启动第一个进程(非调试),执行相应的操作创建第二个进程并调用函数B,这样就会弹出这个MessageBo

2008-04-08 17:09:00 3869 1

原创 读Windows核心编程 - 4

        进程分为两部分,一个是操作系统用来管理进程的内核对象,一个是地址空间。进程是不活泼的,活泼的是线程,每个线程都有它自己的一组CPU寄存器和它自己的堆栈。        Windows支持两种应用程序,一种是GUI(基于图形用户界面),还有一种CUI(基于控制台用户界面)。Windows应用程序必须有一个在应用程序启动运行时的进入点函数。一共有4个:WinWain、wWinMai

2008-04-05 22:05:00 918

原创 读Windows核心编程 - 3

        什么是内核对象?比如:事件对象,文件对象,文件映射对象,互斥对象,进程对象,作业对象,线程对象等等都是内核对象。每个内核对象只是内核分配的一个内存块,并且只能 由内核访问。该内存块是一个数据结构,它的成员负责维护该对象的各种信息。当调用一个用于创建内核对象的函数时,该函数就返回一个用于标识该对象的句柄。该句柄可以被视为一个不透明值,进程中的任何线程都可以使用这个值。注意:该句柄是与

2008-04-04 18:10:00 995 1

原创 读Windows核心编程 - 2

Microsoft对Unicode的支持:Windows 98 :只支持ANSIWindows 2000: 即支持Unicode也支持ANSI,但是用Unicode会更快,因为会有一个内部的转化过程,比如调用CreateWindowEx函数,参数传非Unicode字符串,那么CreateWindowEx必须分配内存(进程的默认堆中),将非Unicode字符转化成Unicode字符,然后在传

2008-04-01 21:43:00 958

原创 读Windows核心编程 - 1

        当调用一个Windows函数失败,可以用DWORD GetLastError(); 返回该线程的32位错误代码。WinError.h头文件中包含了Microsoft公司定义的错误代码列表。每一个错误代码包含消息ID(ERROR_PATH_NOT_FOUND),消息文本和一个号码(0L、1L)三部分。当Windows函数运行失败时,应该立即调用GetLastError函数,如果调用了

2008-04-01 20:00:00 727

空空如也

空空如也

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

TA关注的人

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