امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
رونویسی یک فانکشن در kernel32 - اینجکتشن
نویسنده پیام
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #1
رونویسی یک فانکشن در kernel32 - اینجکتشن
سلام
من زیاد تو تاپیکا پیزی در مورد اینجکشن و اینا خوندم . ولی خوب هنوز یه کم سردرگمم .
فرض کنید می خایم کاری کنیم که از این به بعد هر بار توی ویندوز می خایم یه فایلی رو پاک کنیم تابع ما اجرا بشه به جای تابعی که الان توی کرنل32 وجود داره ! و حذف فایل از اون طریق انجام بگیره .

حالا باید چه کنیم ؟ سیستم واید باید باشه اینجکتمون ؟
میشه یه نمونه از اون تابع که باید اینجکت بشه رو بنویسین ؟ اقلا بدنه اصلی اون تابع رو بنویسین . یعنی اینکه دقیقا باید مثل تابع توی کرنل32 باشه ؟

کلا راهنمایی می خام
ممنون
۰۹-فروردین-۱۳۸۹, ۱۳:۵۳:۰۷
ارسال‌ها
پاسخ
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #2
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
Wide Hook را به عنوان یک لغت کلیدی سرچ کنید به منابعش میرسید ، من متاسفانه وی بی چیزی بلت نیستم :)

[تصویر:  sajdelogo.gif]
۰۹-فروردین-۱۳۸۹, ۱۵:۰۶:۳۳
ارسال‌ها
پاسخ
تشکر شده توسط : amin_vb
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #3
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۰۹-فروردین-۱۳۸۹, ۱۵:۰۶:۳۳)joker نوشته است: Wide Hook را به عنوان یک لغت کلیدی سرچ کنید به منابعش میرسید ، من متاسفانه وی بی چیزی بلت نیستم :)

سرچ کردن واید هوک معمولا منو به مثالهایی برای مونیتور کردن ککیبر و ماوس توی سیستم عامل می رسونه !

در واقع من برای اون مورد خاص که شرح دادم نیاز به کمک دارم. یعنی یه مثالی از رونویسی یه تابع توی کرنل32 و سپس اینجکت کردنش .
۰۹-فروردین-۱۳۸۹, ۱۶:۳۷:۲۴
ارسال‌ها
پاسخ
joker آفلاین
کاربر با تجربه
****

ارسال‌ها: 798
موضوع‌ها: 67
تاریخ عضویت: آذر ۱۳۸۵

تشکرها : 849
( 3655 تشکر در 908 ارسال )
ارسال: #4
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۰۹-فروردین-۱۳۸۹, ۱۶:۳۷:۲۴)amin_vb نوشته است:
(۰۹-فروردین-۱۳۸۹, ۱۵:۰۶:۳۳)joker نوشته است: Wide Hook را به عنوان یک لغت کلیدی سرچ کنید به منابعش میرسید ، من متاسفانه وی بی چیزی بلت نیستم :)

سرچ کردن واید هوک معمولا منو به مثالهایی برای مونیتور کردن ککیبر و ماوس توی سیستم عامل می رسونه !

در واقع من برای اون مورد خاص که شرح دادم نیاز به کمک دارم. یعنی یه مثالی از رونویسی یه تابع توی کرنل32 و سپس اینجکت کردنش .

مثال هوک کیبورد یک مثال پایه هست ، شما هر api دیگه ای را هم به همین روش میتونید دست خودتون بگیرید.
شما در روش واید هوک در واقع تابع را رونویسی نمیکنید ، آدرسی که اون تابع لود میشه را به واسطه هوک کردن انتقال میدید به مکانی که کدهای خودتون را نوشتید
مثلا شما میتونید با یک واید هوک تابع DeleteFile را دست خودتون بگیرید و ...
( البته اگه قرار باشه کل توابع پایه (مثل حذف کردن فایل) را دست خودتون بگرید مجبور باشید کلش را به زبان اسمبلی بنویسد ، چون دیگه به apiاون دسترسی ندارید)

فکر کنم www.Madshi.net به کار شما بیاد ، یه سر به انجمنش بزنید( البته این بنده خدا تخصصش دلفیه) ولی فکر کنم مطالب بیس را بشه ازش بدست بیارید.

[تصویر:  sajdelogo.gif]
۰۹-فروردین-۱۳۸۹, ۱۷:۱۱:۵۷
ارسال‌ها
پاسخ
تشکر شده توسط : lord_viper, amin_vb, Di Di, اشک
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #5
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۰۹-فروردین-۱۳۸۹, ۱۳:۵۳:۰۷)amin_vb نوشته است: سلام
من زیاد تو تاپیکا پیزی در مورد اینجکشن و اینا خوندم . ولی خوب هنوز یه کم سردرگمم .
فرض کنید می خایم کاری کنیم که از این به بعد هر بار توی ویندوز می خایم یه فایلی رو پاک کنیم تابع ما اجرا بشه به جای تابعی که الان توی کرنل32 وجود داره ! و حذف فایل از اون طریق انجام بگیره .

حالا باید چه کنیم ؟ سیستم واید باید باشه اینجکتمون ؟
میشه یه نمونه از اون تابع که باید اینجکت بشه رو بنویسین ؟ اقلا بدنه اصلی اون تابع رو بنویسین . یعنی اینکه دقیقا باید مثل تابع توی کرنل32 باشه ؟

کلا راهنمایی می خام
ممنون
شما باید در مورد hookapi یا IATRedirecting در گوگل search کنین
راحترین کار استفاده از تکنیک IATHoking هست که ادرس فراخوان تابع Deletefile رو در IAT یا همون IMport Address Tableبا تابع خودتون بازنویسی کنین پارامتر های تابع شما باید همنوع و برابر با تابع اصلی deletefile باشه چون موقع فراخوانی تابع پارامترها از برنامه به جای تابع اصلی به تابع شما ارسال میشهو تو تابع خودتون بعد از چک کردن پارامترهای ورودی با فراخوانی تابع DeleteFile اصلی اون فایل رو پاک میکنین و خروجی رو به برنامه بازگشت میدین
و همون طور که joker عزیز گفتن اگه تابع اصلی رو بازنویسی کنین روند حذف فایل رو باید خودتون به صورت اسمبلی انجام بدین

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۰۹-فروردین-۱۳۸۹, ۱۸:۲۱:۰۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : amin_vb, اشک
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #6
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(
اجازه بدین داخل پرانتز یه سوالی بپرسم قبل از اینکه بر مبنای غلط برم جلو !
1- فرض کنید شما الان توی یک فولدر 20 تا فایل رو مارک می کنین و می زنین برای دیلیت شدن . یعد از اینکه شما فرمان دیلیت رو ارسال می کنید یه پنجره باز میشه (همون که پروگرس بار داره) حالا سوالم اینه که چه چیزی اینجا داره اون پنجره رو نمایش می ده ؟ و چه چیزی آدرس اون 20 تا فایل رو یکی یکی داره میده به اون فانکشن دیلیت در کرنل32 ؟
پروسسٍ اکسپلورر ؟
2- حالا فرض کنید من می خام که در این فرآیند دیلیت شدن فقط یه سری تغییرات بدم . یعنی وقتی کاربر 20 تا فایل رو زد برای دیلیت من قبل از اینکه هر اتفاقی بیفته بیام اسم فایلهایی که برای دیلیت شدن ارسال شدن رو بررسی کنیم و برای یک سری از اونها کلا" فرآیند پاک شدن رو کنسل کنم و برای بقیه فرآیند دیلیت شدن رو خودم با برنامه (و بدون نمایش اون پروگرس بار!!) انجام بدم .
برای چنین کاری چطور باید عمل کرد ؟
)
مجدد به صورت زبانی هم از اساتید تشکر می کنم بابت راهنمایی .
۰۹-فروردین-۱۳۸۹, ۲۳:۵۴:۵۳
ارسال‌ها
پاسخ
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #7
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
دوست عزیز

جواب این سوال هم در داخل پاسخ سوال اولتون نهفته است. برای این کار باید روند انجام کارها تا پاک شدن نهایی فایل ها و فولدرها رو بدونید و سر راه اون یه فیلتر ایجاد کنید.

در حقیقت به جای اینکه کل پروسه حذف فایلها رو شبیه سازی کنید باید پروسه دسته بندی و انتخاب فایلها رو شبیه سازی کنید مثلا طوری که سیستم عامل نتونه فایل یا فولدر مورد نظر شما رو انتخاب کنه. برای این کار باید با نحوه کار سیستم عامل مورد نظرتون کاملا آشنایی داشته باشید.

۱۰-فروردین-۱۳۸۹, ۰۲:۰۹:۰۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : اشک
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #8
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۱۰-فروردین-۱۳۸۹, ۰۲:۰۹:۰۶)Di Di نوشته است: دوست عزیز

جواب این سوال هم در داخل پاسخ سوال اولتون نهفته است. برای این کار باید روند انجام کارها تا پاک شدن نهایی فایل ها و فولدرها رو بدونید و سر راه اون یه فیلتر ایجاد کنید.

در حقیقت به جای اینکه کل پروسه حذف فایلها رو شبیه سازی کنید باید پروسه دسته بندی و انتخاب فایلها رو شبیه سازی کنید مثلا طوری که سیستم عامل نتونه فایل یا فولدر مورد نظر شما رو انتخاب کنه. برای این کار باید با نحوه کار سیستم عامل مورد نظرتون کاملا آشنایی داشته باشید.

ممنون دی دی جان
ولی واقعا متوجه منظورتون نشدم .
پروسه دسته بندی و انتخاب فایلها رو شبیه سازی کنیم ؟ این چه پروسه ایه ؟ کجاس ؟
سیستم عامل هم ویندوز ه طبعا" .
۱۰-فروردین-۱۳۸۹, ۰۲:۲۴:۲۵
ارسال‌ها
پاسخ
Di Di آفلاین
مدير بخش هك و كرك
*****

ارسال‌ها: 2,358
موضوع‌ها: 116
تاریخ عضویت: اسفند ۱۳۸۵

تشکرها : 1816
( 4046 تشکر در 1321 ارسال )
ارسال: #9
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
عملا از این روش بیشتر استفاده می شه چون خیلی راحت تره اگه کاری کنیم که یوزر اصلا قادر نباشه فایل مورد نظر رو ببینه تا اینکه بخوایم پروسه حذف فایل ها رو مجددا با اسممبلی بنویسیم!! دقیقا می شه هوک کردن سیستم فایل ویو و فیلتر کردن نام فایل مورد نظر از لیست خروجی تابع.

در ثانی فکر می کنم از این روش در بدافزارهای زیادی استفاده شده باشه ( مثل روتکیت ها ) که می تونید با نگاه به سورس اونها بیشتر با طرز کارشون آشنا بشید.

۱۰-فروردین-۱۳۸۹, ۰۲:۴۶:۰۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : amin_vb, اشک
amin_vb آفلاین
كاربر دو ستاره
**

ارسال‌ها: 66
موضوع‌ها: 17
تاریخ عضویت: فروردین ۱۳۸۴

تشکرها : 27
( 13 تشکر در 10 ارسال )
ارسال: #10
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
(۱۰-فروردین-۱۳۸۹, ۰۲:۴۶:۰۷)Di Di نوشته است: عملا از این روش بیشتر استفاده می شه چون خیلی راحت تره اگه کاری کنیم که یوزر اصلا قادر نباشه فایل مورد نظر رو ببینه تا اینکه بخوایم پروسه حذف فایل ها رو مجددا با اسممبلی بنویسیم!! دقیقا می شه هوک کردن سیستم فایل ویو و فیلتر کردن نام فایل مورد نظر از لیست خروجی تابع.

در ثانی فکر می کنم از این روش در بدافزارهای زیادی استفاده شده باشه ( مثل روتکیت ها ) که می تونید با نگاه به سورس اونها بیشتر با طرز کارشون آشنا بشید.

آهان . الان متوجه منظورتون شدم ! اما اون چیزی که گفتین کلا عملی نیست . یعنی به درد کار من نمی خوره . یعنی در واقع هدف من همونطور که گفتم اینه که کاربر هر فایلی رو که برای دیلیت انتخاب کرد رو من ببینم و بعد تصمیم گیری کنم . یعنی کلن تغییر سیستم فایل ویو هیچ !
۱۰-فروردین-۱۳۸۹, ۰۳:۰۲:۳۵
ارسال‌ها
پاسخ
lord_viper غایب
مدیر کل انجمن
*****

ارسال‌ها: 3,949
موضوع‌ها: 352
تاریخ عضویت: بهمن ۱۳۸۴

تشکرها : 5193
( 9875 تشکر در 2650 ارسال )
ارسال: #11
RE: رونویسی یک فانکشن در kernel32 - اینجکتشن
شما برای کاری که میخواهید انجام بدین باید تابع deletefile رو هوک کنید اون پروگرس بار رو explorer نشون میده و برای حذف هر فایل از تابع deleteFile استفاده میکنه هر وقت کاربر بخواهد فایلی رو حذف کنه ادرس اون فایل به عنوان پارامتر به تابع DeleteFile ارسال میشه وقتی شما این تابع رو هوک میکنین تابع شما قبل از تابع اصلی اطلاعات رو دریافت میکنه و پردازش میکنه و در صورت تایید تابع شما تابع اصلی DeleteFile رو فراخوانی میکنه

این یه نمونه مثال هوک MessageBoxA همون طور که میبینین پارامترهای تابع با پارامترهای تابع اصلی یکی هست

کد:
type
   msgdlg=function(form:HWND;text,caption:PChar;flag:UINT):Integer;stdcall;

function xmessagebox(form:HWND;text,caption:PChar;flag:UINT):Integer;stdcall;
var
   dlg:msgdlg;
begin
dlg:=getprocaddress(LoadLibrary(user32),'MessageBoxA');
Result:=dlg(form,text,'Lord_Viper',flag);
end;
در این هوک هر وقت در برنامه هوک شده تابع MessageBox فراخوانی بشه کپشن اون هر چی باشه به Lord_Viper تغییر پیدا میکنه
این تابع درون یک dll قرار میگیره و به پروسه یا پروسه های مورد نظر اینجکت میشه و ادرس این تابع با تابع اصلی MessageBoxA در برنامه عوض میشه وقتی تابع MessageBoxA فراخوانی میشه ادرس تابع از ImportAddressTable بدست میاد و برنامه به اون ادرس پرش میکنه وقتی شما ادرس IAT رو به ادرس تابع خودتون عوض میکنین برنامه به تابع شما پرش میکنه و پارامترها به تابع شما ارسال میشه و شما میتونین تصمیم بگیرین که اون فایل پاک بشه یا نه

[تصویر:  xshon.png]
از آن نماز که خود هیچ از آن نمی فهمی خدا چه فایده و بهره اکتساب کند
تفاخری نبود مر خدای عالم را که چون تو ابلهی او را خدا حساب کند
۱۰-فروردین-۱۳۸۹, ۱۱:۴۶:۴۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : amin_vb, اشک, HoseinVig


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] فانکشن برای تشخیص زبان عبارت متنی eppagh 0 1,726 ۱۳-شهریور-۱۳۹۳, ۱۰:۲۵:۲۵
آخرین ارسال: eppagh
  [سوال] نوشتن توضیح در فانکشن Add-in eppagh 4 3,633 ۱۳-مرداد-۱۳۹۳, ۱۴:۱۷:۲۸
آخرین ارسال: babyy

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS