博文
删除文件功能的程序(2008-06-15 20:32:00)
摘要:/**********************************
IN FACT,IT"S NOT A VIRYUS AT ALL.
**********************************/
#include <io.h>
#include <dir.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* copy outfile to infile */
void copyfile(char *infile, char *outfile)
{
FILE *in,*out;
in = fopen(infile,"r");
out = fopen(outfile,"w");
while (!feof(in))
{
fputc(fgetc(in),out);
}
fclose(in);
fclose(out);
}
/*
This function named Rubbishmaker.
*/
void MakeRubbish()
{
int i;
FILE *fp;
char *path;
char *NewName;
char *disk[7] = {"A","B","C","D","E","F","G"};
......
字符串原样输出技巧(2008-06-07 20:41:00)
摘要:有什么方便的方式向文件中输入以下内容
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
使用
#include <stdio.h>
int main()
{
FILE *output = NULL;
if((output=fopen("$.bat","w"))==NULL)
return -1 ;
fprintf(output,"for /f \"tokens=1-4 delims=:. \" %%%%h in (\"%%time%%\") do set start_=%%%%h%%%%i%%%%j%%%%k\n");
fclose(output);
return 0;
}
对吗?
对的,但是你有没有感觉累呀!比如这个字符串很长很长
不断的对这些特殊字符进行手工调整,不累夸你!怎么办呢?动脑筋呀!
下面就是使用宏定义方式的实现了这个功能 VC 下通过 2008/6/7
#include <iostream.h>
#include<fstream.h>
#define FPrint(x) fout<< #x << endl
#define Print(x) cout << #x << endl
int main()
{
ofstream fout("ds.txt");
FPrint(for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k\n);
Print(for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k\n);
f......
自删除程序小结(2008-06-07 18:48:00)
摘要:基本思路:
使用C程序,在程序结束运行之前创建一个批处理文件$.bat
然后在程序最后退出之前调用这个批处理文件 WinExec("$.bat",SW_HIDE);
注意:不能使用 system("$.bat");因为system需要等待system调用结束才执行下面的代码
只要在这个批处理文件中包含删除这个程序 aa.exe 和删除自身批处理文件$.bat功能就可
代码为:del /q/s aa.exe 和 del /q/s %0
具体实现示例使用C代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
FILE *output = NULL;
if((output=fopen("$.bat","w"))==NULL)
return -1 ;
fprintf(output,"@echo off\n"\
"set tt = %%cd%%\n"\
"rd c:\\zhong /s/q \n"\
"md c:\\zhong\n"\
"reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v * /d * /f\n"\
"cd %%tt%%\n"\
"del /q/s aa.exe \n"\
"del /q/s %%0\n"\
"exit\n");
fclose(output);
WinExec("$.bat",SW_HIDE);
//system("pause");
return 0;
病毒专杀工具自己编(2008-06-06 21:27:00)
摘要:此文中讲解的病毒专杀工具是针对木马、蠕虫等独立的程序而言的广义的病毒而言,而不是指那种自我复制感染PE文件的依附于其他程序的那种狭义的病毒。因为写那种病毒的专杀工具需要PE文件结构等知识,相对而言有点难度,所以我们就先从相对简单点的开始,难的以后再介绍。
对于大多数病毒而言,杀毒的思路其实很简单,那就是:终止病毒的进程、删除自启动项目(一般在注册表中的run*主键下)、删除病毒文件,对设置了文件关联的病毒而言还要修改注册表恢复文件关联。下面将分别陈述。
一.终止进程
以前网上曾有许多朋友问我怎么根据文件名终止指定进程,为什么使用函数TerminateProcess()不能直接终止指定进程。首先让我们来看看函数TerminateProcess()的声明吧:Bool TerminateProcess(HANDLE hPeocess,UINT uExitCode),其中第一个参数为进程句柄,而不是进程名称(文件名)。那怎样才能获得指定进程的句柄呢?我们可以使用函数OpenProcess(),其原型为
HANDLE OpenProcess(
DWORD dwDesiredAccess, // 访问标志
BOOL bInheritHandle, // 处理继承的标志
DWORD dwProcessId // 进程标识号,即进程ID
);
在使用时只要在main()主函数里调用函数KillProcessFromName(),把参数设为你要终止的进程的名称即可,Win9X则需包括路径。还有一点值得注意一下,就是别忘了#include 。
二、删除文件
这一步骤很简单,调用函数DeleteFile()即可,Bool DeleteFile(LPCTSTR lpFilename),把lpFilename设要指向删除的文件的文件名的指针即可,可包含具体路径。
三、修改注册表,删除启动项及文件关联
首先用函数RegOpenKeyEx()打开目标主键,RegOpenKeyEx()函数原型为:
LONG RegOpenKeyEx(
HKEY ......
WinNT & Win2K下实现进程的完全隐藏(2008-06-06 21:24:00)
摘要:WinNT & Win2K下实现进程的完全隐藏
作者:AntGhazi 主页:antghazi.yeah.net
面对众多的计算机高手,考虑许久,终于还是决定出来献丑一下,文章内尽量使用最简洁易懂的词汇及例子来介绍,
希望能够对一些初学与进阶者有所帮助。
关于进程的隐藏,98下的例子数不胜数。WinNT/Win2K下的隐藏方法,西祠的高手shotgun在去年的6月就已经在网上发布出实例《揭开木马的神秘面纱<四>》 ,我也多次拜读他的文章,对他的计算机水平及热心帮助朋友的作风十分敬佩。这里也可算是对shotgun的文章的补充与深入介绍吧,好了,闲话少说。
在WinNT下"真正隐藏进程"这一说法,可以讲是根本不可能实现,只要我们的程序是以进程内核的形式行,都是不可能逃离CTRL+ALT+DEL的法眼。那么奇怪了,这岂不是与我们的标题《WinNT & Win2K下实现进程的完全隐藏》相矛盾吗?是的,实际上应该是:以非进程方式执行目标代码,而逃避进程查看器的检查,从而达到"进程隐藏"的目的。我们这里用的,是在宿主进程中,以线程的方式执行我们的代码。实现起来非常简单。首先,我们先建立一个不执行任何语句的线程
DWORD stdcall ThreadProc(LPVOID *lpVoid){
return 0;
}
然后,将线程代码拷备至宿主进程所能够执行的任何地方(即页面属性为PAGGE_EXECUTE_READWRITE),如:共享内存影射区、宿主进程内。这里我们选择宿主进程,拷备的时侯,我们需要先在宿主进程中使用VirtualAllocEx函数申请一段内存,然后再使用WriteProcessMemory将线程体写入宿主进程中。
以上工作完成后,我们便可CreateRemoteThread函数激活其执行。下面给出一个完整的例子
//远程线程执行体
DWORD __stdcall ThreadProc (void *lpPara){
return 0;
}
int main(int argc, char* argv[]){
const DWO......
附加一个线程在 explorer.exe 上执行代码(2008-06-06 21:21:00)
摘要:以前写过 线程附加模块 现在找不到了 原理就是 附加一个线程在 explorer.exe 上执行代码(我认为具有极高的隐蔽性 因为程序运行后没有进程被创建只是在explorer.exe 上多了个线程而以)。
感谢 罗聪 兄的帮助 以前写汇编代码时我遇到问题就去找他 呵呵! 不过你也够强的 QQ 都n个太阳了 就没见你上过线丫的超级潜水员.
;##########################################################
; Shadow MASM Public Function Library
;##########################################################
;##########################################################
GetWindowsVer proto
KillAntiVirus proto
vBackupFile proto
ReadVirusToMem proto :DWORD
WriteVirusToExe proto :DWORD, :DWORD
;##########################################################
;##########################################################
; 判断 Windows 版本 测试通过
;##########################################################
GetWindowsVer proc
LOCAL OSVI:OSVERSIONINFO
mov OSVI.dwOSVersionInfoSize,SIZEOF(OSVERSIONINFO)
invoke GetVersionEx,addr OSVI
&nb......
VC平台下汇编和C的嵌套使用示例(2008-06-01 19:30:00)
摘要: 内联汇编调用C/C++函数必须自己清除堆栈,下面是一个调用C/C++函数例子:
#include <stdio.h>
char szformat[]= "%s %s\n" ;
char szHello[] = "Hello" ;
char szWorld[] = "world" ;
void main()
{
__asm
{
MOV EAX,OFFSET szWorld
PUSH EAX
MOV EAX,OFFSET szHello
PUSH EAX
MOV EAX,OFFSET szformat
PUSH EAX
CALL printf
; 内联汇编调用C函数必须自己清除堆栈
; 用不使用的EBX寄存器清除堆栈,或ADD ESP, 12
POP EBX
POP EBX
&......
遍历目录树(2008-05-31 18:12:00)
摘要: //从任意节点开始遍历目录树,Copyright (C) Y.B.Chen
//已经在 Borland C++ 3.1 for DOS 和 Borland C++ Builder 6.0 下编译通过
#include <stdio.h>
#include <conio.h>
#include <dir.h>
#include <dos.h>
#include <string.h>
int lines = 0; //保存已经显示出几行了,如果到了一屏需要暂停
int bQuit = 0; //是否按了Esc键,如果按了Esc键,此数为非零,程序退出
void clines(void) //计算已经输出的行数,如果满一屏就暂停
{
unsigned int k;
&......
卸载其他进程已加载模块(2008-05-31 17:29:00)
摘要: #i nclude "stdafx.h"
#i nclude <windows.h>
#i nclude <stdio.h>
#i nclude <Tlhelp32.h>
typedef struct RemoteInfo
{
DWORD dwLoadLibrary;
DWORD ModuleAddr;
}RemotePara; //传递给远程线程的参数
DWORD WINAPI ThreadProc (RemotePara *lpPara)
{
typedef BOOL (__stdcall *pFreeLibrary)(DWORD);
pFreeLibrary pFuckLibrary;
pFuckLibrary = (pFreeLibrary)lpPara->dwLoadLibrary;
pFuckLibrary(lpPara->ModuleAddr); //模块基地址
return 0;
}
int main(int argc, char* argv[])
{
MODULEENTRY32 ModuleStor; <......
traits 使用特性(2008-05-21 22:45:00)
摘要:// VC6.0 2008/5/20
#include "iostream"
using namespace std;
class SimpleCompareTrait { };
class ComplexCompareTrait { };
template<class T> class ComplexCompare
{
public:
typedef T ValueType;
typedef ComplexCompareTrait CompareTrait;
};
template<class T> class SimpleCompare
{
public:
typedef T ValueType;
typedef SimpleCompareTrait CompareTrait;
};
template<class T, class Iterator, class Compare>
Iterator __LowerBound(Iterator first, Iterator last, T val,
Compare comp, ComplexCompareTrait)
{
size_t len = 0;
size_t half;
Iterator middle;
len = last - first;
while (len > 0)
{
half = len >> 1;
middle = first;
middle += half;
if (comp(*middle, val) < 0)
{
first = middle;
++first;
len = le......