【原创】献给新手(三)--Windows还有更低阶的API--(SoftICE怀旧之旅)
前面兩帖所介绍的全部都是属于User端(Ring 3)层级的API,但是如果您对付的是恶意程式
(病毒、木马及后门程式等…)那么这些骇客级的玩家就不会用这么高阶的API了,
他们会去用非常低阶非常冷门的API,
也就是Ring 0层级的API
,对于没写过程序的读者,根本不会听过这些API的名字,而对于只是用VC、BCB或是VB、Delphi写应用程序的
读者也不会用到这样的API,只有写低阶核心程序或是驱动程序的读者才会‘稍微’去涉猎这些API,为什么说是稍微呢?因为这些底层的API实在太多了,而且是层层呼叫的,
举例来说吧!我们之前用Ring 3层级的RegOpenKeyA这个API可以开启Windows的註冊档(Registry),但是有心的读者可以在SoftICE中继续往下Trace看看,就会发现它会去呼叫
NtOpenKey最后实际去执行的则是ZwOpenKey这个API,如果您只知道RegOpenKeyA这个API那么您永远也拦不到用ZwOpenKey写的恶意程序。
此外,有些软件狗(KeyPro)例如早期的彩虹狗(Rainbow Sentinel SuperPro)--后来公司被并购现在叫赛孚耐(SafeNet)狗,也是用低阶核心驱动来做保护的,了解驱动可以帮我们
对付更多的保护手法喔

各位读者您可以在SoftICE中输入NTCALL指令,您就会看到一堆Nt开头的API名称,当然还有其他字样的低阶API名称,这下总算见识到了,为什么别人能成为黑客而我们不能,
或是别人能解开的软件而我们不能,秘密就在这里…

但是因为NtOpenKey是未公开的API所以并没有导出,因此您可能看了半天却找不到NtOpenKey这个API,各位可以上网找一下冰刃(IceSword)这个软体
安装后按左边长条状的功能键再按SSDT就可以看到完整导出的低阶API名称

在右边名称栏位最下方就可以看到NtOpenKey这个API的名称。
但是还是看不到ZwOpenKey这个API名称,而且也无从得知NtOpenKey的用法,
这时您需要安装微软的
Windows Driver Kit(WDK)

在这个网页中点选中间的 “Microsoft Download Center” 就会进入真正的下载页面:

下载后可以执行KitSetup.exe进行安装,
安装时千万注意不要选Device Simulation Framework(DSF)选项,否则安装完成后Windows将会无法重启,
系统会出现system32\drivers\dsfksvcs.sys损坏的错误讯息!!
重开机成功之后,您可以在Windows Driver Kits-->Help-->WDK Documentation中找到所有有关低阶API的使用讯息,

例如我们打入NtOpenKey就会告诉我门微软不主张我们在写程式时叫用这个API

那我改键入ZwOpenKey

这时就会有完整的呼叫方式和回传的介绍出现了。
现在我们来实作看看,在我上传的附件
Ring0 API Test.rar
裡面有一个KmdManager.exe(Kernel-Mode Driver Manager)执行这个程序按右上方的
“…” 按键载入zwdemo first.sys

这就是低阶核心程序以.sys的型态出现,各位可以叫出OllyDBG试试看无论您用开启档案或是附加档案的方式都不支援这种类型的,但我们用SoftICE却很容易来分析和破解它!
KmdManager是一个可以模拟低阶核心程式执行的小程式,因为一般这种类型的程式都是被放入Windows Registry区中的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 以及
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services
… … …
这几个机码之中,在Windows启动的时候就会被执行,不是只有之前介紹的
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run而已

这个是CurrentControlSet中会在开机时被执行的sys

这个是ControlSet002中的sys
而平常的时候是不会主动被执行的,这就是这种类型程序的可怕之处,一般程度的人很难发现它的存在,也很难去分析它到底做了什么事?
所以是最常被骇客们拿来写恶意程式的管道!而有了KmdManager.exe就可以把.sys程式当成.exe程式来执行和分析。
我们把Windows中的RegEdit.exe(登录编辑程式)打开并且让它显示
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
这个机码区域,这个区域里的所有程式也是Windows启动时会全部被载入执行程式!!所以也是兵家必争之地,这个地方被植入程式的名称也就保证
以后这个作业统每次重新启动时都一定会被执行。
我们先按一下KmdManager.exe中的Register按键,再按Run按键,经过上述的动作之后,就等于zwdemo first.sys这个低阶核心程式在开机时被完整执行了,
现在我们到下方的注册表编辑器,我们按一下 检视-->重新整理 键或是直接按下F5键,这时您会看到在Run的机码区中多了一行名称为Test资料为C:\A.txt的机码在上面,
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!