سلام
می خواستم بدونم چه فرقی میکنه که ما Code injection استفاده کنیم برای پردازش و یا از dll injection برای پردازش ها استفاده کنیم.
کلا چه فرقی بین Code injection و dll injection وجود داره؟
و از کدام یکی استفاده کنیم بهتر هست؟
و سئوال آخر وقتی ما dll injection انجام میدم که تابعی ای که نوشتیم اجراء بشه بعد چطوری می تونیم dll injection که به پردازش مورد نظر انجام داده شده است را غیر فعال کنیم یعنی فضای dll injection را از پردازش چطور آزاد و یا پاک کنیم؟
با تشکر فراوان.
تفاوتشون در اینه که در codeinjection اگه توابعی رو درش استفاده کرده باشین که لود نشده باشه تو پروسه شما خودتون باید لودش کنین اما تو dll injection تمامی رفرنسها به apiها رو خود سیستم عامل انجام میده
شما با تابع loadlibrary یک dll رو اینجکت میکنین و با استفاده از تابع freelibrary و دادن هندل dll به اون(هندلشو هم با استفاد از توابع api و گرفتن لیست ماژولهای لود شده)
(۱۶-فروردین-۱۳۹۳, ۰۸:۲۳:۳۶)lord_viper نوشته است: [ -> ]تفاوتشون در اینه که در codeinjection اگه توابعی رو درش استفاده کرده باشین که لود نشده باشه تو پروسه شما خودتون باید لودش کنین اما تو dll injection تمامی رفرنسها به apiها رو خود سیستم عامل انجام میده
شما با تابع loadlibrary یک dll رو اینجکت میکنین و با استفاده از تابع freelibrary و دادن هندل dll به اون(هندلشو هم با استفاد از توابع api و گرفتن لیست ماژولهای لود شده)
ممنون جناب lord_viper.
فقط یک سئوال dll که injection شده به یک پردازش را چطوری باید هندلشو پیدا کنیم و بعد از freelibrary استفاده کنیم؟؟؟؟
سلام
خوب هستيد
من دلفي بلد نيستم ولي بر اساس تجربيات كه دارم ميدونم وقتي كه با استفاده از loadlibrary فايل dll لود ميكنيد اگر موفقت اميز باشه اين عمل هندل اون به برنامه برگشت داده ميشه وگرنه مقدار 0 ، از همين هندل براي انلود استفاده ميشه .
راستي يادتون باشه حين اجراي توابع داخلي dll در برنامه اگر آزادش كنند ممكنه برنامه كرش كنه .
اميدوارم كمك كنه
به اميدديدار
(۱۶-فروردین-۱۳۹۳, ۰۸:۴۱:۳۰)The.Ghost نوشته است: [ -> ]یک سئوال dll که injection شده به یک پردازش را چطوری باید هندلشو پیدا کنیم و بعد از freelibrary استفاده کنیم؟؟؟؟
شما 2 راه داری
راه اولی رو که سعید عزیز گفنم
راه دوم رو هم من تو پست اولم گفته بودم
یک سری توابع هستن که لیست dll های لود شده در یک پروسه رو برمیگردونن مثلا NtQueryInformationProcess از nrdll.dll و ساده ترش EnumProcessModules از psapi.dll
یک سئوال مهم داشتم که اگه لطف کنید و پاسخ بدهید بی نهایت ممنون میشم.
برای مثال:
ما یک برنامه داریم که اسمش Form1 هست داخل این فرم هم یک Timer1 هست که هر یک دقیقه ساعت و تاریخ ویندوز به ما نمایش میدهد، یعنی این یک برنامه در حال اجراء هست.
حالا چطوری ما میتونیم به این برنامه injection کنیم و با این عمل به اون Timer1 دسترسی پیدا کنیم و زمانشو برای مثال بکنیم هر دو دقیقه یک بار پیغام بده؟؟؟؟
آیا به نظر شما این کار امکان پذیر هست؟؟؟؟
چون من هر کاری کردم نتوانستم با injection به کامپیوننت های برنامه دسترسی پیدا کنم؟؟؟؟
لطف اساتید محترم راهنمایی کنید، با تشکر.
اگه تایمر از توابع api استفاده کنه میشه هوکش کرد
اگه از vcl و rtti دلفی استفاده میکنه باید اسم کلاسشو بگیرین getclassname بعد اونو تبدیل به شیی تایمر کنید و مقدار خاصیتشو تغییر بدین
(۲۴-فروردین-۱۳۹۳, ۰۸:۲۷:۳۱)lord_viper نوشته است: [ -> ]اگه تایمر از توابع api استفاده کنه میشه هوکش کرد
اگه از vcl و rtti دلفی استفاده میکنه باید اسم کلاسشو بگیرین getclassname بعد اونو تبدیل به شیی تایمر کنید و مقدار خاصیتشو تغییر بدین
ممنون دوست عزیز، نمونه کدی مثالی ندارید که در این زمینه باشه و یا یکم بیشتر توضیح بدهید؟؟
دوستان من خیلی کارم به مشکل خورده لطفا راهنمایی کنید.
با تشکر فراوان.
کدخاصی ندارم ولی شما میتونی از روی کپشن فورمی که اون تایمر توش هست هندل فورم رو بگیری از طریق هندل به کلاسش برسی و یک متغییر ازش بسازی با داشتن متغییر فورم مورد نظر میتونی به المانهاش که اون تایمر هم میشه دسترسی پیدا کنی و با استفاده از کلاسش مقدارشو عوض کنی
البته این یک نظر هست کد خاصی هم جایی ندیدم ولی میشه اینو تست کرد
البته دلفی تنظیمات پیشفرض کامپوننتها رو تو سکشن ریسورس ذخیره میکنه که با یک resource hacker میشه اونها رو دید و تغییر داد امتحانش ضرری نداره
(۲۵-فروردین-۱۳۹۳, ۱۰:۲۹:۳۶)lord_viper نوشته است: [ -> ]کدخاصی ندارم ولی شما میتونی از روی کپشن فورمی که اون تایمر توش هست هندل فورم رو بگیری از طریق هندل به کلاسش برسی و یک متغییر ازش بسازی با داشتن متغییر فورم مورد نظر میتونی به المانهاش که اون تایمر هم میشه دسترسی پیدا کنی و با استفاده از کلاسش مقدارشو عوض کنی
البته این یک نظر هست کد خاصی هم جایی ندیدم ولی میشه اینو تست کرد
البته دلفی تنظیمات پیشفرض کامپوننتها رو تو سکشن ریسورس ذخیره میکنه که با یک resource hacker میشه اونها رو دید و تغییر داد امتحانش ضرری نداره
ممنونم ولی من هر کاری می کنم بازم نمیتونم دسترسی به اون تایمر داشته باشم با این که تمام مشخصاتش هم میدونم مثلا اسم فرم برنامه و اسم تایمر ولی بعد از injection یک کلاس تایمر تعریف کردم ولی نمیدونم اینو چطوری به اون تایمره ربط بدم و بعد تغییرات انجام بدم؟؟؟؟ :divar: :divar:
من این کد زیر را نوشتم.
کد:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
WinClass: array[0..255] of Char;
str:string;
MyHandle: THandle;
begin
MyHandle:=FindWindow(nil, Pchar(Trim(Edit1.Text)));
if (MyHandle <> 0) then
begin
GetClassName(MyHandle, WinClass, SizeOf(WinClass));
ShowMessage(WinClass);
for i := 0 to Form1.ComponentCount - 1 do
begin
if Form1.Components[i] is TLabel then
begin
Str:=Trim((Form1.Components[i] as TLabel).Caption);
ShowMessage(Str);
end;
end;
end;
end;
حالا چطوری میشه متغییر WinClass که یک رشته می باشد را به متغییر فرم تبدیل کرد.
که بعد از این کار به جای Form1 بزاریم WinClass که بعد بشه برای مثال Label برنامه را تغییر داد.
در اینجا من از Label استفاده کردم چون گفتم هم راحت تر است و هم سریع نتیجه را میشه دید که بعد برم برای اون تایمر استفاده کنم.
سئوال من الان این هست که چطوری متغییر WinClass را چطوری ربطش بدم. و بعد به جای Form1 بزارم WinClass ؟؟؟؟
لطفا راهنمایی کنید.