[原创]另一种进入NT内核方法的汇编版本

简介:

要说明的是该方法本身不是我的原创 ,是其他大牛首先写出来的。

而我只是将该方法的C版本 "翻译" 成 masm32 版本。: )

 

. 386
. model flat ,  stdcall
option casemap
:none

include  c:
masm32 include windows . inc
include  c:
masm32 include user32 . inc
include  c:
masm32 include kernel32 . inc
include  c:
masm32 include advapi32 . inc
includelib c:
masm32 lib user32 . lib
includelib c:
masm32 lib kernel32 . lib
includelib  c:
masm32 lib advapi32 . lib
include  c:
masm32 macros ucmacros . asm

UNICODE_STRING STRUCT
  _Length  WORD ?
  MaximumLength WORD ?
  Buffer  DWORD ?
UNICODE_STRING ENDS

SystemLoadAndCallImage  equ 
38

_ZwSetSystemInformation  typedef proto 
:dword , :dword , :dword
lpZwSetSystemInformation typedef ptr _ZwSetSystemInformation

_RtlInitUnicodeString  typedef proto 
:dword , :dword
lpRtlInitUnicodeString  typedef ptr _RtlInitUnicodeString

SYSTEM_LOAD_AND_CALL_IMAGE struct

 ModuleName UNICODE_STRING 
< ? >

SYSTEM_LOAD_AND_CALL_IMAGE ends

 
. const
txt    db 'Just 
Do  It!' , 0
cp    db 'hopy|侯佩'
, 0
WSTR    drvnameW
, " ??c: mpDrv.sys "
drvname    db '
?? c: tmp Drv . sys' , 0
dllname    db 'ntdll
. dll' , 0
szZwSetSystemInformation db 'ZwSetSystemInformation'
, 0
szRtlInitUnicodeString  db 'RtlInitUnicodeString'
, 0

 
. data?
hInstance   dd    ?
hdll    dd    ?
stSysCallImage   SYSTEM_LOAD_AND_CALL_IMAGE 
<>
ZwSetSystemInformation  lpZwSetSystemInformation ?
RtlInitUnicodeString  lpRtlInitUnicodeString  ?

 
. code
start :
 invoke GetModuleHandle
,   0
 mov hInstance
, eax

 invoke LoadLibrary
, addr dllname
 mov hdll
, eax

 invoke GetProcAddress
, hdll , addr szZwSetSystemInformation
 mov ZwSetSystemInformation
, eax

 invoke GetProcAddress
, hdll , addr szRtlInitUnicodeString
 mov RtlInitUnicodeString
, eax
 
 invoke RtlInitUnicodeString
, addr stSysCallImage . ModuleName ,
  addr drvnameW

 invoke ZwSetSystemInformation
, SystemLoadAndCallImage ,
  addr stSysCallImage
,
  sizeof SYSTEM_LOAD_AND_CALL_IMAGE

 invoke MessageBox
, NULL , addr txt , addr cp , MB_OK

 invoke ExitProcess
, NULL
end   start

相关文章
|
Android开发 C++
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
1044 0
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
|
安全 开发工具 Windows
驱动开发:内核实现进程汇编与反汇编
在笔者上一篇文章`《驱动开发:内核MDL读写进程内存》`简单介绍了如何通过MDL映射的方式实现进程读写操作,本章将通过如上案例实现远程进程反汇编功能,此类功能也是ARK工具中最常见的功能之一,通常此类功能的实现分为两部分,内核部分只负责读写字节集,应用层部分则配合反汇编引擎对字节集进行解码,此处我们将运用`capstone`引擎实现这个功能。
283 0
|
存储 移动开发 前端开发
linux内核1-GNU汇编入门_X86-64&ARM(下)
linux内核1-GNU汇编入门_X86-64&ARM(下)
|
存储 前端开发 rax
linux内核1-GNU汇编入门_X86-64&ARM(上)
linux内核1-GNU汇编入门_X86-64&ARM
|
C语言 iOS开发 MacOS
汇编语言版本的HelloWorld
平台 macOS 工具 nasm clang 文件 main.asm extern _printf ; 这里调用系统的一个系统调用函数, _printf, 使用extern告诉链接器该label在其他文件中有定义, _printf只接受一个string的地址, 和C语言层面上的printf是一样的 section .
1020 0
|
Linux 数据安全/隐私保护
Linux内核源码分析--内核启动之(2)Image内核启动(汇编部分)(Linux-3.0 ARMv7) 【转】
转自:http://blog.chinaunix.net/uid-25909619-id-4938389.html  在完成了zImage自解压之后,就跳转到了解压后的内核(也就是vmlinux的bin版本Image),具体的入口可以在arch/arm/kernel/vmlinux.
937 0
|
7月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
273 2