找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5646|回复: 2

[求助] 求指导 调用函数功能没实现

[复制链接]

2

主题

10

回帖

0

精华

铜牌会员

积分
66
发表于 2012-11-23 00:19:41 | 显示全部楼层 |阅读模式
本帖最后由 wslyz640 于 2012-11-23 00:21 编辑

1.rar (2.13 KB, 下载次数: 3)
麻烦大家帮我看下这代码  这是原版源码


我用的是VC2010    使用的Unicode字符集   最后我把字符都转过来了  但是在调用MySystem函数的时候 一直没有实现功能  麻烦打击帮帮忙

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2012-11-23 12:52:53 | 显示全部楼层
  1. // ss.cpp: 主项目文件。
  2. #include <windows.h>
  3. #include <tlhelp32.h>
  4. #include <aclapi.h>
  5. #include <Psapi.h>
  6. #pragma comment(lib,"Psapi.lib")


  7. int ProcessExit(LPCTSTR szProcName,int x)
  8. {
  9.         PROCESSENTRY32        pe;
  10.         DWORD        dwRet;
  11.         BOOL        bFound = FALSE;
  12.         HANDLE hProcess;
  13.         char fileName[1024] = {0};
  14.         HANDLE hSP = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  15.         if (hSP)
  16.         {
  17.                 pe.dwSize = sizeof(pe);

  18.                 for (dwRet = Process32First(hSP, &pe);
  19.                         dwRet;
  20.                         dwRet = Process32Next(hSP, &pe))
  21.                 {
  22.                         if(x){
  23.                                 if (lstrcmpi( szProcName, pe.szExeFile) == 0)
  24.                                 {
  25.                                         bFound = TRUE;
  26.                                         break;
  27.                                 }
  28.                         }
  29.                         else
  30.                         {
  31.                                 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,pe.th32ProcessID);
  32.                                 if(hProcess)
  33.                                 {
  34.                                         Sleep(1);
  35.                                         GetModuleFileNameEx(hProcess,NULL, (LPSTR)fileName,sizeof(fileName));
  36.                                         Sleep(1);
  37.                                         if (lstrcmpi( szProcName, fileName) == 0)
  38.                                         {
  39.                                                 bFound = TRUE;
  40.                                                 break;
  41.                                         }
  42.                                 }
  43.                                 CloseHandle(hProcess);
  44.                         }
  45.                 }
  46.                 CloseHandle(hSP);       
  47.         }
  48.         return bFound;
  49. }
  50. BOOL EnableDebugPriv( LPCTSTR szPrivilege )
  51. {

  52.         HANDLE hToken;
  53.         LUID sedebugnameValue;
  54.         TOKEN_PRIVILEGES tkp;

  55.         if ( !OpenProcessToken( GetCurrentProcess(),
  56.                 TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
  57.                 &hToken ) )
  58.         {
  59.                 return FALSE;
  60.         }
  61.         if ( !LookupPrivilegeValue( NULL, szPrivilege, &sedebugnameValue ) )
  62.         {
  63.                 CloseHandle( hToken );
  64.                 return FALSE;
  65.         }

  66.         tkp.PrivilegeCount = 1;
  67.         tkp.Privileges[0].Luid = sedebugnameValue;
  68.         tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

  69.         if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
  70.         {
  71.                 CloseHandle( hToken );
  72.                 return FALSE;
  73.         }

  74.         return TRUE;
  75. }


  76. DWORD GetProcessId( LPCTSTR szProcName )
  77. {
  78.         PROCESSENTRY32 pe;  
  79.         DWORD dwPid;
  80.         DWORD dwRet;
  81.         BOOL bFound = FALSE;

  82.         //
  83.         // 通过 TOOHLP32 函数枚举进程
  84.         //

  85.         HANDLE hSP = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
  86.         if ( hSP )
  87.         {
  88.                 pe.dwSize = sizeof( pe );

  89.                 for ( dwRet = Process32First( hSP, &pe );
  90.                         dwRet;
  91.                         dwRet = Process32Next( hSP, &pe ) )
  92.                 {
  93.                         if ( lstrcmpi(szProcName, pe.szExeFile) == 0 )
  94.                         {
  95.                                 dwPid = pe.th32ProcessID;
  96.                                 bFound = TRUE;
  97.                                 break;
  98.                         }
  99.                 }

  100.                 CloseHandle( hSP );

  101.                 if ( bFound == TRUE )
  102.                 {
  103.                         return dwPid;
  104.                 }
  105.         }

  106.         return NULL;
  107. }


  108. BOOL MySystem( LPTSTR szProcessName )
  109. {
  110.         HANDLE hProcess;
  111.         HANDLE hToken, hNewToken;
  112.         DWORD dwPid;

  113.         PACL pOldDAcl = NULL;
  114.         PACL pNewDAcl = NULL;
  115.         BOOL bDAcl;
  116.         BOOL bDefDAcl;
  117.         DWORD dwRet;

  118.         PACL pSacl = NULL;
  119.         PSID pSidOwner = NULL;
  120.         PSID pSidPrimary = NULL;
  121.         DWORD dwAclSize = 0;
  122.         DWORD dwSaclSize = 0;
  123.         DWORD dwSidOwnLen = 0;
  124.         DWORD dwSidPrimLen = 0;

  125.         DWORD dwSDLen;
  126.         EXPLICIT_ACCESS ea;
  127.         PSECURITY_DESCRIPTOR pOrigSd = NULL;
  128.         PSECURITY_DESCRIPTOR pNewSd = NULL;

  129.         STARTUPINFO si;
  130.         PROCESS_INFORMATION pi;

  131.         BOOL bError;

  132.         if (!EnableDebugPriv("SeDebugPrivilege"))
  133.         {
  134.                 bError = TRUE;
  135.                 goto Cleanup;
  136.         }

  137.         if ( ( dwPid = GetProcessId("WINLOGON.EXE") ) == NULL )
  138.         {
  139.                 bError = TRUE;
  140.                 goto Cleanup;
  141.         }

  142.         hProcess = OpenProcess( MAXIMUM_ALLOWED, FALSE, dwPid );
  143.         if ( hProcess == NULL )
  144.         {
  145.                 bError = TRUE;
  146.                 goto Cleanup;
  147.         }

  148.         if ( !OpenProcessToken( hProcess, READ_CONTROL | WRITE_DAC, &hToken ) )
  149.         {
  150.                 bError = TRUE;
  151.                 goto Cleanup;
  152.         }

  153.         ZeroMemory( &ea, sizeof( EXPLICIT_ACCESS ) );
  154.         BuildExplicitAccessWithName( &ea,
  155.                 "Everyone",
  156.                 TOKEN_ALL_ACCESS,
  157.                 GRANT_ACCESS,
  158.                 0 );

  159.         if ( !GetKernelObjectSecurity( hToken,
  160.                 DACL_SECURITY_INFORMATION,
  161.                 pOrigSd,
  162.                 0,
  163.                 &dwSDLen ) )
  164.         {

  165.                 if ( GetLastError() == ERROR_INSUFFICIENT_BUFFER )
  166.                 {
  167.                         pOrigSd = ( PSECURITY_DESCRIPTOR ) HeapAlloc( GetProcessHeap(),
  168.                                 HEAP_ZERO_MEMORY,
  169.                                 dwSDLen );
  170.                         if ( pOrigSd == NULL )
  171.                         {
  172.                                 bError = TRUE;
  173.                                 goto Cleanup;
  174.                         }

  175.                         if ( !GetKernelObjectSecurity( hToken,
  176.                                 DACL_SECURITY_INFORMATION,
  177.                                 pOrigSd,
  178.                                 dwSDLen,
  179.                                 &dwSDLen ) )
  180.                         {
  181.                                 bError = TRUE;
  182.                                 goto Cleanup;
  183.                         }
  184.                 }
  185.                 else
  186.                 {
  187.                         bError = TRUE;
  188.                         goto Cleanup;
  189.                 }
  190.         }

  191.         if ( !GetSecurityDescriptorDacl( pOrigSd, &bDAcl, &pOldDAcl, &bDefDAcl ) )
  192.         {
  193.                 bError = TRUE;
  194.                 goto Cleanup;
  195.         }


  196.         dwRet = SetEntriesInAcl( 1, &ea, pOldDAcl, &pNewDAcl );
  197.         if ( dwRet != ERROR_SUCCESS )
  198.         {
  199.                 pNewDAcl = NULL;

  200.                 bError = TRUE;
  201.                 goto Cleanup;
  202.         }

  203.         if ( !MakeAbsoluteSD( pOrigSd,
  204.                 pNewSd,
  205.                 &dwSDLen,
  206.                 pOldDAcl,
  207.                 &dwAclSize,
  208.                 pSacl,
  209.                 &dwSaclSize,
  210.                 pSidOwner,
  211.                 &dwSidOwnLen,
  212.                 pSidPrimary,
  213.                 &dwSidPrimLen ) )
  214.         {

  215.                 if ( GetLastError() == ERROR_INSUFFICIENT_BUFFER )
  216.                 {
  217.                         pOldDAcl = ( PACL ) HeapAlloc( GetProcessHeap(),
  218.                                 HEAP_ZERO_MEMORY,
  219.                                 dwAclSize );
  220.                         pSacl = ( PACL ) HeapAlloc( GetProcessHeap(),
  221.                                 HEAP_ZERO_MEMORY,
  222.                                 dwSaclSize );
  223.                         pSidOwner = ( PSID ) HeapAlloc( GetProcessHeap(),
  224.                                 HEAP_ZERO_MEMORY,
  225.                                 dwSidOwnLen );
  226.                         pSidPrimary = ( PSID ) HeapAlloc( GetProcessHeap(),
  227.                                 HEAP_ZERO_MEMORY,
  228.                                 dwSidPrimLen );
  229.                         pNewSd = ( PSECURITY_DESCRIPTOR ) HeapAlloc( GetProcessHeap(),
  230.                                 HEAP_ZERO_MEMORY,
  231.                                 dwSDLen );

  232.                         if ( pOldDAcl == NULL ||
  233.                                 pSacl == NULL ||
  234.                                 pSidOwner == NULL ||
  235.                                 pSidPrimary == NULL ||
  236.                                 pNewSd == NULL )
  237.                         {
  238.                                 bError = TRUE;
  239.                                 goto Cleanup;
  240.                         }

  241.                         if ( !MakeAbsoluteSD( pOrigSd,
  242.                                 pNewSd,
  243.                                 &dwSDLen,
  244.                                 pOldDAcl,
  245.                                 &dwAclSize,
  246.                                 pSacl,
  247.                                 &dwSaclSize,
  248.                                 pSidOwner,
  249.                                 &dwSidOwnLen,
  250.                                 pSidPrimary,
  251.                                 &dwSidPrimLen ) )
  252.                         {
  253.                                 bError = TRUE;
  254.                                 goto Cleanup;
  255.                         }
  256.                 }
  257.                 else
  258.                 {
  259.                         bError = TRUE;
  260.                         goto Cleanup;
  261.                 }
  262.         }

  263.         if ( !SetSecurityDescriptorDacl( pNewSd, bDAcl, pNewDAcl, bDefDAcl ) )
  264.         {
  265.                 bError = TRUE;
  266.                 goto Cleanup;
  267.         }

  268.         if ( !SetKernelObjectSecurity( hToken, DACL_SECURITY_INFORMATION, pNewSd ) )
  269.         {
  270.                 bError = TRUE;
  271.                 goto Cleanup;
  272.         }

  273.         if ( !OpenProcessToken( hProcess, TOKEN_ALL_ACCESS, &hToken ) )
  274.         {
  275.                 bError = TRUE;
  276.                 goto Cleanup;
  277.         }

  278.         if ( !DuplicateTokenEx( hToken,
  279.                 TOKEN_ALL_ACCESS,
  280.                 NULL,
  281.                 SecurityImpersonation,
  282.                 TokenPrimary,
  283.                 &hNewToken ) )
  284.         {
  285.                 bError = TRUE;
  286.                 goto Cleanup;
  287.         }


  288.         ZeroMemory( &si, sizeof( STARTUPINFO ) );
  289.         si.cb = sizeof( STARTUPINFO );

  290.         ImpersonateLoggedOnUser( hNewToken );

  291.         if ( !CreateProcessAsUser( hNewToken,
  292.                 NULL,
  293.                 szProcessName,
  294.                 NULL,
  295.                 NULL,
  296.                 FALSE,
  297.                 NULL, //NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,
  298.                 NULL,
  299.                 NULL,
  300.                 &si,
  301.                 &pi ) )
  302.         {
  303.                 bError = TRUE;
  304.                 goto Cleanup;
  305.         }

  306.         bError = FALSE;

  307. Cleanup:
  308.         if ( pOrigSd )
  309.         {
  310.                 HeapFree( GetProcessHeap(), 0, pOrigSd );
  311.         }
  312.         if ( pNewSd )
  313.         {
  314.                 HeapFree( GetProcessHeap(), 0, pNewSd );
  315.         }
  316.         if ( pSidPrimary )
  317.         {
  318.                 HeapFree( GetProcessHeap(), 0, pSidPrimary );
  319.         }
  320.         if ( pSidOwner )
  321.         {
  322.                 HeapFree( GetProcessHeap(), 0, pSidOwner );
  323.         }
  324.         if ( pSacl )
  325.         {
  326.                 HeapFree( GetProcessHeap(), 0, pSacl );
  327.         }
  328.         if ( pOldDAcl )
  329.         {
  330.                 HeapFree( GetProcessHeap(), 0, pOldDAcl );
  331.         }

  332.         CloseHandle( pi.hProcess );
  333.         CloseHandle( pi.hThread );
  334.         CloseHandle( hToken );
  335.         CloseHandle( hNewToken );
  336.         CloseHandle( hProcess );

  337.         if ( bError )
  338.         {
  339.                 return FALSE;
  340.         }

  341.         return TRUE;
  342. }
  343. int main(int argc, char* argv[])
  344. {
  345.         MySystem("cmd.exe");
  346.         return 0;
  347. }
复制代码
帮你把代码发上来.

论坛里玩VS2010的好象不多,帮顶顶

7

主题

36

回帖

2

精华

初来乍到

积分
3171
发表于 2013-2-9 18:51:19 | 显示全部楼层
粗略看了一下,这份源码在网上见过,但我没有调试,有一点可以肯定的,就是使用Unicode字符集绝对不能通过
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表