注册 |登录

0GiNr技术社区论坛系统常规开发 › 查看主题

959

查看

3

回复
返回列表

Rank: 2Rank: 2

金钱
379 元 
经验
30 点 
威望
6 点 
贡献
0 点 
精华
go

[C/Java] 检测Kaspersky沙盒之OpenProcess大法

1
发表于 2010-2-2 19:18 | 只看该作者 | 倒序看帖 | 打印
凡本论坛原创内容,其作者享有著作权,未经许可谢绝转载。
最近看到不少人讨论如何检测程序是否运行于Kaspersky的沙盒中。

有的人想到Sleep(XXXXXXXX);;有的人想到访问一个不存在的网络地址然后根据结果判断;有的人想到通过复杂运算折腾死虚拟机。。。 。。。

花样层出不穷,其实这些方法非常山寨,而且还不稳定、不准确。

下面贴出我的源代码~~~
  1. //
  2. //AUTHOR:黑客守卫者
  3. //BLOG:http://hi.baidu.com/ihxdef
  4. //url:http://hi.baidu.com/ihxdef/blog/item/87e8a2a62f535d9ed043585e.html
  5. //

  6. #include <windows.h>
  7. #include <stdio.h>
  8. #include <tlhelp32.h>

  9. //
  10. //Define
  11. //
  12. int DetectSandBox(void);

  13. //
  14. //Routine
  15. //
  16. int DetectSandBox(void)
  17. {
  18.    //
  19.    //Routine Description:
  20.    //
  21.    //This routine detect if is run in real OS or SandBox.
  22.    //Tested in win xp.
  23.    //Not for win Vista or later version

  24.    //
  25.    //Arguments:
  26.    //
  27.    //None

  28.    //
  29.    //Return Value:
  30.    //
  31.    // -1 for error
  32.    // 0 for run in real OS
  33.    // 1 for run in SandBox

  34.    //
  35.    //Adjust Token Privileges
  36.    //
  37.     HANDLE hToken = NULL;
  38.     LUID sedebugnameValue;
  39.     TOKEN_PRIVILEGES tkp;

  40.     if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
  41.    {
  42.         return -1;
  43.     }
  44.     if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue))
  45.    {
  46.         CloseHandle(hToken);
  47.         return -1;
  48.     }
  49.     tkp.PrivilegeCount = 1;
  50.     tkp.Privileges[0].Luid = sedebugnameValue;
  51.     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  52.     if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL))
  53.    {
  54.         CloseHandle(hToken);
  55.         return -1;
  56.     }

  57.    //
  58.    //Detect SandBox
  59.    //
  60.    DWORD dwProcCount = 0;
  61.    DWORD dwFaultCount = 0;

  62.    HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  63.    PROCESSENTRY32 pe;
  64.    pe.dwSize=sizeof(PROCESSENTRY32);

  65.    if(hSnap)
  66.    {
  67.       Process32First(hSnap,&pe);
  68.       do
  69.       {
  70.          if(
  71.             pe.th32ProcessID == GetCurrentProcessId() ||
  72.             pe.th32ProcessID == 0 ||
  73.             pe.th32ProcessID == 4
  74.          )
  75.          {
  76.             continue;
  77.          }

  78.          HANDLE hProc = NULL;
  79.          hProc = OpenProcess( PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,pe.th32ProcessID);      
  80.          if( !hProc )
  81.          {
  82.             dwFaultCount++;
  83.          }
  84.          CloseHandle(hProc);

  85.          dwProcCount++;
  86.       }
  87.       while(Process32Next(hSnap,&pe));
  88.       CloseHandle(hSnap);
  89.    }
  90.    else
  91.    {
  92.       return -1;
  93.    }

  94.    //
  95.    //Check the result
  96.    //
  97.    if( (dwProcCount - dwFaultCount) <= 4 )
  98.    {
  99.       return 1;
  100.    }
  101.    else
  102.    {
  103.       return 0;
  104.    }

  105.    return -1;
  106. }

  107. //
  108. //Entry
  109. //
  110. int main(void)
  111. {
  112.    int iRet = DetectSandBox();
  113.    if( iRet == 1 )
  114.    {
  115.       MessageBox(NULL,"RUN IN SANDBOX! DAMN IT!","NOTICE",MB_ICONSTOP);
  116.    }
  117.    else
  118.    if( iRet == 0 )
  119.    {
  120.       MessageBox(NULL,"RUN IN REAL OS!","NOTICE",MB_ICONINFORMATION);
  121.    }
  122.    else
  123.    {
  124.       MessageBox(NULL,"UNKNOWN ERROR! DAMN IT!","NOTICE",MB_ICONSTOP);
  125.    }

  126.    return 0;
  127. }
复制代码
    • FlowerCode: 精彩代码金钱 + 240 元 威望 + 1 点

TOP

Rank: 3

金钱
313 元 
经验
247 点 
威望
25 点 
贡献
0 点 
精华
2
发表于 2010-2-2 23:30 | 只看该作者
哈哈 做黑守的沙发

TOP

0GiNr核心团队

“花”指令

Rank: 12Rank: 12

金钱
1497 元 
经验
3248 点 
威望
365 点 
贡献
34 点 
精华
3
发表于 2010-2-3 01:57 | 只看该作者
我想以后UAC是个不错的检测方法,毕竟虚拟机不可能让你调用UAC相关函数的。
FlowerCode 保留随时编辑此帖的权利,恕不另行通知。本帖可能包括一些技术上的不准确性或打字错误。FlowerCode “按原样”提供本帖,不包括任何明示或暗含的保证,包括但不限于适销性或适用于某种特殊用途的保证。

TOP

Rank: 3

金钱
313 元 
经验
247 点 
威望
25 点 
贡献
0 点 
精华
4
发表于 2010-2-3 16:21 | 只看该作者
想知道杀软的虚拟机到底是怎么回事?

TOP

0GiNr安全门户 |联系我们

GMT+8, 2010-9-4 00:19.

Powered by Discuz! X1

© 2001-2010 Comsenz Inc.