Blue Pill的编译和安装
来源:互联网 发布:耳机性能测试软件 编辑:程序博客网 时间:2024/05/01 11:35
抱歉,因为工作比较忙,有三个月没有更新了。估计后面都会比较忙,我尽量抽空更新。
一、安装
之所以先说安装是因为编译和安装方式有关系。Blue Pill有两种安装方式:
1、windows普通内核模式驱动安装方式
这种方式具体又有多种方式,需要写注册表的、使用未公开的Native API不需要写注册表的。网上找可以找到,或者看《Rootkits--Windows内核的安全防护》。
2、shell code方式
要用这种方式安装需要在newbp.h或者其它被newbp.c包含的头文件中定义宏RUN_BY_SHELLCODE。这种方式要求条件比较苛刻,你需要有一个windows内核级的溢出漏洞可以利用。因为本人对这方面还没有什么研究,也没有可以利用的漏洞,所以就没什么可说的,不过欢迎有这方面背景的一起讨论。
#ifdef RUN_BY_SHELLCODE
_KdPrint (("NEWBLUEPILL: Image base: 0x%p, image size: 0x%x/n", DriverObject, (ULONG64) RegistryPath));
//从这里可以看出,以shell code方式,对DriverEntry的调用两个参数的含义有了变化
//DriverObject表示驱动的代码起始地址
// RegistryPath表示驱动代码的大小
Status = MmMapGuestPages (DriverObject, (ULONG) BYTES_TO_PAGES ((ULONG64) RegistryPath));
#else
Status = MmMapGuestPages (DriverObject->DriverStart, BYTES_TO_PAGES (DriverObject->DriverSize));
#endif
#ifndef RUN_BY_SHELLCODE
DriverObject->DriverUnload = DriverUnload; //shell code方式没有Driver Unload
#endif
二、编译
选择是否定义宏RUN_BY_SHELLCODE。
可以编译成两种代码:64位的x64,32位的x86,又可以细分为平台:intel的vmx和AMD的svm,平台是内部判断的我们不怎么需要关心。
1、x64
这种方式很简单用ddk编译环境到svm和vmx目录进行一次build -L(编译成lib),让后到common目录下进行一次build,这时候就可以在bin/amd64目录下看到newbp.sys。这个就是目标驱动文件,不要被amd64迷惑,以为这个只能在AMD的CPU上运行,其实不是,intel的也可以,HvmInit函数内部已经有平台判断。
2、x86
这个比较麻烦,需要修改下面这些代码:
(1)、i386/common-asm.asm文件中增加
; 这个函数只在SVm用到,编译器不支持,只能硬编码,注意是AMD的x86指令
CmClflush PROC StdCall _Pointer
mov eax, _Pointer
db 0Fh, 0AEh, 0E8h ;lfence
db 0Fh, 0AEh, 38h ;clflush byte ptr[eax]
ret
CmClflush ENDP
(2)、i386/Vmx-asm.asm(16)
第16行,16改成8,具体原因看第232行;HvmEventCallback(PCPU Cpu,PGUEST_REGS GuestRegs,ULONG64 Ticks1)
和这个函数的具体定义
EXTERN HvmEventCallback@16:PROC ->EXTERN HvmEventCallback@8:PROC
第244行同样修改
(244) call HvmEventCallback@8 ;16
(3)、i386/svm-asm.asm
第20行,也可以直接删了这一行
EXTERN HvmEventCallback@16:PROC ->EXTERN HvmEventCallback@8:PROC
(4)、i386/cpuid.asm
增加这个函数
; CpuidWithEcxEdx (PULONG32 ecx (rcx), PULONG32 edx (rdx));
CpuidWithEcxEdx PROC StdCall _ecx, _edx
mov eax, _ecx
mov ecx, dword ptr [eax]
mov eax, _edx
mov edx, dword ptr [eax]
push ebx
cpuid
pop ebx
mov eax, _ecx
mov [eax], ecx
mov eax, _edx
mov [eax], edx
ret
CpuidWithEcxEdx ENDP
(5)、在svm/Svm.c修改如下四处
svm/Svm.c(89)
#ifndef _X86_
Cpu->Svm.OriginalVmcb->vintr.fields.tpr = RegGetCr8 ();
#endif
svm/Svm.c(127)
#ifndef _X86_
RegSetCr8 (Cpu->Svm.OriginalVmcb->vintr.fields.tpr);
#endif
svm/Svm.c(1030)
#ifndef _X86_
RegSetCr8 (0);
#endif
svm/Svmtraps.c(275)
#ifndef _X86_
RegSetCr8 (Cpu->Svm.OriginalVmcb->vintr.fields.tpr);
#endif
编译方式同x64,也是两次的build -L和一次build。目标文件在bin/i386目录下的newbp.sys。
不过别太高兴,因为MmMapGuestKernelPages内部使用windows64位内存模型,所以上面这些是无用功,当然你也可以自己修改其它的C代码,这样你编译出来的32位代码才是有用的。
声明一下上面的目录都是在nbp-0.32-public。
因为本人的机子不支持硬件虚拟化,所以。。。。。
三、其他代码
1、bpknock
这个是一个配合程序,只要你安装了blue pill,然后用命令运行这个程序,就可以给blue pill发命令。这个还没具体看......其实就是运行一下cpuid指令,陷阱进入blue pill处理。
2、dbgclient
这也是一个驱动,用于本地调试用的。这个也没具体看,主要是在内存中传数据。
看newbp.c的下面代码。
#ifdef USE_LOCAL_DBGPRINTS
DbgUnregisterWindow ();
#endif
这次就到这里,待续。。。。。。。
- Blue Pill的编译和安装
- Blue pill
- The Hottest Pill – Blue Pill
- Blue Pill源代码分析(1)
- Blue Pill源代码分析(2)
- Blue Pill源代码分析(3)
- Blue Pill源代码分析(4)
- 从Blue Pill、硬件虚拟化谈安全防护完备性上的一个小原则
- 从Blue Pill、硬件虚拟化谈安全防护完备性上的一个小原则
- VS2015 Blue和Dark的结合--Blue with Dark Editor
- new blue pill在Intel系列CPU上无法卸载问题
- [MyEclipse Blue 采用lnk方法安装SVN1.8.3的步骤]
- 【MyEclipse Blue 采用lnk方法安装SVN1.8.3的步骤】
- STLPort的编译和安装
- SVN的编译和安装
- boost 的安装和编译
- ACE的编译和安装
- BerkeleyDB 的编译和安装
- 成为有钱人的25种方法创业
- 宝贝,再抱抱你好吗
- htmlparser 处理标签的一个bug
- delphi try except语句 和 try finally语句用法以及区别
- 用类似“购房补贴”制度代替经济适用房制度
- Blue Pill的编译和安装
- 成为有钱人的25种方法创业收藏
- ARP协议揭密
- 矩形离散化
- 关于Symbian OS 的几个名词解释
- XP SP3无法安装IIS 解决办法
- 时间字段的利用
- 获取IP地址
- 讨厌被人忽悠的感觉