مثلا ما یه خانه حافظه پیدا کردیم که مربوط به پول در یکی از بازی هاست.چطوری میتونیم یه برنامه ای بنویسیم که با استفاده از اون بشه یه عددی رو با تکست باکس دریافت و تو خانه حافظه تو رم قرار بدیم.یا همون ترینر بسازیم؟
مثلا ما یه خانه حافظه پیدا کردیم که مربوط به پول در یکی از بازی هاست.چطوری میتونیم یه برنامه ای بنویسیم که با استفاده از اون بشه یه عددی رو با تکست باکس دریافت و تو خانه حافظه تو رم قرار بدیم.یا همون ترینر بسازیم؟
برای کار با اشاره گرها توی VB6 ابزار لازم رو نداریم. ولی میتونیم این قضیه رو دور بزنیم!
مرحله اول) بدست آوردن اشاره گر یه متغیر: این مرحله سادست! از توابع زیر استفاده می کنیم:
Dim pointer As Long
pointer = VarPtr(a_variable) ' Get Address Of Standard Types
pointer = StrPtr(a_string) ' Get Address Of A String
pointer = VarPtrArray(an_array) ' Get Address Of An Array
pointer = ObjPtr(an_object) ' Get Address Of An Object
حالا pointer یه اشاره گره که میتونیم باهاش توی RAM قدم بزنیم!
مرحله دوم) بدست آوردن مقدار یه خونه حافظه: این مرحله یکم پیچیده تره ولی بازم سادست.
اول این تابع API رو وارد میکنیم:
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, source As Any, ByVal length as Long)
این تابع دو تا اشاره گر و یه طول از ما میگیره، از اشاره گر اول به مقدار طول مورد نظر (برحسب Byte) توی اشاره گر دوم کپی می کنه...
مثال: میخوام مقدار 1234 رو بریزیم به عنوان مقدار یک اشاره گر:
Dim i As Integer
Dim pI As Long
pI = VarPtr(i)
CopyMemory ByVal pI, 1234, 2
MsgBox i
میبینیم که مقدار i به 1234 عوض شده!!
مثال: میخوایم مقدار یه اشاره گر رو بدست بیاریم:
Dim i As Integer, j As Integer
i = 4321
Dim pI As Long, pJ As Long
pI = VarPtr(i)
pJ = VarPtr(j)
CopyMemory ByVal pJ, ByVal pI, 2
MsgBox j
میبینیم که مقدار j عوض شده!!
به طول انواع داده در VB6 و کاربرد ByValها توی فراخوانی CopyMemory دقت کنین.
با اینحال پبشنهاد میکنم برای اینکار از زبان های قوی تری مثل ++C یا حداقل #C استفاده کنین.
موفق باشید.
آخرین ویرایش به وسیله محمد فدوی : یک شنبه 22 دی 1392 در 16:49 عصر
اگر به بهداشت و سلامت حیوانات علاقه دارید، از vetMD.ir دیدن کنید.
وبلاگ شخصی من: fadavi.net
اینجا کمتر سر میزنم. (تلگرام من)
خیلی خیلی ازتون متشکرم.اما من فقط زبان VB رو بلدم.چون کلاً همه چی رو از اینترنت درباره VB یاد گرفتم زیاد از زبان های قدرتمند تر سر در نمیارم...
ولی با این حال بازم ممنون.
نمیدونم چرا بازم اینکارو نمیکنه.تموم آموزشتون رو خوندم و دقیقاً کد هاش رو کپی کردم ولی بازم کار نکرد.
مثلاً من میخوام عدد 10000000 رو تو آدرس 00B7CE54(آدرس پول تو بازی) بزارم.کد های پایین رو تو یه کمند باتون مینویسم و اجرا میکنم اما بازم کار نمیکنه.مقدار همون قبلیه است.نمیدونم شاید من منظورم رو اشتباه نوشتم.همون کاری رو که ما تو نرم افزار های Cheat Engine و Art Money انجام میدیم رو میخوام تو VB انجام بدم.یعنی با داشتن آدرس تو رم بتونم مقدارش رو عوض کنم.
Dim pI As Long
(pI = VarPtr(&HB7CE54
CopyMemory ByVal pI, 10000000, 2
باسلام
از مطالب مفيدي که گذاشتيد متشکرم.
من به تازيگي يک سايت در زمينه خريد بازي
وخريد بازي کامپيوتر زدم.من تمامي بازي هاي کامپيوتري اورجينال
را تهيه کردم وبه صورت
خريد اينترنتي بازي وخريد پستي بازي دارم ارائه ميکنم.
اگه در زمينه بالا بردن کيفيت وچهره سايتم مرو راهنمايي کنيد واقعا ممنون ميشم
راستي کسايي که ذکر کنند از بچه هاي انجمن هستند 20 درصد تخفيف دارند
خريد بازي
خريد پستي بازي
خريد اينترنتي بازيي
خرید بازی کاممپیوتر