إستدعاء & إستخدام الدالة ZwTerminateProcess من User Mode
#1
السلام عليكم ورحمة الله وبركاته

إستدعاء دوال Native API مباشرة من User Mode بدون تصريح
بالإعتماد على Syscall Number

ومنه إجراء لإستخدام الدالة ZwTerminateProcess مع دعم متعدد لأنظمة التشغيل (XP/ 7/ 8/ 8.1/ 10 Win 32Bit)
تم التجربة على كل من الأنظمة (XP/7/8.1/10)

إقباس الفكرة كان من هنا إستدعاء & إستخدام Native Api من الـ User Mode

PHP كود :
function ZwTerminateProcess(hProcess: DWORD; uCode: DWORD): NTSTATUS; stdcall; assembler;
{
  
Coded By Agmcz
  Support 
for all operating systems [XP, 7, 8, 8.1, 10; 32bit]
  
Tested on Windows XP/7/8.1/10.
}
asm
{$IFDEF WIN32}
  
MOV EAX, FS:[$C0]
  
CMP EAX, $0
  JNZ 
@Exit
  
MOV EAX, FS:[$30]
  
MOV EAX, [EAX+$A4]
  
SUB EAX, $5
  JE 
@WinXP
  DEC EAX
  JE 
@Win8_81
  SUB EAX
, $4
  JNE 
@Sys
  MOV EAX
, $0024
  JMP 
@Sys
  
@Win8_81:
  
MOV EAX, EBX
  MOV EAX
, [EAX+$A8]
  
DEC EAX
  JE 
@Win7
  DEC EAX
  SUB EAX
, $2
  JAE 
@Sys
  MOV EAX
, $0023
  JMP 
@Sys
  
@Win7:
  
MOV EAX, $0172
  JMP 
@Sys
  
@WinXP:
  
MOV EAX, $0101
  
@Sys:
  
LEA EDX,[EBP+$8]
  
INT $2E
  
@Exit:
{
$ENDIF}
end; 
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 2 users say قال شكرا ل Agmcz على المشاركة المفيدة
  • محمد عبد العزيز, Eagle Master
الرد
#2
بنكهة شل كود (171 بايت)

PHP كود :
const
 
 arrZwTerminateProcess: array[0..171] of byte = (
 
   $55, $8B, $EC, $64, $8B, $05, $C0, $00, $00, $00, $83, $F8, $00, $75, $4A,
 
   $64, $8B, $05, $30, $00, $00, $00, $8B, $80, $A4, $00, $00, $00, $83, $E8,
 
   $05, $74, $2E, $48, $74, $0C, $83, $E8, $04, $75, $2B, $B8, $24, $00, $00,
 
   $00, $EB, $24, $89, $D8, $8B, $80, $A8, $00, $00, $00, $48, $74, $0D, $48,
 
   $83, $E8, $02, $73, $13, $B8, $23, $00, $00, $00, $EB, $0C, $B8, $72, $01,
 
   $00, $00, $EB, $05, $B8, $01, $01, $00, $00, $8D, $55, $08, $CD, $2E, $5D,
 
   $C2, $08, $00, $8D, $40, $00, $98, $25, $40, $00, $11, $02, $2E, $31, $01,
 
   $00, $00, $00, $00, $00, $00, $00, $11, $00, $00, $00, $00, $10, $40, $00,
 
   $11, $47, $65, $6E, $65, $72, $61, $74, $65, $53, $68, $65, $6C, $6C, $43,
 
   $6F, $64, $65, $8B, $C0, $55, $8B, $EC, $33, $C0, $55, $68, $DF, $25, $40,
 
   $00, $64, $FF, $30, $64, $89, $20, $33, $C0, $5A, $59, $59, $64, $89, $10,
 
   $68, $E6, $25, $40, $00, $C3, $00);

var
 
 ZwTerminateProcess: function(hProcess: DWORD; uCode: DWORD): NTSTATUS; stdcall;
begin
  ZwTerminateProcess 
:= @arrZwTerminateProcess;
 
 {code}
end. 
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 3 users say قال شكرا ل Agmcz على المشاركة المفيدة
  • AX302, ESSO_X, Eagle Master
الرد
#3
172 بايت Big Grin
:: من يملك المعلومة يملك الميدان :: 
[-] كل من 1 user says قال شكرا ل AX302 على المشاركة المفيدة
  • Agmcz
الرد
#4
شل كود فيه زيادة وتكفي فقط 93 بايت

PHP كود :
const
 
 arrZwTerminateProcess: array[0..92] of byte = (
 
   $55, $8B, $EC, $64, $8B, $05, $C0, $00, $00, $00, $83, $F8, $00, $75, $4A,
 
   $64, $8B, $05, $30, $00, $00, $00, $8B, $80, $A4, $00, $00, $00, $83, $E8,
 
   $05, $74, $2E, $48, $74, $0C, $83, $E8, $04, $75, $2B, $B8, $24, $00, $00,
 
   $00, $EB, $24, $89, $D8, $8B, $80, $A8, $00, $00, $00, $48, $74, $0D, $48,
 
   $83, $E8, $02, $73, $13, $B8, $23, $00, $00, $00, $EB, $0C, $B8, $72, $01,
 
   $00, $00, $EB, $05, $B8, $01, $01, $00, $00, $8D, $55, $08, $CD, $2E, $5D,
 
   $C2, $08, $00);

var
 
 ZwTerminateProcess: function(hProcess: DWORD; uCode: DWORD): NTSTATUS; stdcall;
begin
  ZwTerminateProcess 
:= @arrZwTerminateProcess;
 
 {code}
end. 
سبحان الله وبحمده سبحان الله العظيم
[-] كل من 2 users say قال شكرا ل Agmcz على المشاركة المفيدة
  • محمد عبد العزيز, AX302
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم