![]() |
|
سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6) +--- قسم : دلفي والتعامل مع النظام و الذاكرة (https://delphi4arab.net/forum/forumdisplay.php?fid=20) +--- الموضوع : سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent (/showthread.php?tid=10732) الصفحات:
1
2
|
سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - Rever7eR - 01-04-2020 السلام عليكم ورحمة الله و بركاته أردت كتابة اضافة للمنقح لتجاوز دالة IsDebuggerPresent وواجهتني بعض المشاكل . الفكرة كالتالي 1- جلب مقبض الملف المحمل الى المنقح لنسميه Target مثلا 2- استعمال الدالة NtQueryInformationProcess PHP كود : __kernel_entry NTSTATUS NtQueryInformationProcess(البنية ProcessInformationClass تقوم بجلب مؤشر للبنية PEB التي تحوي على ال BeingDebugged Flag و الذي تستعمله الدالة IsDebuggerPresent في التعرف على المنقح ! 3- التغيير على البايت BeingDebugged يحتاج دالة WriteProcessMemory على ما أعتقد ؟ 4- استعمال الدالة ReadProcessMemory لقراءة البنية PEB 5- اكمال سير البرنامج هل تحليلي صحيح ؟ المشاكل التي واجهتني حتى الان هي : كيف احصل على مقبض ملف تنفيذي و هو قيد التنقيح ؟ كيف استعمل دالة WriteProcessMemory للتغيير على البايت BeingDebugged ؟ (قمت بالتجربة سابقا و فشلت في تغييرها , بدل القيمة 1 مثلا احصل عى قيمة عشوائية مثل 99...) طبعا القيمة غير مهمة مادامت لا تساوي الصفر , لكن اريد ان احصل على القيمة التي احددها انا , و ليس قيمة عشوائية ان شاء الله تكون مفهومة ![]() حاليا اقوم بتجربة على ملف تنفيذي خارجي سميته Target و يستعمل الدالة IsDebuggerPresent PHP كود : typeRE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - Rever7eR - 02-04-2020 هذا نموذج اولي Plugin ... وجدت طريقة جلب الملف التي يتم تنقيحه .... المشكل الان هو ان نقاط التوقف لا تعمل داخل دلفي ؟ (أريد ان اتفقد ما اذا تم ملأ البنية PocessBasicInfo) كود : library AADebug;
uses
SysUtils, plugin, Windows, Classes;
{$R *.res}
type
PEB = record
Reserved1: array [0 .. 1] of Byte;
BeingDebugged: Byte;
end;
PROCESS_BASIC_INFORMATION = record
Reserved1: Pointer;
PebBaseAddress: Pointer;
end;
resourcestring
PLUGIN_NAME = 'Anti IsDebuggerPresent';
var
g_hwndOlly: HWND; // OllyDbg Window Handle
ProcessBasicInfo : PROCESS_BASIC_INFORMATION;
Length: Cardinal;
EB : PEB;
targethandle : Integer;
function ODBG_Plugininit(ollydbgversion: Integer; hWndOlly: HWND; features: PULONG): Integer; cdecl;
begin
g_hwndOlly := hWndOlly;
Addtolist(0, 0, PAnsiChar(PLUGIN_NAME));
Result := 0;
end;
function ODBG_Plugindata(name: PChar): Integer; cdecl;
begin
StrLCopy(name, PChar(PLUGIN_NAME), 32);
Result := PLUGIN_VERSION;
end;
function NtQueryInformationProcess(ProcessHandle: THANDLE;
ProcessInformationClass: DWORD;
ProcessInformation: Pointer;
ProcessInformationLength: ULONG;
ReturnLength: PULONG): LongInt;
stdcall; external 'ntdll.dll';
procedure Getinfo;
begin
targethandle := PluginGetValue(VAL_HPROCESS);
MessageBox(g_hwndOlly, PChar(IntToHex(targethandle,8)), PChar('info'), MB_ICONINFORMATION);
NtQueryInformationProcess(targethandle, 0, @ProcessBasicInfo, sizeof(PEB), @length);
end;
procedure ODBG_Pluginaction(origin: Integer; action: Integer; pItem: Pointer); cdecl;
begin
if (origin = PM_MAIN) then
begin
Getinfo;
end;
end;
exports
ODBG_Plugininit name '_ODBG_Plugininit',
ODBG_Plugindata name '_ODBG_Plugindata',
ODBG_Pluginaction name '_ODBG_Pluginaction';
begin
end.RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - Rever7eR - 03-04-2020 يبدو ان مثل هذه المواضيع لا تلقى ترحيب مثل ما كانت سابقا ؟ اغلب المواضيع حاليا تتمحور حول مشاكل قواعد البيانات ! لا باس ... RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - S.FATEH - 03-04-2020 السلام عليكم للاسف الكثير من الاعضاء المميزين رحلو عن المنتدى... RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - onexite - 03-04-2020 شكرا على المشاركة المفيدة ساقوم بنقل الموضوع الى دلفي والتعامل مع النظام و الذاكرة RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - محمد عبد العزيز - 03-04-2020 (03-04-2020, 01:49 AM)Rever7eR كتب : يبدو ان مثل هذه المواضيع لا تلقى ترحيب مثل ما كانت سابقا ؟اي موضوع مرحب به والدليل رد مشرفين بالموضوع... عندما لا تجد رد اصبر حتى يشاهده من له باع بالأمر ولا تتفاجئ ان لم يفهم الموضوع 90% RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - Hs32-Idir - 03-04-2020 كود : function GetProcessIsBeingDebugged(ProcessHandle: THandle; var IsBeingDebugged: Boolean): Boolean;
var
DebugPort: PVOID;
TargetProcessHandle: THandle;
SourceProcessHandle: THandle;
DuplicateResult: BOOL;
DesiredAccess: ACCESS_MASK;
begin
Result := False;
try
if (@NtQueryInformationProcess <> nil) then
begin
DuplicateResult := False;
TargetProcessHandle := 0;
DuplicateResult := DuplicateHandle(GetCurrentProcess(), ProcessHandle, GetCurrentProcess(), @TargetProcessHandle, 0, False, DUPLICATE_SAME_ACCESS);
if DuplicateResult then
begin
try
if NtQueryInformationProcess(
TargetProcessHandle,
7,
@DebugPort,
SizeOf(PVOID),
nil
) = 0 then
Result := True;
if DebugPort <> nil then
IsBeingDebugged := True;
finally
if TargetProcessHandle <> 0 then
CloseHandle(TargetProcessHandle);
end;
end;
end;
except
end;
end;RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - حسن لطفى - 03-04-2020 (03-04-2020, 01:56 PM)Hs32-Idir كتب : شكرا استاذ لماذا ضاعفت الهاندل ؟ RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - Rever7eR - 03-04-2020 (03-04-2020, 09:44 AM)S.FATEH كتب : السلام عليكم للاسف الكثير من الاعضاء المميزين رحلو عن المنتدى... اجل لاحظت ذلك أيضا للأسف . (03-04-2020, 09:51 AM)onexite كتب : شكرا على المشاركة المفيدة ليست مفيدة ما دمت لم اتوصل الى حل بعد العفو اخي العزيز(03-04-2020, 01:37 PM)B.M.AbdelAziZ كتب : اي موضوع مرحب به والدليل رد مشرفين بالموضوع... صحيح , شكرا لك استاذ و اعتذر عن ما قلت سابقا ![]() (03-04-2020, 01:56 PM)Hs32-Idir كتب : function GetProcessIsBeingDebugged(ProcessHandle: THandle; var IsBeingDebugged: Boolean): Boolean شكرا على اهتمامك اخي العزيز لكن الدالة لا تعمل , لاحظت ان لها 2 برامترات ؟ اظن انها تحتاج بارامتر واحد و هو مقبض الملف على ما أظن ؟ لأن المتغير IsBeingDebugged هو ما نبحث عنه و ليس هو ما نمرره للدالة ؟ هذا ما فهمته و الله اعلم ايضا لاحظت انك استعملت PVOID في تعريف المتغير DebugPort الاصح هو Pointer على ما اعتقد . اذا كنت على خطأ فالرجاء ترشدني للطريقة الصحيحة من فضلك RE: سؤال حول كتابة Plugin لتجاوز دالة IsDebuggerPresent - Hs32-Idir - 04-04-2020 في حالتي ، تتحقق الوظيفة مما إذا كانت process is Being Debugged ، لذا إذا كان صحيحًا ، فيمكنك محاولة فصلها عن Debugger هذه ترجمة C ++ ، في دلفي PVOID = POINTER لجعلها تعمل حاولRunAsAdmin اجعله يعمل تحت المؤقت (Timer) فيمكنك محاولة فصلها ب NtRemoveProcessDebug آسف للغتي ، لدي لوحة مفاتيح ,qwerty هل يمكنني النشر باللغة الإنجليزية أو لغات أخرى (03-04-2020, 10:07 PM)حسن لطفى كتب :لجعلهم same access(03-04-2020, 01:56 PM)Hs32-Idir كتب : مناسب للعمل في process المستهدفة. |