آموزش ، افزونه ، رفتار و... کانستراکت

۲ مطلب با کلمه‌ی کلیدی «ضد هک» ثبت شده است

سیرا
سورس ضد هک تلگرام

سورس ضد هک تلگرام

با سلام

بعد از مدت ها فعالیت نداشتن ( به خاطر درس ها ! ) بالاخره تصمیم گرفتیم مطلبی منتشر کنیم.

این مطلب ، مربوط میشه به سورس "برنامه ضد هک تلگرام" . این برنامه تا حالا جایی منتشر نشده است و شما میتوانید به نام خودتان آن را در مارکت ها منتشر کنید.

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

البته در این قسمت که گفتیم

...شما باید تکمیلش کنید.

منظور این است که طبق سورس ، شما باید ادامه برنامه را بسازید.

ادامه مطلب...
۲۵ بهمن ۹۵ ، ۲۰:۵۶ ۱ نظر
سیرا
سیرا
چند نکته برای هک نشدن برنامه ها

چند نکته برای هک نشدن برنامه ها

در این مقاله می خواهم روش هک اطلاعات بازی که با آن می توان پول را افزایش داد شرح دهم و را های مقابله با آن:

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

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

روش دستکاری حافظه :

1- مستقیم: در این روش برنامه مدیریت حافظه مستقیما حافظه را دستکاری می کند.
2- واسطه ای : یک خروجی اجرایی گرفته و قسمت های دستکاری شده را جایگزین کدهای اصلی می کند مثل نسوز کننده ها

روش دوم را راحت می توان کنترول کرد و آن هم که یک آی دی منحصر بفرد به هر برنامه اجرایی داده شود و یک کد اجازه اجرایی با این کار از فعالیت خیلی ویروس ها  و برنامه های مخرب جلوگیری  می شود همچنین هر برنامه ای که نصب می شود.یک کد فعالیت داده می شود و دسترسی ها با آن کنترول می شود و برنامه هنگام اجرا شدن اگر بخواهد محتوای را جایگذین کند چون ای دی اش فرق دارد اجازه داده نمی شود.

خوب این روش باید سازنده  سیستم عامل انجام شود و تا حدودی در ویندوز 7 انجام شده است. ولی چون این به زیر ساخته های سیتم عامل وجو د دارد. هنوز بستر ان انجام نشده است.

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

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

حالا می خواهد بداند 100 سکه در کجا ذخیره شده است عدد 100 را در این قسمت حافظه جستجو می کند و یک تعداد حافظه با این مقدار پیدا میشود. هنگامی که مقدار سکه تغییر می کند دوباره جستجو را با مقدار جدید وارد می کند این کار را ادامه می دهد تا حدودا 1 یا کمتر از 5 خانه حافظه باقی می ماند .سپس  این حافظه را به لیست اضافه کرده و مقدار دلخواه را وارد می کند. بعدا برنامه خروجی اجرایی گرفته و باقی ماجرا ...

بجای اعداد اگر ما از اشیای گرافیکی استفاده کنیم دیگر به این راحتی هک نمی شود. مثل نوار خون در بازی مورتال کمبات، یا تعداد تقریبی تیر به شکل عکس.
ممکن است بگویید برخی از این بازی ها هم با این روش هک شده . دلیل اش خیلی آسان است  یکی از دو حالت زیر است
    1- رابطه منطقی بین عکس با مقدار داده وجود داد مثلا شما 7 گلوله دارید و برای هر گلوله یک شکل
    2- مقدار  که به شکل نسبت داده شده  قابل حدس است مثلا  برای خون عدد 100 است در ابتدای شروع عدد 100 را وارد می کند وقتی خونش تمام شد عدد 0


2-متغییر های افزایشی : برای خیلی از متغییر ها نمی توان شکل مناسب در نظر گرفت مثل پول. برای این روش ها هر متغیری را که می خواهیم نمایش دهیم  وخیلی هم مهم هست هک نشود. برای آن دو متغییر تعریف می کنیم اولی برای پنل دومی برای کار با بازی (مثلا افزایش پول) یک متغییر کمکی هم احتیاج داریم

پیاده سازی : ما به دو تابع احتیاج داریم 1- خواندن داده 2- نوشتن داده

در نوشتن داده متغییر اصلی را با متغییر کمکی و مقدار افزایشی (متغییر نسبت افزایشی) جمع کرده و در متغیر اصلی ذخیره می کنیم

کد:
var somevar =10
; var money = somevar

(function write(var_add
}
;money += var_add
{
;(5)write
برای خواندن هم کافی است که money  منهای  somevar کرد.
برای بالا بردن افزایش کارایی و امنیت کافی است متغییر کمکی چند مقداری باشد. یعنی در یک آرایه  چند مقدار با اعداد مختلف ذخیره کنیم یا در رویداد لود شدن لایوت متغییر کمکی به کمک اعداد تصادفی یک اعداد چند رقمی تولید کرد.



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

3- روش دامی : این روش اگر درست پیاده سازی شود اکثر هکرها بیخال  هک کردن برنامه می شوند . این روش قابلیت جدیدی به روش دوم می افزاید و برای پیاده سازی آن به روش دوم نیاز دارید. هکر ها می خواهند به مقدار پول شما دسترسی پیدا کنند. و شروع به جستجو می کنند در نهایت چند خانه پیدا می کنند . که دام هستند یعنی با تغییر مقدار برنامه خود بخود خارج می شود. چطور شد ؟!
 برای این کار شما متغییر پنل سکه ها و تعدادی متغییر که مقدارشان از سکه ها  منشعه شده است را می سازید. یک تابع برای دامی و متغییرهایی که دام هستند به عنوان پارامتر ارسال می کنید. متغییر مقدار تغییر کرده را با مقدار اصلی که در یک متغییر افزایشی ذخیره شده است مقایسه می کند ا گر بزرگتر بود حالت دامی فعال می شود یعنی از بازی خارج می شود.

4 -افزونگی حافظه : شما یک متغییر را به یک تابع ارسال می کنید و ازش مثلا 100 می سازید. حالا هکر هر چقدر جستجو می کند می بیند تعداد زیادی متغییر وجود دارد. و می توان تعدادش را با هر تغییر کم و زیاد کرد. اگر یکی از مقدار متغییر ها را تغییر دهد هیچ اثری ندارد و شما می توانید برای تنبیه اش یا از روش دامی استفاده کنید و یا مقدارش را برگردانید و یا متغییر را حذفش  کنید.

5-جابجایی ایستا حافظه (رهایی) : این روش روشی که کاربرد زیادی دارد. شما چند   متغییر هم خانواده می سازید(آرایه). مقدار پول را در یکی از آنها ریخته و بقیه را با اعداد منفی پر کنید. هنگام که می خواهید مقدار جدید پول را ذخیره  کنید دنبال متغیری می گرید که منفی نباشد آنرا را با  مقدار تغییر جمع کرده سپس در یک متغییر دیگر ذخیره کنید و متغییر قبلی را منفی کرده و متغییر جدید را به عنوان مقدار اصلی پول معرفی کنید.
 وقتی هکر می خواهد مقدار یک متغییر جستجو  می کند دیگر متغییر ها از لیست  حذف می شود و فقط متغییر هایی که مقدارشان  با عبارت یکجور هست می مانند. متغییر قبلی جز این دسته هست و درون هزاران خانه حافظه پیدا شده قرار می گیرد. مقدارش رابه متغییر دیگری می دهد که احتمالا در جستجو نباشد.  و مقدارش را صفر می کند. جستجو مجدد هکر متغییر قبلی از لیست حذف شده  و آزاد می شوند تا دوباره مقدار دهی شوند.




6-جابجایی پویا حافظه ای : این روش مثل قبلی است  با این تفات که ما از قبل متغییری نمی سازیم و در هنگامی که بازی اجرا می شود متغییرهای کمکی ساخته می شوند.
در این روش هنگام تغییر مقدار ،ابتدا یک متغییر ایجاد می کنیم سپس مقدار تغییرکرده که در متغییر قبلی است را در این متغییر ذخیره کرده و آنرا بعنوان متغییر مثلا پول اعلان می کنیم
قبلی را حذف کرده.

7- حذف در حالت بازی : در این روش اگر بازی از حالت فعال و کاری به حالت پس زمینه رفت (حالتی که شما یک برنامه کوچک نمایی می کنید یا از برنامه خارج می شوید بدون آنکه آنرا ببندید) متغییر های حیاتی را در جایی ذخیره کرده (لوکال استور). و همه آنرا صفر کرده سپس هنگامی که کاربر دوباره وارد صفحه بازی شد آنها را برگردانید.




8- کدگذاری متغییرها : در این روش متغییر ها بجای اعداد اصلی با نماد هایی جای گزین می شود مثلا d را بجای 1 جایگزین می کنیم  و حتی می توانید بجای یکی یکی دوتادوتا انجام دهید یعنی مثلا 14 جایگزین آن Q باشد. برای پیاده سازی آن به دو تایع  وی ک تابع کمکی نیاز دارید تابع خواندن بایستی بصورت مقدار را برگرداند نه در یک متغییر ذخیره کند.


9- ترکیب بند :  در این روش به یک متغییر کمیکی احتیاج داریم. هر اطلاعات در این دو متغییر به شکل مختلفی ذخیره می شود مثلا یکی عدد و دیگری رشته خاص. هنگام تغییر مقدار چک می شود که مقدار این دو متغییر با هم ارتباط معنایی دارند یعنی مقدار در داخل متغییر رشته ای وجود دارد. در غیر این صورت مقدار را صفر کن.
در متغییر رشتهای در شروع تعداد کارکتر  اضافی قرار مدهیم یا ما بین اعداد به یک صورتی که بتوانیم اعداد را از داخلش بیرون بکشیم ذخیره می کنیم( مثل یک درمیان کارکتر حرفی با عدد (پول) ترکیب می کنیم ).


10- تجزیه : مثلا مقدار پول 100 است با یک نسبت در چند متغییر ذخیره می کنیم .مثلا متغییرهای a,b,c,d همگی برای ذخیره پول کاربرد دارد. در ای 60 درصد مقدار در بی 20 در سی 15 درصد و در دی 5 درصد ذخیره شود. با جمع همه متغییرهایی که با یک  نسبت خاص مقدار پول را ذخیره می کنند مقدار اصلی بدست می آید
مثال شما در بازی 1000 تومان پول در بازی دارید. 600 تومان در ای، 200 تومان در بی ، 150 تومان در سی و 50 تومان در دی ذخیره می شود و هیچ جا شما عدد 1000 را نمی بینید. 


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

تا جای که من می دانم کد ها هم در حافظه ذخیره می شود دیگر نمی دانم که مثلا متغییر money چطوری هست آیا با این  نام متغییر در حافظه ذخیره می شود (از کد دودویی بگذریم)یا رمزنگاری می شود؟ در این روش  نام متغییر ها را در بین کد ها جستجو کرده و جایی که مقدار ذخیره شده و متغییر به آن اشاره دارد را یافته و تغییر می دهند.

برای این روش را هکارهایی وجود دارد متغییر ها را اینجوری نام گذاری کنید. نام معنی دار  در داخل پسوند و پیشوند بی معنی قرار دهید. مثلا برای پول w23a_money_xx32
روش 7 با کمی تغییر می تواند مفید باشد. روش 8  اگر از چند تابع مجزا برای کد گذاری استفاده کنید تا حدودی مفید واقع می باشد.

مقابله با انجماد: معمولا از روش رخنه کدها برای منجمد کردن متغییر (freeze) استفاده می شود. در این حالت متغییر همیشه یک مقدار دارد که مثل یک متغییر ثابت  عمل می کند. برای کشف کردن در شروع بازی هنگامی مپ بارگزاری می شود از رویداد شروع بارگزاریی چک کنید متغییرهای کلیدتان فریز هست یا نه. و در فروشگاه ها هر لحظه چک کرد .
برای این کار  یک عدد ثابت به  مقدار متغییر  زیاد می کنید سپس بعد از یک مکث یک فریم چک می کنید مقدار قبلی با مقدار فعلی یکسان است و دوباره این بار عدد ثابت را از مقدار متغییر کم می کنید  باز هم چک می کنید. در صورت مساوی بودن کار درست است و فریز نیست در غیر این صورت فریز شده  و شما از برنامه خارج می شوید. در هر بار گه نا مساوی بود به یک متغییر محلی که تعداد خطا را می شمارد می افزایید. اگر بزرگتر مساوی 2 بود یعنی خطا دارد.

  
مقابله با بیکران: اگر مثل من در برخی بازی مثل بازی قلعه ها یا همان بازی استراژیک جنگ صلیبی را بازی کردید. نسوز کنندهایی وجود داشت که پول تان را یکدفعه 99999999 اینقدر می کرد و بقیه چیزهای دیگر. برای کشف این حالت ها باید اعتبار سنجی مقدار را تعریف کنیم با رویداد تغییر مقدار یک متغییر. هرگاه متغییر مقدارش تغییر کرد تابع اعتبار سنج فعال شود.
در تابع اعتبار سنج دو نکته مهم است. چه موقع می تواند مقدار تغییر کند مثلا در یک بازی یک متغیر حیاتی دارید که یک دفع مقدارش تغییر می کند. و میزان تغییر حداکثر چقدر است. مثال در بازی پسر دونده که پلیس دنبالش می افتد اسم بازی یادم نیست .  مثلا حداکثر پول 100 سکه بود. اگر مقدار تغییر کرده بیش از 100 باشد .مقدار قبلی را جایگذین فعلی کن. برای این کار به دو آرایه نیاز داریم که یکی  مقدار متغییرهای حیاتی را در این آرایه میریزیم .و دومی اگر آرایه ثابت داشتیم که مقدارش تغییر نکند  حداکثر مقدار مجاز را در این آرایه ذخیره می کنیم. هنگام تغییر عنصر را یافته و مقایسه می کنیم و در صورت اعتبار مقدار جدید را در آرایه جایگذین می کنیم.

منبع

۳۱ خرداد ۹۵ ، ۱۰:۵۹ ۰ نظر
سیرا