سلام
برنامه ای نیست که بشه مقادیر بازگشتی از یک فراخوانی api رو تغغیر داد ؟ خودم یکی دو ات پیدا کردم اما یکم بعضی وقتا باعش کرش کردن برنامه میشه
و همچنین بشه یک لودر درست کرد که همیشه همینکارو کنیم ؟
با سلام
انجام اينكار كه خيلي ساده هستش دوست عزيز
البته بستگي داره شما قصد داري مقدار برگشتي كدوم api رو تغيير بدي
هم ميتوني از روش api hooking استفاده كني و هم با استفاده از لودر ، كه من راه اول رو پيشنهاد ميكنم البته يه مقدار پيچيده تر هستش ولي كارآمد تر هستش
يا علي
سلام
خب با چه برنامه ای میشه api hooking کرد ؟
قطعا در سطحی که من هستم؛ نوشتن برنامه ای که اینکارو کنه وجود نداره ؛؛ واسه همین دنبال برنامه ای هستم که توانایی این کارو داشته باشه
با سلام
تا اونجا که من میدونم برنامه خاصی واسه این کار وجود نداره و شما باشد خودتون یا به صورت دستی یا از طریق اینجکت کردن یه dll به برنامه مورد نظر و یا استفاده از لودر این کار رو انجام بدین
شما مثال بزن چه api رو میخوای دستکاری کنی و یا نمونه برنامه بزار تا بگم چکار کنی عزیز
یا علی
سلام
این برنامه چنین امکانی داره : softsnoop ؛ اما رو بعضی برنامه رو سیستم من عمل نمیکنه !
api خاصی مد نظرم نیست ؛ برای مثال این برنامه فقط از messageboxA استفاده میکنه ؛ با برنامه بالا تونستم روی فراخوانی تابع MessageBoxA یدونه bp بزارم و مقدار پارامترهای ارسالی رو تغییر بدم
اما برای تغییر همیشگیش باید لودر بنویسم که نمیتونم یا از لودر استفاده کنم که میگین نداریم ؟
این سورس برنامه :
کد php:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox (NULL, "Hello World" , "Hello", 0);
return 0;
}
با سلام
شما در عنوان تاپیک نوشتین که مقدار برگشتی Api رو قصد دارین تغییر بدین ولی در پست آخرتون گفتین که پارامترهای ارسالی رو تغییر دادین !
اگر قصدتون تغییر پارامترهای ورودی هستش که بهترین گزینه همون hook کردن هستش توسط متد dll injection و یا IAT hooking
یه dll واستون آماده میکنم که بیاد api مربوط به MessageBoxA رو hook کنه و توی برنامه هربار که این api رو فراخوانی کنید همیشه یه پیام رو نشون بده - این خوبه ؟
البته روش دوم رو هم میتونم روی برنامتون پیاده کنم
یا علی
با سلام
دوست عزيز من واسه شما يه dll آماده كردم و به همراه سورسش ميزارم واستون كه ببينيد چيكار كردم
در اين dllاز متد api hooking استفاده شده و اونم بطور خيلي ساده
سورس برنامه در محيط برنامه RadAsm كامپايل شده ، تنها كاري كه شما بايد انجام بدي اين هستش كه اين dll رو به برنامه مورد نظرت اينجكت كني و بعد اون هر بار كه MessageBoxA فراخواني بشه برنامه فقط يه پيام رو نشون ميده
اميدوارم مفيد واقع بشه
يا علي
(۱۸-مرداد-۱۳۹۱, ۰۶:۵۴:۳۹)Sh4DoVV نوشته است: [ -> ]شما در عنوان تاپیک نوشتین که مقدار برگشتی Api رو قصد دارین تغییر بدین ولی در پست آخرتون گفتین که پارامترهای ارسالی رو تغییر دادین !
البته روش دوم رو هم میتونم روی برنامتون پیاده کنم
یا علی
درواقع منظمرم همون تغییر مقار برگشتی بود ! که البته فکر نکنم هم زیاد فرق کنه ؛ چون با همین روش میشه هرکاری کرد !
---------
کدتون هیچ کاری انجام نمیداد ! به این نتیجه رسیدم که شما از
استفاده کردین اما هدرشو تو برنامه نیاوردین ؛ در نتیجه این دو تا رو آوردم
کد php:
include \masm32\include\windows.inc
include \masm32\include\user32.inc
بعد از کامپایل و اینجکت تقریبا قبل از صدا زدن messagebox توی برنام اصلی این برنامه اینجکت شما هم اون invoke MessageBoxEx یه نمایش در میومد ؛
و اگه بخواییم برای مثال متن messagebox رو عوض کنیم هم آدرس متن رو بدست میاریم تو حافظه و عوضش میکنیم ؟
--------------------
با این تفاصیل لودر هم در واقع برنامه رو لود میکنه و خودش اینجکت رو انجام میده ؛ درسته ؟
با سلام
لودرتون دقیقا باید همین کار رو انجام بده ، یعنی بیاد برنامه رو لود کنه و بعد اینجکت کنه
اگر بالای سورس رونگاه کنید من یک هدر کلی رو اینکلود کردم که اکثر هدرها داخل اون هست عزیز
حالا کارتون راه افتاد عزیز ؟
بازهم اگر مشکلی بود در خدمتم
یا علی
(۲۷-مرداد-۱۳۹۱, ۰۷:۲۵:۰۲)Sh4DoVV نوشته است: [ -> ]اگر بالای سورس رونگاه کنید من یک هدر کلی رو اینکلود کردم که اکثر هدرها داخل اون هست عزیز
دیدم وقتی خودم هم اینکلود کردم بهم هشدار داد که قبلا انکلود شده !
آره ؛ متشکریم فراوان
+۷