2012年7月5日星期四

Native_API.Asm


.386
.model flat, stdcall
option casemap:none
include ntdll.inc
includelib ntdll.lib
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib

.data?
hs dd ?
x dd ?

.code

align 2
z dd 0
y dd 0ffffh
li dd 0f0000h,0
dn dw '\','D','e','v','i','c','e','\','p','h','y','s','i','c','a','l','m','e','m','o','r','y',0

align 4
dp word 2ch,2eh
   dword offset dn
oa dd 24,0,offset dp,64,0,0

fn db "blos.dat",0

notice db "获取blos数据成功,就在本目录的blos.dat",13,10,
          "因为写文件是同步或异步怎么的,请等几秒",13,10,
          "注意:用16进制编辑器查看。",0
          
correy db "made by correy",0

start:invoke ZwOpenSection,addr hs,4,addr oa
invoke ZwMapViewOfSection,hs,0ffffffffh,addr z,0,0ffffh,addr li,addr y,1,0,2

invoke CreateFile,addr fn,0c0000000h,0,0,2,80h,0
push eax
invoke WriteFile,eax,z,65536,addr x,0
pop eax
invoke CloseHandle,eax

invoke MessageBox,0,addr notice,addr correy,0
invoke ExitProcess,0;不加好像运行也没事。
end start
;made at 2010.03.24
;注释:本文改编自网络上的c++代码。
;本文没有考虑失败的情况。
;不足之处,敬请指导:
;QQ:112426112
;Email:leguanyuan at 126 dot com
;Homepage:http://correy.webs.com
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;附一个快速关机的小程序:
.386
.model flat, stdcall
option casemap:none
include ntdll.inc
includelib ntdll.lib
.code
start:invoke RtlAdjustPrivilege,13h,1,0,esp
invoke NtShutdownSystem,0
end start 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;本来想写成控制台程序的,一想没有必要,关键是操作这几个函数。
;更多的参数与结构,请网上搜索。
;本人注重实践,贴完整的代码,并调试可以运行至成功。
.386
.model flat, stdcall
option casemap:none
include windows.inc
include ntdll.inc
includelib ntdll.lib;没有这个,可以动态加载,再找函数的地址。
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib

.code
y dd ?
x dd ?
bufferl db 8 dup (?),0

showeax proc  ;把eax的值显示出来,存放在bufferl中。
  pushad      
  mov ecx,8   
  xor esi,esi
  againp:dec ecx
  rol eax,4
  push eax
  and eax,0Fh
  cmp eax,9
  jg big
  add eax,30h
  mov [bufferl+esi],al
  pop eax
  inc esi
  cmp ecx,0
  jne againp
  je showp
  big:add eax,37h
  mov [bufferl+esi],al
  pop eax
  inc esi
  cmp ecx,0
  jne againp
  showp:popad
ret
showeax endp

start:
invoke ZwQuerySystemInformation,5,0,0,addr x
invoke GetProcessHeap
invoke HeapAlloc,eax,0,x
mov y,eax
invoke ZwQuerySystemInformation,5,y,x,0
mov esi,y

.while dword ptr [esi]!=0 
  mov eax, [esi+044h]
  call showeax
  invoke MessageBox,0,addr bufferl,0,0;显示pid.
  invoke MessageBoxW,0,[esi+03ch],0,0;显示程序名。
  add esi,[esi]
.endw

  mov eax, [esi+044h];因为上面少显示一个,所以在这里补上。
  call showeax
  invoke MessageBox,0,addr bufferl,0,0;显示pid.
  invoke MessageBoxW,0,[esi+03ch],0,0;显示程序名。

invoke ExitProcess,0;
end start
;made at 2010.04.09
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;在电脑启动时显示字符,我想肯定也能显示图片。像瑞星那样。
;注意编译的平台是native,后缀名不可以是sys。
;把本文件拷贝到%windir%\system32\的目录下。
;更改regedit中的HKLM\SYSTEM\CurrentControlSet\Control\Session Manager的右方BootExecute鍵值,為 autocheck autochk * native。
;或在cmd.exe中輸入 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /v BootExecute /t REG_MULTI_SZ /d "autocheck autochk *\0native\0" /f
;说明:上量行的native是程序名,可以改变。随文件名而改变。
;重新启动,观看。
;本文改编自网上的c/c++代码。
.386
.model flat, stdcall
option casemap:none
include ntdll.inc
includelib ntdll.lib;没有这个,可以动态加载,再找函数的地址。

.code

align 2
szcorrey dw 'm','a','d','e',' ','b','y',' ','c','o','r','r','e','y',0
align 4
correy dw sizeof szcorrey -2
       dw sizeof szcorrey
       dd offset szcorrey
     
start:
invoke NtDisplayString,addr correy
invoke NtTerminateProcess,-1,0
end start
;made at 2010.04.10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;说明本文改变自网上的c/c++代码。
.386
.model flat, stdcall
option casemap:none
include windows.inc
include ntdll.inc
includelib ntdll.lib;没有这个,可以动态加载,再找函数的地址。
include kernel32.inc
includelib kernel32.lib
include user32.inc
includelib user32.lib
include Advapi32.inc
includelib Advapi32.lib

.code
bufferl db 8 dup (?),0
align 4
KdVersionBlock db 28h dup (?),0

showeax proc  ;把eax的值显示出来,存放在bufferl中。
  pushad    
  mov ecx,8 
  xor esi,esi
  againp:dec ecx
  rol eax,4
  push eax
  and eax,0Fh
  cmp eax,9
  jg big
  add eax,30h
  mov [bufferl+esi],al
  pop eax
  inc esi
  cmp ecx,0
  jne againp
  je showp
  big:add eax,37h
  mov [bufferl+esi],al
  pop eax
  inc esi
  cmp ecx,0
  jne againp
  showp:popad
ret
showeax endp

szSeDebugPrivilege db "SeDebugPrivilege",0
align 4 ;更通用的做法是在ml 的后面加 /Zp4
priv dd 1,0,0,2
rv dd ?
htoken dd ?
szkernbase db "kernbase",0
szpsloadedmodulelist db "psloadedmodulelist",0
szdebuggerdatalist db "debuggerdatalist",0

start:
invoke LookupPrivilegeValue,0,addr szSeDebugPrivilege,addr priv+4
invoke GetCurrentProcess
invoke OpenProcessToken,eax,32,addr htoken
invoke AdjustTokenPrivileges,htoken,0,addr priv,16,0,0

invoke ZwSystemDebugControl,7,0,0,addr KdVersionBlock,28h,0

mov eax,dword ptr [KdVersionBlock+10h]
call showeax
invoke MessageBox,0,addr bufferl,addr szkernbase,0

mov eax,dword ptr [KdVersionBlock+18h]
call showeax
invoke MessageBox,0,addr bufferl,addr szpsloadedmodulelist,0

mov eax,dword ptr [KdVersionBlock+20h]
call showeax
invoke MessageBox,0,addr bufferl,addr szdebuggerdatalist,0

invoke ExitProcess,0;
end start
;made at 2010.04.12
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;我就有点佩服自己了!
;但因为少写一个问号而忙活了一天。
.386
.model flat, stdcall
option casemap:none
include ntdll.inc
includelib ntdll.lib

.code
align 4
iosb dd 2 dup (0)
fileHandle dd 0

align 2
szcorrey dw '\','?','?','\','c',':','\','c','o','r','r','e','y','.','t','x','t',0
align 4
fileName dw sizeof szcorrey -2
         dw sizeof szcorrey
         dd offset szcorrey
       
fileAttributes dd 18h,0,offset fileName,40h,0,0

buffer db "made by correy",13,10,
          "QQ:112426112",13,10,
          "Email:leguanyuan at 126 dot com",13,10,
          "Homepage:http://correy.webs.com",13,10,0

start:;下一步把代码写成数据,没有代码一样运行程序,可以不?
invoke NtCreateFile,addr fileHandle,1F01ffh,addr fileAttributes,addr iosb,0,1,0,2,060h,0,0
invoke NtWriteFile,fileHandle,0,0,0,addr iosb,addr buffer,sizeof buffer-1,0,0
ret ;改用这个会更好:invoke NtTerminateProcess,-1,0
end start
;made at 2010.04.13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.386
.model flat, stdcall
option casemap:none
include ntddk.inc
include ntdll.inc
includelib ntdll.lib

 .code

align 4 
ci dd 3488,0 ;第一个数是你要结束的进程的pid
hp dd 0
fa dd 18h,0,0,40h,0,0;在内核驱动中,请把第四个数改为240h.

start:
invoke ZwOpenProcess,addr hp,PROCESS_ALL_ACCESS,addr fa,addr ci
invoke ZwTerminateProcess,hp,0
ret ;改用这个会更好:invoke NtTerminateProcess,-1,0
end start
;made at 2010.06.16 

没有评论:

发表评论