|
本帖最后由 h907308901 于 2012-8-12 21:23 编辑
RT,开始研究写这么个东西了。首先,我所说的Native指的是PE结构中Subsystem域的值为Native,这个值只有驱动和子系统进程才能使用,直接双击是无法运行的。要想运行Native EXE,需要调用RtlCreateUserProcess(XP上面,VISTA及以后不清楚),不过我们不需要考虑这些,我们将会利用SMSS来执行这个程序。
SMSS是内核第一个创建的用户进程,他拥有许多特权,作为他的子进程,我们的程序可以继承许多特权,而且99.9%的杀软此时还未启动,因此这是一个制作病毒程序的好方法
SMSS启动时会执行HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute下面列出的程序,我们只需要在其中添加一行,写上程序的名称,重新启动,在WINDOWS徽标消失后,我们的程序就会被执行了~
编写Native EXE要注意以下几点:
1.此时各子系统(除SMSS)尚未启动,一切功能只能调用NTDLL里面的API(Csr前缀的不能调用,因为CSRSS尚未启动,Ldr前缀的也最好不要用,此时加载其他DLL会非常不稳定)
2.链接时一定注意选择正确选项
最主要的是/SUBSYSTEM:NATIVE,必须有这个,另外注意导入表中除了NTDLL外什么DLL都不能有
3.确保程序不会出错,一旦引发了一个未处理异常,或者上面几点中设置不对,都会导致一个HardError,系统给你一个蓝屏
由于使用VB6进行开发,因此还要多注意:
4. 不要使用一切内部函数(包括VarPtr和StrPtr,不过我们有替代品,见http://www.vbgood.com/forum.php?mod=viewthread&tid=106814,下面会详细叙述),不要使用VB的字符串操作,不要使用动态数组,不要使用对象,不要使用Declare(必须用TLB来调用API),等等会调用MSVBVM60的功能
5.生成了EXE后要记得从导入表中删除MSVBVM60
------------------------------------------------------------------------------------------------------------------------
好,下面开始编写我们的Native EXE
1.准备我们的TLB
我所用的TLB是用IDL编写的,见源码tlb\NATIVELIB.IDL,哈哈,所有调用到的API都在里面,VarPtr和StrPtr的替代函数也在里面,分别是VarPtr2和StrPtr2,和http://www.vbgood.com/forum.php?mod=viewthread&tid=106814一样,都是调用RtlConvertUlongToLargeInteger,但那个是NTOSKRNL.EXE里面的,我这个是NTDLL.DLL里面的
编译TLB请运行build.bat,不过请确定电脑上已经安装了VC6完整版
2.编写代码
按照上面的注意事项即可,以下是部分代码:
- Function NativeMain() As Long '入口函数,命名没有限制,但必须与链接时/ENTRY选项一致
- Dim ExitStatus As Long
- NtQueryInformationProcess -1, ProcessBasicInformation, PBI, Len(PBI), 0 '取得进程基本信息,如不需要可以删掉
- MainHeap = RtlCreateHeap(0, 0, 0, &H1000, 0, 0) '创建一个堆存放数据
- ExitStatus = BootExecMain '执行真正的代码,并取得返回值
- RtlDestroyHeap MainHeap '销毁堆
- NtTerminateProcess -1, ExitStatus '退出
- End Function
- Function BootExecMain() As Long
- Dim u As UNICODE_STRING
- RtlAdjustPrivilege SE_TCB_PRIVILEGE, 1, 0, 0 '取得NtDisplayString所需权限
- RtlInitUnicodeString u, StrPtr2("BOOTEXEC")
- NtDisplayStringCRLF u
- RtlInitUnicodeString u, StrPtr2("PID:") '输出自己的PID
- NtDisplayString VarPtr2(u)
- LongToHexString PBI.UniqueProcessId, u
- NtDisplayStringCRLF u
- FreeString u
- RtlInitUnicodeString u, StrPtr2("SMSS PID:") '输出父进程(SMSS)的PID
- NtDisplayString VarPtr2(u)
- LongToHexString PBI.InheritedFromUniqueProcessId, u
- NtDisplayStringCRLF u
- FreeString u
- Sleep 5000 '睡眠5秒
- End Function
- Sub NtDisplayCRLF() '输出换行符
- Dim u As UNICODE_STRING
- RtlInitUnicodeString u, StrPtr2(vbCrLf)
- NtDisplayString VarPtr2(u)
- End Sub
- Sub NtDisplayStringCRLF(u As UNICODE_STRING) '带换行的输出
- NtDisplayString VarPtr2(u)
- NtDisplayCRLF
- End Sub
- Sub AllocString(ByVal SpaceNeeded As Long, u As UNICODE_STRING) '从堆中分配字符串
- u.Buffer = RtlAllocateHeap(MainHeap, 0, SpaceNeeded * 2 + 2)
- u.MaximumLength = SpaceNeeded * 2 + 2
- u.Length = SpaceNeeded * 2
- End Sub
- Sub FreeString(u As UNICODE_STRING) '释放分配的字符串
- RtlFreeHeap MainHeap, 0, u.Buffer
- End Sub
- Sub LongToHexString(ByVal l As Long, u As UNICODE_STRING) '一个将数值转换为16进制字符串的东西
- AllocString 8, u
- RtlIntegerToUnicodeString l, 16, u
- End Sub
- Sub Sleep(ByVal DelayInterval As Long) '睡眠函数,我从KERNEL32.DLL中逆向得到他费了一番周折
- Dim l As LARGE_INTEGER
- l.LowPart = -(DelayInterval * 2710)
- l.HighPart = -1
- NtDelayExecution 0, l
- End Sub
复制代码 这是一个可以显示自己PID和SMSS PID的程序,功能不多,但可以看到其复杂程度!!!
3.编译&链接
先用VB编一个可以显示窗体的程序(用“标准EXE”的空工程就可以),编译为LINK.EXE,替换掉VB6的LINK.EXE
现在开始编译我们的程序!
生成EXE,看到生成OBJ文件后弹出了一个窗体,成功断下!立即双击源码中的LINK.BAT,EXE链接出来了!把窗体关掉,这一步就完成了
注:源码中的LINK.EXE是5.X版的汇编链接器
注2:如果不用WINDBG调试的话记得把源码中的IS_RELEASE改为False
4.最后的处理
现在,我们的程序还不能直接拿给SMSS运行,否则你看到的将是一张蓝脸 我们还要把MSVBVM60从导入表中踢出去
打开神器LordPE,把EXE扔进去,点击“目录”,查看导入表,把MSVBVM60删掉。不过先别高兴太早,在“目录”窗口中,
寻找一个叫BoundImport的东西(中文版LordPE叫什么导入,我忘记了),打开,居然还有MSVBVM60的影子?!右键,删不掉,
直接在“目录”窗口把这个东西的RVA和长度zero掉就OK了
5.测试
把EXE复制到SYSTEM32下,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute中添加一行,写上EXE的名称,重新启动,看到效果了把?
如果有可能,最好在虚拟机下面运行,再加上WINDBG内核调试
PS:源码下的SDK文件夹是WRK里面一些Native API的声明,有兴趣的看看哈
本文到此就结束了,有不足之处请回帖指出,希望大家多多研究,发掘出更多的功能
源码: |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 俺的精品贴|主题: 413, 订阅: 11
- · 精品贴|主题: 326, 订阅: 11
- · 精品测试|主题: 137, 订阅: 8
- · 大杂烩|主题: 185, 订阅: 5
- · 山寨程序系列|主题: 44, 订阅: 4
- · 更多
|