windbg
首页
文章
漏洞
SRC导航
内容精选
输入关键词搜索
APP 登录| 注册
【技术分享】利用WinDbg脚本对抗反调试技术
阅读量 41398 | 稿费 110
分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2017-10-09 16:58:51
译文声明
本文是翻译文章,文章原作者,文章来源:vallejo.cc
原文地址:https://vallejo.cc/2017/07/16/anti-antidebugging-windbg-scripts/
译文仅供参考,具体内容表达以及含义原文为准
×
https://p0.ssl.qhimg.com/t0105cc2393e6bed4a6.jpg
译者:shan66
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
简介
在这篇文章中,我将向读者分享一些WinDbg脚本,它们在逆向采用了反调试技术的恶意软件的时候,非常有用——至少对我来说非常有用。当然,我不是Windows内核方面的专家,所以一方面在脚本中难免会发现错误,另一方面,我正在做的事情确实非常疯狂,所以极有可能会对计算机造成损害。
这些脚本适用于WinDbg(不是本地的)内核调试。您需要一台机器来运行WinDbg,并将其连接到被调试的另一台机器上。就我而言,我使用Windows主机来运行WinDbg,然后用它来调试VMware机器(我使用VirtualKD作为调试器连接,因为这样的话,连接速度要快得多),当然,您也可以使用其他配置。
关于环境的搭设,各位可以参考下列文章:
VirtualKD – Installation
Starting with Windows Kernel Exploitation – part 1 – setting up the lab
Setting Up Kernel-Mode Debugging of a Virtual Machine Manually
好了,下面开始对各个脚本逐一介绍。
Anti-rdtsc-trick 脚本
参数:$$>a
脚本:
change_process_name.wdbg
如果我们想给一个进程改名的话,则需要修改EPROCESS-> SeAuditProcessCreationInfo.ImageFileName:
http://p4.qhimg.com/t01715ef3f6fdc8e1b3.png
该脚本需要以进程的主映像的名称作为其参数。它使用该imagename搜索进程,找到后,修改其名称最后一个字母,具体来说就是将相应的编码+1。例如:
$$>a
脚本:
aS stage @$t19
.block
{
.sympath "SRV*c:symcache*http://msdl.microsoft.com/download/symbols";
.reload
}
.block
{
r stage = 2
.printf "xxxx"
.foreach (processes_tok { !process /m ${$arg1} 0 0 })
{
.if($scmp("${processes_tok}","PROCESS")==0)
{
.if(${stage}==2)
{
$$stage==2 is used to skip the first apparition of
$$PROCESS string in the results of !process 0 0
r stage = 0
}
.else
{
r stage = 1
}
}
.elsif(${stage}==1)
{
.printf /D "Renaming process ${processes_tok}n"
r stage = 0
r $t4 = ${processes_tok}
r $t0 = @@c++( ( ( nt!_EPROCESS * ) @$t4 )->SeAuditProcessCreationInfo.ImageFileName )
r $t1 = (poi @$t0)&0xffff
r $t2 = (poi (@$t0+2))&0xffff
r $t3 = (poi (@$t0+@@c++(#FIELD_OFFSET(nt!_UNICODE_STRING, Buffer))))
db ($t3 + $t1 - a)
$$go to end of buffer of _UNICODE_STRING, and go back 0xa bytes.
$$For example
$$lastbyte, and we increase 1 the value of last byte
$$For example
$$
eb ($t3 + $t1 - a) ((poi($t3 + $t1 - a)&0xff)+1)
!process @$t4 0
}
}
}
用于重命名内核对象的脚本
参数: $$>a
脚本:
change_object_name.wdbg
这个脚本可以用来重命名内核中的对象。
首先,它获取与对象相关联的_OBJECT_HEADER结构的地址(它从 !object 命令的结果获取地址)。
获取_OBJECT_HEADER后,可以在_OBJECT_HEADER – 0x10(x86)或-0x20(x64)的地址中获取_OBJECT_HEADER_NAME_INFO结构:
http://p1.qhimg.com/t01061f86d2f1452fad.png
为了修改对象的名称,我们必须将_UNICODE_STRING改为_OBJECT_HEADER_NAME_INFO。
下面是取自pafish一个实际的例子:
https://p1.ssl.qhimg.com/t01573c5f9f1c1dc51f.png
它会尝试打开一些设备。实际上,vmci是一个设备,而hgfs是设备的符号链接。无论如何,这两个都是内核对象,它们有一个_OBJECT_HEADER和一个_OBJECT_HEADER_NAME_INFO。
我们调用该脚本:
$$>a
$$>a
当pafish尝试CreateFileA这些设备时,它会失败,并且基于这种技术的VM检测也会失效。
脚本:
aS stage @$t19
aS x64arch $t18
aS objhnameinfodisp $t17
.block
{
.sympath "SRV*c:symcache*http://msdl.microsoft.com/download/symbols";
.reload
}
.block
{
$$is x64?
r x64arch = 0;
r objhnameinfodisp = 0x10;
.foreach( tok { .effmach } )
{
.if($scmp("${tok}","x64")==0)
{
r x64arch = 1;
r objhnameinfodisp = 0x20;
.break;
};
};
}
r stage = 0
.foreach( tok { !object "${$arg1}" } )
{
.printf "${tok}rn"
.if(${stage}==1)
{
.echo ${tok}
dt _OBJECT_HEADER ${tok}
r $t0 = ${tok}
dt _OBJECT_HEADER_NAME_INFO (@$t0-${objhnameinfodisp})
$$ $t0 -> OBJECT_HEADER_NAME_INFO
r $t0 = @$t0 - ${objhnameinfodisp}
$$ $t0 -> OBJECT_HEADER_NAME_INFO.UNICODE_STRING
r $t0 = @$t0 + @@c++(#FIELD_OFFSET(_OBJECT_HEADER_NAME_INFO, Name))
$$ $t0 -> OBJECT_HEADER_NAME_INFO.UNICODE_STRING.Buffer
r $t0 = @$t0 + @@c++(#FIELD_OFFSET(_UNICODE_STRING, Buffer))
db poi $t0
$$change the first letter for 'a'
eb (poi $t0) 'a'
.printf "--------------------rn"
db poi $t0
.break
}
.if(${stage}==0)
{
.if($scmp("${tok}","ObjectHeader:")==0)
{
r stage = 1
}
}
}
未完待续…
对于诸如注册表项(HKLM SOFTWARE VMware,Inc. VMware Tools,…)或文件(vmmouse.sys,…)来说,逃避检测最简单的方法是删除/重命名所检测的注册表项或文件。pafish也使用乐VMware MAC地址,但vmware允许您修改适配器的MAC。
将来,我们还会为其他类似的东西些脚本,例如内存中的设备或进程等等,也许它们更难以隐藏。当然,一旦写好了,我会专门发文张贴。
希望本文对读者有所帮助。
本文翻译自 vallejo.cc, 原文链接 。如若转载请注明出处。
安全知识
shan66 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
2018安恒杯11月赛-Web&Crypto题解
2018-11-26 10:02:02
U2F安全协议分析
2018-11-24 10:00:48
二十年重回首——CIH病毒源码分析
2018-11-23 15:20:19
Cookie Maker:隐藏在Google Docs中的恶意网络
2018-11-23 14:30:40
|发表评论
发表你的评论吧
昵称
Helen
换一个
|评论列表
还没有评论呢,快去抢个沙发吧~
shan66
这个人太懒了,签名都懒得写一个
文章
104
粉丝
3
TA的文章
【技术分享】获取SYSTEM权限的多种姿势
2017-11-22 15:28:16
【技术分享】以Emotet为例识别C2服务器并掌握其拓扑结构
2017-11-15 14:01:41
【技术分享】CVE-2017-8715:PowerShell模块清单文件绕过安全补丁
2017-11-13 10:58:17
【技术分享】黑客组织APT28利用DDE漏洞与纽约袭击事件发动攻击
2017-11-13 09:59:59
【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门
2017-11-10 14:58:12
输入关键字搜索内容
相关文章
360 | 数字货币钱包APP安全威胁概况
以太坊智能合约安全入门了解一下(下)
对恶意勒索软件Samsam多个变种的深入分析
360 | 数字货币钱包安全白皮书
Json Web Token历险记
揪出底层的幽灵:深挖寄生灵Ⅱ
简单五步教你如何绕过安全狗
热门推荐
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading...0daybank
文章评论