PDA

View Full Version : آموزش: نحوه ی استفاده از چند تابع api رو نیاز دارم



darknes666
جمعه 30 فروردین 1392, 00:10 صبح
سلام خدمت دوستان گرامی.میخوام از چند تا تابع api رو استفاده کنم.یک مقاله یengilish هم راجبش خوندم اما بعضی هاشو متوجه نشدم اگر ممکنه کمکم کنید از این توابع چجوری استفاده کنم.
درواقع هدف من هک بازی های pc هست مثل نامحدود کردن امتیاز و ....
من تقریبا دنبالش رفتم و میدونم باید یکی از خونه های memoryرو که این مقدار رو تو خودش نگه میداره عوض کنم.اما اولین مشکلم اینه که اون خونه که این مقدار رو توش نگه میداره چجوری پیدا کنم.مثلا اگر تو 0x0F6495E0 باشه چجوری بفهمم که تو این محله؟
توابعی هم که بلد نیستم ازشون استفاده کنم اپلود کردم تو یک notepad اینم لینکش اگر روش استفاده ی هرکدومو میدونین لطفا کمک کنین.
لینک دانلود:
http://www.mediafire.com/?5csovhvq1gj4fa1

UfnCod3r
جمعه 30 فروردین 1392, 09:44 صبح
به دوستم می گم می خوام گوشی بخرم می گه خوبه اگه لمسی می خوای بخری تاچ بگیر . :قهقهه: (صرفا جهت اطلاع)
نمیدونم چرا جدیدا خیلی ها به همه چی می گن API .
حتی تو کتابا هم گاهی دیدم می گن اموزش توابع API .:متعجب:
بهتره اول بدونید API یعنی چی .
http://www.gooyait.com/1389/06/05/what-is-an-api-and-what-are-they-good-for.html
االان شما وقتی با توابع ویندوز سر کار داری باید بگی Winow API نه API خالی .
حالا بگزیرم .

برای این کار شما اول باید ادرس شروع برنامه رو پیدا کنید .
بعد اون مقداری که می خوهید رو بگردین و پیدا کنید و ادرس نصبیش رو بدست بیارین . فکر کنم خواندن اطلاعات از هر جای حافظه مجاز باشه ولی نوشتن نه برای نوشتن داده ها تو قسمتی از حافظه باید از WriteProcessMemory استفاده کنی.
برای گشتن متغیر به احتمال زیاد یه تکنیک هایی باید استفاده بشه :متفکر:
تا اینجا اینا فقط برا استک بود . اگه بخوای heap رو هم بگردی خیلی سخت میشه .:متفکر:

darknes666
جمعه 30 فروردین 1392, 12:20 عصر
دوست عزیز سن من خیلی کم تر از اون چیزی هست که فک میکنی من همش 17 سالمه و از 15 سالگی c رو یاد گرفتم و تقریبا تو 16 سالگی با vC++‎ اشنا شدم الانم تو این سن اسمبلی رو یاد گرفتم بنابر این ترس من از سختی نیست چرا که من تو 15 سالگی پروژه هایی مثل ضرب و تقسیم اعداد بزرگ و پروژه ی nوزیر رو انجامد دادم بنابر این از نظر الگوریتم هیچ مشکلی ندارم .الانم رو اوردم به برنامه های کاربردی همین امروز به یک نتایجی رسیدم میدونم از چه توابعی استفاده منم.لینکشم دادم.در ضمن برای نوشتن تو اون ادرس حرف شما کاملا درسته و من حتی میدونم برای اینکه از چه ادرسی شروع به نوشتن کنم باید از تابع findwindow استفاده کنم این مرحله رو با موفقیت رد کردم.بعدش باید با تابع asynckeystate مشخص کنم اگر مثلا دکمه ی F1زده شد یک سری عملیات رو انجام بده.ولی از این جا به بعد مشکل دارم.من مثلا میدونم تعداد گلوله ها تو خونه ی 0x000earهست حالا میخوام به تعداد گلوله ها 500تا اضافه شه چیکار کنم؟درپیدا کردن محل متغیر هم مشکل دارم.اگر یکی عملا کمکم کنه خیلی ممنون میشم.راستی من با اسمبلی تونسم بازی هایی مثل minecraft و pinball رو هک کنم اما با اسمبلی خیلی سخته چون حتی اگر یک دستور رو اشتباه بنویسم بازی خودش خودشو میبنده بنابراین الان اومدم سراغ قویترین تکنیک دنیا یعنی استفاده از اسمبلی و زبان C++‎ در کنر هم دیگه.همچنان نیازمن کمک هستم.از راهنمایی شما هم تشکر میکنم__UFNHGGI_H__

darknes666
جمعه 30 فروردین 1392, 13:47 عصر
اساتید محترم.می خوام تاپیک سریع تر به جواب برسه برای همین:اگر کسی میتونه بازی angry birds star wars رو دانلود کنه.مخوام امتیاز رو هک کنم.یعنی مثلا اگر امتیاز 1500 اگر شخص برنامه رو کامپایل کنه امتیاز بشه 1600.
امروز این برنامه رو خودم نوشتم این برنامه تمام خونه هایی که من حدس زدم توش متغیر باشه رو میگرده.بازی رو اجرا کردم امتیارم 1880 بود این امتباز رو سرچ کردم متوجه شدم این متغیر تو خونه ی 1302 هست.دوباره برنامه رو اجرا کردم این دفه یک عدد شانسی وارد کردم و دوباره برنامه رو اجرا کردم و دوباره امتیازمو وارد کردم و متوجه شدم دیگه 1302 جواب نیست و تغییر محل متغیر تغییر میکنه.اما چرا؟کسی اگر میدونه لطفا کمکم کنه.
#include<conio.h>
#include<iostream.h>
main()
{
clrscr();
int i=1,q,g[100],h=0,n;
cout<<"which number should i find?"<<endl;
cin>>n;
for(i;i<=9999;i++)
{
asm{
mov bx,0
add bx,i
mov ax,[bx]
mov q,ax
}
if(q==n)
{
g[h]=i;
h=h+1;
}
if(h==99)
{
i=10000;
}
}
i=0;
cout<<endl;
for(i;i<=h;i++)
{
cout<<"your number maybe in:["<<g[i]<<"]"<<endl;
}
getch();
}

UfnCod3r
جمعه 30 فروردین 1392, 14:17 عصر
سنت خوبه افلین . :تشویق: :لبخند:
-
اسمبلی لازم نیست . هم سخته هم کدت خواناییش از بین میره و .. با همین سی و سی++ هم میشه مثلا برای مقدار دادن به خونه ای از حافظه این کارو میشه کرد .

int* score = (int*)(0xF234234);
*score = *score + 10000;

برای یافتن هم همین طور نیست که شما مثلا عدد 100 رو بگردی پیدا کنی .
هزار تا عدع 100 تو حافظه هست .
درضمن بسته به نوعی که برای اون قسمت از حافظه در نظر میگیرید همه چی فرق می کنه .
باید یه جوری تشخیص بدی که اون قسمت از حافظه چی هست .

darknes666
جمعه 30 فروردین 1392, 14:17 عصر
تو تاپیک بپرس دوست عزیز

darknes666
جمعه 30 فروردین 1392, 14:19 عصر
دوست عزیز اسرار دارم از اسمبلی استفاده کنم چون خیلی قوی تره از سی و از سی فقط برای کنترل استفاده میکنم

darknes666
جمعه 30 فروردین 1392, 21:18 عصر
دوستان خودم یک جواب رو پیدا کردم و این رو هم میگم که اگر یک بنده ی خدایی خواست یک بازی هک کنه اینقدر بیچارگی نکشه.
راه حل این مسله اینه که شما در اولین گام بتونین خانه های حافظه ی رم رو بخونین.نمیدونم این کدی که بالا تر نوشتم مقدار حقیقی رو میده یا نه اما اینم میدونم که با اسمبلی خیلی راحت تر میشه این کار رو کرد.
و اما ره حل جدید اینه که شما firewall ویندوز رو از کار بندازین.چراکه وقتی تلاش کنین مقدار یک خونه رو بخونین خطا میده.راه حل استفاده از درایو نویسی هست که بهش میگن برنامه نویسی تو حالت کرنال.یعنی کلا بحث عوض میشه منم وقتش رو امسال ندارم برم دنبال کرنال و درایو نویسی.بعد درایو نوشتن سیستم open source میشه و شما راحت میتونین با حافظه هر کاری کنین.درضمن کرنال مد فقط با زبان c/c++ امکان پذیره.

#target
شنبه 31 فروردین 1392, 14:43 عصر
سلام

اول آدرس حافظه که با اسمبلی میخونی آدرس حافظه پروسه خودته . برا پروسه دیگه باید توابع سیستم عامل استفاده کنی .
برای پیدا کردن آدرس حافظه چندین روش هست . ی روش ساده اینه بازی رو اجرا کنی و مثلا ببینی تعداد تیرات هست 85 اونوقت بیای بخشایی که حافظه تخصیص داده شده با ReadProcessMemory بخونی تمامی مقادیری که 85 هست رو آدرسا شو در بیاری بعد بازی رو ادامه بدی تیراتو کنی مثلا 40 بعد بیای اون آدرسایی که گیر آرودی ببینی کدومش 40 شده الان . اونوقت احتمالا بشه فهمید که کجای حافظه .
بعد با WriteProcessMemoryتو همون مقدار عدد مورد نظر رو مینویسی . اگه اجازه رایت نمیده باید با VirtualProtectEx اجازه نوشتن رو بدی
نیازی به کرنل نداره اصلا !!! اسمبلی هم چون سیستم عامل سیستم حافظه مجازی داره به اون معنی نیست که دسترسی حقیقی به رم داری همون حافظه مجازی خودته که با سی هم داری

darknes666
شنبه 31 فروردین 1392, 15:04 عصر
از راهنمایی که کردین ممنونم اما یعنی چی حافظه ی حقیقی نیست؟(من نمیدونم منظورتون چیه)
این روشی که گفتین باهاش اشنایی دارم ولی یک مشکل هست اگر براتون مقدور هست بازی angry birds starwars رو دانلود کنین و سعی کنین امتیاز رو عوض کنین.اگر هم که مقدور نیست لطفا منو تو همین تاپیک راهنمایی کنین به شدت فکرم رو مشغول کرده و من قصد دارم درایو نویسی رو هم یاد بگیرم.
1سوال دیگه برام پیش اومد.وقتی درایو نوشتم و به رم دسترسی پیدا کردم مثلا چه کار هایی باهاش میتونم بکنم؟

#target
شنبه 31 فروردین 1392, 15:30 عصر
برنامه Cheat Engine (http://www.cheatengine.org/) چنین کاری رو انجام میده . در بخش دانلود سورسشم هم هست
با این برنامه بررسی کنین انگری برد رو و کم کم برنامه خودتون رو ارتقا بدین

darknes666
شنبه 31 فروردین 1392, 15:32 عصر
دوست عزیز خودم از این استفاده کردم نمیشه

darknes666
شنبه 31 فروردین 1392, 15:33 عصر
وقتی یکی بازی میسازه یک سری کد های حفاظتی براش میزاره وقتی میخوایم مقدار رو عوض کنیم دوباره مقدار به حالت اولش بر میگرده

darknes666
یک شنبه 01 اردیبهشت 1392, 19:38 عصر
دوستان یعنی کسی بلد نیست این سوال منو جواب بده؟

prans68
یک شنبه 19 خرداد 1392, 17:15 عصر
با سلام دادش خودتو زیاد خسته نکن یک دور ساختمان داده بخونی این کارهارو راحتر میتونی انجام بدی

darknes666
یک شنبه 19 خرداد 1392, 19:31 عصر
سلام خدمت دوستان.
دوست عزیز اولا تاریخ تاپیک رو یه نگاه بنداز.
درضمن من خیلی وقت مشکلمو حل کرم و راه حل این سوال رو گفتم.


راه حل اینه که بازی ها متغیر های استاتیک دارن و اونا رو وقتی میتونی پیدا کنی که اول بتونی ویندوز رو از حالت protect mode در بیاری.و تقریبا کمی از توابع api که لینک کردم سر در بیاری.
دیگه ساختمان داده نمیخواد.