[原创]另一种进入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 )
1777 0
【Android 逆向】IDA 工具使用 ( IDA 32 位 / 64 位 版本 | 汇编代码视图 IDA View-A | 字符串窗口 Strings window )
|
存储 移动开发 前端开发
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 .
1196 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.
1285 0
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
1587 2
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
3573 0