PDA

View Full Version : Freeze کرن متغیرها در دلفی ؟؟؟



fire-wizard
چهارشنبه 23 آبان 1386, 23:56 عصر
با سلام خدمت دوستان عزیز .

همون طور که بعضی از دوستان میدونن با استفاده از بعضی از نرم افزارها میتونیم متغییر های یک برنامه ی در حال اجرا رو مشاهده کنیم .

از جمله ی این نرم افزار ها میتونم به :

Tsearch و MemHack اشاره کنم که این کار رو انجام میدن .

حالا علاوه بر پیدا کردن متغییر ها میتونن متغییر مورد نظر رو هم Freeze کنن یعنی کاری کنن که مقدار اون ثابت بمونه و تغییر نکنه . و حتی میتونن مقدار درون متغییر رو تغییر بدن .

نکته : از این روش برای کرک کردن نرم افزارهایی استفاده میشه که محدودیت زمانی دارن و فرد کرکر میاد و متغییر مربوط به شمارنده ی روز رو روی عدد 1 Freeze میکنه تا دیگه تغییر نکنه و نرم افزار از کار نیوفته .

البته این نکته رو گفتم تا منظورم رو خوب بفهمید . ( یه وقت فکرای بد نکنینا ) :لبخند:

خوب حالا میخوام بدونم که اگه ما ادرس یک متغییر رو در یک نرم افزار داشته باشیم با دلفی چه جوری میتونیم بر اساس اون ادرس , متغییر مربوطش رو Freeze کنیم ؟

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

ایا اصلا با دلفی میشه چنین کاری کرد ؟

اگه یکی از دوستان میتونه یک نمونه اینجا بزاره تا همگی استفاده کنیم !!!

با تشکر :چشمک:

vcldeveloper
پنج شنبه 24 آبان 1386, 01:03 صبح
برای انجام همچین کاری باید debugger بنویسید.

fire-wizard
پنج شنبه 24 آبان 1386, 23:41 عصر
ببخشید منظورتون رو خوب نفهمیدم .

ایا نمونه ی اماده ای در دلفی برای این کار انجام نداره ؟

یعنی قبل از من اصلا در این مورد بحث نشده بود ؟

Cave_Man
جمعه 25 آبان 1386, 13:11 عصر
من این MemHack رو توی google سرچ کردم 1000 تا MemHack اومد و هر کدومش مال یه شخص خاصی و با قیمت های متفاوتی بودن.منظور شما کدوم هست و کدومش از همه مشهورتر هست ؟ لینک خاصی از اون سراغ دارید؟

Hamid_PaK
جمعه 25 آبان 1386, 14:00 عصر
با استفاده از WriteProcessMemory شما مقدار یک متغییر در حافظه رو تعریف می کنید.
برنامه هایی که شما مثال زدید نیز از همین روش برای خواندن و نوشتن (WriteProcessMemory, ReadProcessMemory) مقادیر متغییرهای برنامه ها استفاده می کنند ولی آنها متغییر ها را Freeze نمی کنند بلکه در مدت زمان کوتاهی (100 Milisecond) آن را مقدار دهی می کنند.

یا حق ...

Inprise
جمعه 25 آبان 1386, 20:40 عصر
با استفاده از WriteProcessMemory شما مقدار یک متغییر در حافظه رو تعریف می کنی

با این تابع آفستی از حافظه ویرایش میشه . یک یا تعدادی از آفستهای حافظه لزوما یک متغیر نیستن .



نکته : از این روش برای کرک کردن نرم افزارهایی استفاده میشه که محدودیت زمانی دارن و فرد کرکر میاد و متغییر مربوط به شمارنده ی روز رو روی عدد 1 Freeze میکنه تا دیگه تغییر نکنه و نرم افزار از کار نیوفته .

چیزی تحت عنوان Freeze کردن اصلا مفهوم فنی نداره .
اگر شمارنده ای داشته باشی ، برای تغییر مقدارش ، یا باید تابع مربوطه Patch بشه ، یا برنامه توسط یک Loader اجرا بشه و بعد از اجرا آفستهای محل متغیر شناسائی بشن و مقدارشون تغییر کنه .


و بعد یک قمست باشه که ادرس متغییر رو داخلش تایپ کنیم .

آفستهای یک متغیر در حافظه لزوما همیشه در یک محل ثابت نیستن . خصوصا برای متغیرهای پویائی که رو هیپ قرار میگیرن .


ببخشید منظورتون رو خوب نفهمیدم .

ایا نمونه ی اماده ای در دلفی برای این کار انجام نداره ؟

یعنی قبل از من اصلا در این مورد بحث نشده بود ؟

برای اینکه منظور رو متوجه بشی قبلش باید کمی از مقدمات مسئله بدونی . همانطور که گفت اینکارها توسط دیباگر انجام میشه . دیباگرها با استفاده از روتینهائی که سیستم عامل فراهم میکنه بهت امکان میدن روند اجرای برنامه رو کنترل کنی و در زمان اجرا محتویات فضای آدرسیش رو ببینی و ویرایش کنی یا مواردی از این قبیل . Memory Hacker ها هم یه سری دیباگر خاص هستند که فقط روی دستکاری حافظه متمرکز شدن . اگه میخوای یکی خودت بنویسی باید از Debugging API ویندوز ، یا از Windbg SDK استفاده کنی و چیزی که لازم داری رو بنویسی ، البته قبلش باید Header های Cی همراهشون رو به دلفی ترجمه کنی . معمولا نوشتن دیباگر در اغلب موارد راه سخت هست . راه ساده نوشتن Loader هست . Loader عمومیت دیباگر رو نداره و صرفا برای یک کار خیلی خاص طراحی میشه و بصورت یک Thread جداگانه در فضای آدرسی پروسه زندگی میکنه و در شرایط خاصی فعال میشه و کاری رو انجام میده .