黑客X档案官方论坛's Archiver

icesec 发表于 2007-8-17 19:43

3389登录日志清除软件

软件作者:pt007[at]vip.sina.com版权所有,转载请注明版权
信息来源:邪恶八进制信息安全团队([url=http://www.eviloctal.com/][color=#2f5fa1]www.eviloctal.com[/color][/url])
[color=#2f5fa1]Copy code[/color][indent]/*3389登录日志清除软件*/
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void Usage(char *progname);
void OpenKey(char *key);
void DelKey(char *key,char *value);
void QueryKey(char *key,char *value);
void ValidateArgs(int argc, char **argv);
int j=1;

int main(int argc, char** argv)
{
  
    //解析命令行输入:
    ValidateArgs(argc, argv);

    return 0;
}

//输出帮助的典型方法:
void Usage (char *progname)
{
    fprintf(stdout,"===============================================================================\n"
        "\t名称:3389登录日志清除软件\n"
        "\t作者:MSN:pt007@vip.sina.com\n"
        "\tQQ号:7491805\n"
        "\t声明:本软件由pt007原创,转载请注明出处,谢谢!\n"
        "\t举例:  clear3389 -h\n"
        "\t      \"clear3389 -h\" //帮助信息\n"
        "\t      \"clear3389 -a\" //显示本机3389所有登录记录\n"
        "\t      \"clear3389 -d MRU9\" //删除指定的3389登录记录\n"
        "===============================================================================\n");
    exit(0);
}

//解析命令行输入的典型方法:
void ValidateArgs(int argc, char **argv)
{   
    //打开指定的注册表键:
    char *Key="Software\\Microsoft\\Terminal Server Client\\Default";
    char buff[100]={0};
    int  i,i1,length;
    if(argc<2)
    {
        Usage(argv[0]);
    }
        for(i=1;i<argc;i++)
      {
        if ((argv[i][0] == '-') || (argv[i][0] == '/'))
        {
            switch (tolower(argv[i][1])) //转换成小写字母
            {
                case 'd': //删除指定的3389登录记录
                    if (argc!=3)
                    Usage(argv[0]);
                    strcpy(buff,argv[2]);
                    length = strlen(argv[2]);
                    for (i1=0; i1<length; i1++)
                    {
                        buff[i1] = toupper(buff[i1]);
                    }
                    //printf("buff=%s\n",buff);
                    QueryKey(Key,buff);
                    exit(0);
                case 'h'://打印帮助
                    Usage(argv[0]);
                    exit(0);
                case 'a': //显示本机3389所有登录记录
                    if (argc!=2)
                    Usage(argv[0]);
                    OpenKey(Key);
                    exit(0);
                default:
                    Usage(argv[0]);
                    return;
            }
        }
        
    }
    printf("继续...\n");
        return;
}

//下面是列出所有键值:
void OpenKey(char *key)
{
    HKEY hkey;//注册表键值的句柄
    DWORD dwIndex=0,Index=0,lpcbname=1000,ret=0,Type=0,namesize=1500;
    char *T_name=(char *)malloc(1000);
    unsigned char *name=(unsigned char *)malloc(1500);//保存子键名的字符数组
    int i=0;

    //下面是字符数组清0:
    //ZeroMemory(Buffer,1000);
    //ZeroMemory(T_name,1000);


    ret=RegOpenKeyEx(HKEY_CURRENT_USER, //根键名或已打开项的句柄
        key,              //传递一个参数,欲打开的注册表项
        0,                //未用,设为0即可
        KEY_ALL_ACCESS,  //描述新键值安全性的访问掩码
                          //它们的组合描述了允许对这个项进行哪些操作
        &hkey);          //装载上面打开项的句柄

    //printf("ret=%x\n",ret);

    if(ret!=ERROR_SUCCESS) {
        printf("RegOpenKeyEx error! %x\n",GetLastError());
        return ;
    }

    printf("\n(%d)本机的3389登录项目为:\n",j++);
    printf("key=HKEY_CURRENT_USER\\%s\n",key);
    for(i=1;ret==ERROR_SUCCESS;i++,dwIndex++)//遍历子键中的每个值
    {
        ret=RegEnumValue(hkey,dwIndex,T_name,&lpcbname,
            NULL,&Type,name,&namesize);
        //dwIndex:欲获取的子项的索引。第一个子项的索引编号为零
        //T_name:用于装载指定索引处项名的一个缓冲区
        //&lpcbname:指定一个变量,用于装载lpName缓冲区的实际长度(包括空字符)。
        if(Type==REG_SZ)
        {
            printf("%d.数值名称:%s\n",i,T_name);
            printf("  数值键值:\"%s\"\n",name);
            printf("  数据类型:REG_SZ\n\n");
        }
        if(Type==REG_DWORD)
        {
            printf("类型为REG_DWORD!\n");
        }  
        ZeroMemory(T_name,1000);
        lpcbname=1000;

        ZeroMemory(name,1500);
        namesize=1500;
    }

    RegCloseKey(hkey); //关闭注册键
    free(T_name);
    free(name);
}

//下面是查询指定的键值:
void QueryKey(char *key,char *value)
{
    HKEY hkey;//注册表键值的句柄
    DWORD dwIndex=0,Index=0,lpcbname=1000,ret=0,Type=0,namesize=1500;
    char *T_name=(char *)malloc(1000);
    unsigned char *name=(unsigned char *)malloc(1500);//保存子键名的字符数组
    int i=0,ret1=0;

    //下面是字符数组清0:
    //ZeroMemory(Buffer,1000);
    //ZeroMemory(T_name,1000);


    ret=RegOpenKeyEx(HKEY_CURRENT_USER, //根键名或已打开项的句柄
        key,              //传递一个参数,欲打开的注册表项
        0,                //未用,设为0即可
        KEY_ALL_ACCESS,  //描述新键值安全性的访问掩码
                          //它们的组合描述了允许对这个项进行哪些操作
        &hkey);          //装载上面打开项的句柄

    //printf("ret=%x\n",ret);

    if(ret!=ERROR_SUCCESS) {
        printf("RegOpenKeyEx error! %x\n",GetLastError());
        return ;
    }

    printf("\n(%d)本机的3389登录项目为:\n",j++);
    printf("key=HKEY_CURRENT_USER\\%s\n",key);
    for(i=1;ret==ERROR_SUCCESS;i++,dwIndex++)//遍历子键中的每个值
    {
        ret=RegEnumValue(hkey,dwIndex,T_name,&lpcbname,
            NULL,&Type,name,&namesize);
        //dwIndex:欲获取的子项的索引。第一个子项的索引编号为零
        //T_name:用于装载指定索引处项名的一个缓冲区
        //&lpcbname:指定一个变量,用于装载lpName缓冲区的实际长度(包括空字符)
        
        if(stricmp(T_name,value)==0){
        if(Type==REG_SZ)
        {
            printf("%d.数值名称:%s\n",i,T_name);
            printf("  数值键值:\"%s\"\n",name);
            printf("  数据类型:REG_SZ\n\n");
            ret1=1;
            DelKey(key,value);
        }
        if(Type==REG_DWORD)
        {
            printf("类型为REG_DWORD!\n");
        }
        }
        ZeroMemory(T_name,1000);
        lpcbname=1000;

        ZeroMemory(name,1500);
        namesize=1500;
   
    }
    if(!ret1)
    { printf("\n注意:数值名称%s不存在,请重新输入,注意大小写!\n",value);
    }
    RegCloseKey(hkey); //关闭注册键
    free(T_name);
    free(name);
}


//下面是删除指定的键值:
void DelKey(char *key,char *value)
{
    HKEY hkey;
    DWORD ret;
    ret=RegOpenKeyEx(HKEY_CURRENT_USER, //根键名或已打开项的句柄
        key,              //传递一个参数,欲打开的注册表项
        0,                //未用,设为0即可
        KEY_ALL_ACCESS,  //描述新键值安全性的访问掩码
                          //它们的组合描述了允许对这个项进行哪些操作
        &hkey);          //装载上面打开项的句柄
    if(ret!=ERROR_SUCCESS) {
        printf("RegOpenKeyEx error! %x\n",GetLastError());
        return ;
    }
   
  
  ret=RegDeleteValue(hkey, value);
  if(ret!=ERROR_SUCCESS) {
        printf("RegDeleteValue %s error! %x\n",value,GetLastError());
        return ;
    }

    printf("RegDeleteValue %s success!\n",value);
    RegCloseKey(hkey);
   

}[/indent]

lxclnwrf88 发表于 2007-9-14 22:02

怎么没有人顶你啊
我顶你了
呵呵
::04:: ::04:: ::04::

535423160 发表于 2007-9-14 23:09

呵呵  我来顶你 给小菜擦PP的好东西呢~~~::04:: ::04:: ::04::

liuchonggui 发表于 2007-10-13 10:03

好东西,顶::16:: ::16:: ::16::

guyueshuaige 发表于 2007-10-24 13:30

DSF

DSA::03:: ::03:: ::04::

guyueshuaige 发表于 2007-10-24 13:30

IKKK

::04:: ::04:: ::04::

317650 发表于 2007-10-24 14:34

这东西怎么用啊?

::08:: ::08:: ::08:: ::08:: ::08:: ::08::

oyfsystem 发表于 2007-10-25 15:45

放木马,~~~::07:: ::08:: 不厚道~~~

xiaoping 发表于 2007-10-26 16:00

dfhgdh

::04:: ::04:: ::04:: ::04::

chy 发表于 2007-11-10 18:06

支持你一下!!!!!!!!!!!!!!!!!

guaiguaitu 发表于 2007-11-12 09:55

::02::::02::::02::::02::::02::::02::::02::::02::::02::::02::

walp2008 发表于 2007-11-12 10:21

好东西?不知道~~~我只是看的头晕~~~

10080966 发表于 2007-11-12 12:39

对于我这样的阿菜来说,还是有用的,顶一个.

huarui 发表于 2007-11-13 18:05

OH MY GOD太强了.....你是我的偶像::01:: ::01::

失眠 发表于 2008-7-3 13:00

kan kan ::04:: ::01::

失眠 发表于 2008-7-3 13:02

没钱的日子真难过,,,,,::18:: ::18::

失眠 发表于 2008-7-3 13:04

怎么办呀,,zhineng看看::18:: ::18::

页: [1]


Powered by Discuz! 6.1.0  © 2001-2007 Comsenz Inc.