首页 > 编程资源分享区 > C/C++源代码共享 > 原创:手工清除木马的c语言实现(暂时不更新了)
2007
12-21

原创:手工清除木马的c语言实现(暂时不更新了)

今天看到网上有一个常见木马的手工清除方法,我突然觉得可以,有空可以把它写成c语言的实现,所以今天先写一点试试,虽然不知道最后会不会写出了,先慢慢写吧。要是有谁愿意和我一块写,可以加入群52190549然后联系我


#include <stdio.h>
#include <windows.h>


#define BUFSIZE 1024


/*系统目录*/
char *systemDirectory;
/*windows目录*/
char *windowsDirectory;
/*登录用户*/
char *loginUser;
/*病毒数量*/
int virueAmount;
typedef void (*pfun_initDepository)(void);
HINSTANCE hDLL;


void installDll();
void uninstallDll();
void initSystemInfo();
void console();
void scan(int type);
void kill();
void restart();
void readVirusDepository();


int main(void){
  return 0;
}


/*
 函数名:系统信息函数
 功能:初始化系统信息
 参数列表:
         void
 返回值:void
*/
void initSystemInfo(){
  int length;
  LPTSTR lpszSystemInfo;
  DWORD cchBuff=BUFSIZE;
  TCHAR tchBuffer[BUFSIZE];
  lpszSystemInfo=tchBuffer;
  if(GetSystemDirectory(lpszSystemInfo,MAX_PATH+1)){
    length=1+strlen((char*)lpszSystemInfo);
    systemDirectory=(char*)malloc((sizeof(char)+1)+length);
    strcpy(systemDirectory,lpszSystemInfo);
  }
  if(GetWindowsDirectory(lpszSystemInfo,MAX_PATH+1)){
    length=1+strlen((char*)lpszSystemInfo);
    windowsDirectory=(char*)malloc((sizeof(char)+1)+length);
    strcpy(windowsDirectory,lpszSystemInfo);
  }
  if(GetUserName(lpszSystemInfo,&cchBuff)){
    length=1+strlen((char*)lpszSystemInfo);
    loginUser=(char*)malloc((sizeof(char)+1)+length);
    strcpy(loginUser,lpszSystemInfo);
  }
}


void console(){
  int chose;
  virueAmount=1; //以后这个改成读取virus dll中病毒数量
  printf(“……………………………………..\n”);
  printf(“.     程序名称:bright eyes木马清除工具     .\n”);
  printf(“.     程序功能:清除常见的%d种木马          .\n”,virueAmount);
  printf(“……………………………………..\n”);
  printf(“1.敏感区域扫描 2.全盘扫描 3退出\n”);
  scanf(“%d”,&chose);
  if(chose==1){
    printf(“敏感区域扫描…\n”);
    scan(1);
  }else if(chose==2){
    printf(“全盘扫描…\n”);
    scan(2);
  }else if(chose==3){
    printf(“\n”);
    exit(1);
  }
}


void restart(){
  char *cmd=”shutdown -r -t 120 -c \”重置计算机后,在安全模式下再次运行bright eyes木马清除工具\”";
  system(cmd);
}


void installDll(){
  hDLL = LoadLibrary(“virus.dll”);
}


void uninstallDll(){
  FreeLibrary(hDLL);
}


void scan(int type){
  if(type==1){
//    pfun_initDepository initDepository=(pfun_initDepository)GetProcAddress(hDLL,”initDepository”);
//    initDepository();
  }else if(type==2){
    //全盘扫描使用特征代码
  }
}


//file2.h


/*
 函数名:初始化木马库函数
 功能:运行所有的木马库函数
 参数列表:
         void
 返回值:void
*/
void initDepository();


/*
 函数名:读取注册表函数
 功能:读取注册表中是否含有要找的键值
 参数列表:
         int keyType 键类型
         键类型  1 HKEY_CLASSES_ROOT
                 2 HKEY_CURRENT_USER
                 3 HKEY_LOCAL_MACHINE
                 4 HKEY_USERS
                 5 HKEY_CURRENT_CONFIG
         char *subKeyPath 子键路径
         char *subKeyName 子键名称
 返回值:int TRUE 成功 FALSE 失败
*/


int readRegOFValue(int keyType,char *subKeyPath,char *subKeyName);
/*
 函数名:删除注册表函数
 功能:删除注册表中键与子键
 参数列表:
         int keyType 键类型
         键类型  1 HKEY_CLASSES_ROOT
                 2 HKEY_CURRENT_USER
                 3 HKEY_LOCAL_MACHINE
                 4 HKEY_USERS
                 5 HKEY_CURRENT_CONFIG
         char *subKeyPath 子键路径
         char *subKeyName 子键名称
 返回值:int TRUE 成功 FALSE 失败
*/


int delRegOfValue(int keyType,char *subKeyPath,char *subKeyName);
/*
 函数名:删除注册表函数
 功能:删除注册表中键与子键
 参数列表:
         int keyType 键类型
         键类型  1 HKEY_CLASSES_ROOT
                 2 HKEY_CURRENT_USER
                 3 HKEY_LOCAL_MACHINE
                 4 HKEY_USERS
                 5 HKEY_CURRENT_CONFIG
         char *subKeyPath 子键路径
         char *subKeyValue 子键值
 返回值:int TRUE 成功 FALSE 失败
*/


int delRegOfData(int keyType,char *subKeyPath,char *subKeyValue);
/*
 函数名:删除键函数
 功能:删除键与子键
 参数列表:
         HKEY hKey 类键
         char *subKeyName 子键名称
 返回值:int TRUE 成功 FALSE 失败
*/


int deleteValue(HKEY hKey,char *valueName);


/*
 函数名:删除文件函数
 功能:删除文件
 参数列表:
         char *fullPath 文件完整路径
 返回值:int TRUE 成功 FALSE 失败
*/
int delFile(char *fullPath);


/*
 函数名:注册表子键数量函数
 功能:获得注册表中子键数量
 参数列表:
         char *fullPath 文件完整路径
 返回值:int TRUE 成功 FALSE 失败
*/


long getRegSubKeyCount(int keyType,char *subKeyPath);


/*
 函数名:注册表值数量函数
 功能:获得注册表中当前键下的值数量
 参数列表:
         char *fullPath 文件完整路径
 返回值:int TRUE 成功 FALSE 失败
*/


long getRegValueCount(int keyType,char *subKeyPath);


//file2.c


/*这个文件以后做成virus dll*/
#include <stdio.h>
#include <windows.h>
#include “File2.h”


#define TRUE 1
#define FALSE 0


void initDepository(){
}


 


int readRegOFValue(int keyType,char *subKeyPath,char *subKeyName){
  HKEY hKey;
  ULONG dType=REG_SZ,len=0;
  int rvalue;
  if(keyType==1){
    RegOpenKeyEx(HKEY_CLASSES_ROOT,subKeyPath,0,KEY_QUERY_VALUE,&hKey);
  }else if(keyType==2){
    RegOpenKeyEx(HKEY_CURRENT_USER,subKeyPath,0,KEY_QUERY_VALUE,&hKey);
  }else if(keyType==3){
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKeyPath,0,KEY_QUERY_VALUE,&hKey);
  }else if(keyType==4){
    RegOpenKeyEx(HKEY_USERS,subKeyPath,0,KEY_QUERY_VALUE,&hKey);
  }else if(keyType==5){
    RegOpenKeyEx(HKEY_CURRENT_CONFIG,subKeyPath,0,KEY_QUERY_VALUE,&hKey);
  }
  if(keyType<=5){
    if(RegQueryValueEx(hKey,subKeyName,0,&dType,NULL,&len)==ERROR_SUCCESS){
      rvalue=TRUE;
      return rvalue;
    }else{
      rvalue=FALSE;
    }
  }
  RegCloseKey(hKey);
  return rvalue;
}


int delRegOfValue(int keyType,char *subKeyPath,char *subKeyName){
  HKEY hKey;
  ULONG dType=REG_SZ,len=0;
  int isok;
  if(keyType==1){
    RegOpenKeyEx(HKEY_CLASSES_ROOT,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==2){
    RegOpenKeyEx(HKEY_CURRENT_USER,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==3){
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==4){
    RegOpenKeyEx(HKEY_USERS,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==5){
    RegOpenKeyEx(HKEY_CURRENT_CONFIG,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }
  if(keyType<=5){
    if(RegQueryValueEx(hKey,subKeyName,0,&dType,NULL,&len)==ERROR_SUCCESS){
      isok=deleteValue(hKey,subKeyName);
      return isok;
    }else{
      isok=FALSE;
    }
  }
  RegCloseKey(hKey);
  return isok;
}


int delRegOfData(int keyType,char *subKeyPath,char *subKeyValue){
  HKEY hKey;
  ULONG dType=REG_SZ,len=strlen(subKeyValue)+1;
  int isok;
  if(keyType==1){
    RegOpenKeyEx(HKEY_CLASSES_ROOT,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==2){
    RegOpenKeyEx(HKEY_CURRENT_USER,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==3){
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==4){
    RegOpenKeyEx(HKEY_USERS,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }else if(keyType==5){
    RegOpenKeyEx(HKEY_CURRENT_CONFIG,subKeyPath,0,KEY_SET_VALUE|KEY_QUERY_VALUE,&hKey);
  }
  if(keyType<=5){
    if(RegQueryValueEx(hKey,NULL,NULL,&dType,subKeyValue,&len)==ERROR_SUCCESS){
      isok=deleteValue(hKey,subKeyValue);
      return isok;
    }else{
      isok=FALSE;
    }
  }
  RegCloseKey(hKey);
  return isok;
}


int deleteValue(HKEY hKey,char *valueName){
  int rvalue;
  if(RegDeleteValue(hKey,valueName)==ERROR_SUCCESS){
    rvalue=TRUE;
    return rvalue;
  }else{
    rvalue=FALSE;
  }
  return rvalue;
}


int delFile(char *fullPath){
  FILE *fp;
  char *pstr;
  int length,rvalue;
  length=strlen(fullPath)+1;
  pstr=(char*)malloc((sizeof(char)+1)+length);
  strcpy(pstr,fullPath);
  if(remove(pstr)==0){
    rvalue=TRUE;
    return rvalue;
  }else{
    rvalue=FALSE;
  }
  free(pstr);
  fclose(fp);
  return rvalue;
}


long getRegSubKeyCount(int keyType,char *subKeyPath){
  HKEY hKey;
  long subKeyCount=0;
  if(keyType==1){
    RegOpenKeyEx(HKEY_CLASSES_ROOT,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==2){
    RegOpenKeyEx(HKEY_CURRENT_USER,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==3){
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==4){
    RegOpenKeyEx(HKEY_USERS,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==5){
    RegOpenKeyEx(HKEY_CURRENT_CONFIG,subKeyPath,0,KEY_READ,&hKey);
  }
  if(RegQueryInfoKey(hKey, NULL, NULL, NULL, &subKeyCount, NULL, NULL, NULL, NULL, NULL, NULL, NULL)==ERROR_SUCCESS){
    printf(“%d”,subKeyCount);
  }
  return subKeyCount;
}


long getRegValueCount(int keyType,char *subKeyPath){
  HKEY hKey;
  DWORD dwValueNum=0;
  if(keyType==1){
    RegOpenKeyEx(HKEY_CLASSES_ROOT,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==2){
    RegOpenKeyEx(HKEY_CURRENT_USER,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==3){
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==4){
    RegOpenKeyEx(HKEY_USERS,subKeyPath,0,KEY_READ,&hKey);
  }else if(keyType==5){
    RegOpenKeyEx(HKEY_CURRENT_CONFIG,subKeyPath,0,KEY_READ,&hKey);
  }
  if(RegQueryInfoKey(hKey,NULL,NULL,NULL,NULL,NULL,NULL,&dwValueNum,NULL,NULL,NULL,NULL)==ERROR_SUCCESS){
    printf(“%d”,dwValueNum);
  }
  return dwValueNum;
}


 


 


 



 


 


 


原创:手工清除木马的c语言实现(暂时不更新了)》有 4 条评论

  1. builder 说:

    好,顶

    我也想写,只是现在还没时间,二十天后就有了,到时一起写

    QQ:29839357

  2. amen 说:

    我也对C程序的编写很有兴趣!!!

    不过现在还不是很熟悉!!

    且我现在主要面向的是简单的单片机C程序的,对微软的系统不是很了解 !

    呵^^^没有能力跟二位一起写!!

    不过,兄弟还是给二位加油!!!!!

  3. 120992162 说:

    俺是个菜鸟“`啥都不懂

     

    不过依然会一直支持你们的

     

     

  4. feng801 说:

    支持中,希望可以完整的看完代码

留下一个回复