今天看到网上有一个常见木马的手工清除方法,我突然觉得可以,有空可以把它写成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;
}
>> 本文固定链接: http://www.vcgood.com/archives/2037
好,顶
我也想写,只是现在还没时间,二十天后就有了,到时一起写
QQ:29839357
我也对C程序的编写很有兴趣!!!
不过现在还不是很熟悉!!
且我现在主要面向的是简单的单片机C程序的,对微软的系统不是很了解 !
呵^^^没有能力跟二位一起写!!
不过,兄弟还是给二位加油!!!!!
俺是个菜鸟“`啥都不懂
不过依然会一直支持你们的
支持中,希望可以完整的看完代码