نوید شیرمحمدی
نوید شیرمحمدی
خواندن ۴ دقیقه·۲ سال پیش

هکاتون 1402: چالش CrackMe

معرفی هکاتون

فروردین امسال (1402) کوئرا یک مسابقه مسابقه فتح پرچم (یا همون CTF) برگزار کرد با نام هکاتون. ثبت‌نام مسابقه تا 23ام اسفندماه 1401 ادامه داشت و شما میتونستید پس از پرداخت هزینه نسبتا سنگین (480)، برای مسابقه و 18 ساعت آموزش (نه چندان با کیفیت) اقدام کنید. در بخش معرفی رویداد این مطالب نوشته شده بود:

رویداد هکاتون امنیت، چهارمین هکاتون برنامه‌نویسی کوئرا است که با موضوع امنیت و در چارچوب طرح شهید بابایی بنیاد ملی نخبگان برگزار می‌شود.
این رویداد شامل یک بخش آموزشی و یک بخش رقابتی است. در ابتدا، موضوعات جذاب و کاربردی حوزه امنیت در ۳ روز و با همراهی اساتید برتر این حوزه برگزار می‌شود و شما مجموعا ۱۸ ساعت آموزش می‌بینید. بعد از آموزش به تیم‌های ۲ الی ۴ نفره تقسیم می‌شوید و در یک مسابقه چالشی به رقابت می‌پردازید. بعد از مسابقه راه‌حل تیم‌ها داوری می‌شود و نفرات برتر مشمول دریافت امتیاز نخبگی بنیاد و همینطور برنده جایزه نقدی مسابقه می‌شوند. علاوه بر این نفرات برتر برای استخدام به شرکت‌های مطرح معرفی خواهند شد. برای مشاهده مراحل و زمان‌بندی رویداد روی این لینک کلیک کنید.
? به تمام شرکت‌کنندگان، گواهی شرکت در رویداد اهدا خواهد شد اما فقط نفرات برتر مسابقه و بعد از داوری راه‌حل‌ها، مشمول دریافت امتیاز نخبگی بنیاد می‌شوند.
⚠️ شرکت در رویداد به صورت فردی است اما پیش از مسابقه، شرکت‌کنندگان به تیم‌های ۲ الی ۴ نفره تقسیم می‌شوند تا به صورت تیمی به رقابت بپردازند. اگر از ابتدا تیم شما مشخص است و دوست دارید با تیم خود در این رویداد شرکت کنید لطفا به صورت جدا جدا ثبت‌نام خود را تکمیل کنید و بعد از ثبت‌نام به ما اطلاع دهید که می‌خواهید در یک تیم باشید.

برای برگزاری رویداد از پلتفرم CTFd استفاده شده بود و تیم کوئرا چند روز قبل از مسابقه، با هدف آشنایی بچه‌ها با پلتفرم یک کوییز آزمایشی (و بدون تاثیر در نتایج مسابقه) قرار داد. سوالات این کوییز از رویداد‌هایی مثل picoctf و uutctf انتخاب شده بودند و به عنوان دست گرمی کمک بزرگی محسوب میشد. در پرانتز این هم بگم که سوالات مسابقه با اختلاف....باااا اختلااااف، سخت‌تر و جذاب‌تر بودند.


و اما چالش CrackMe

امتیاز: 100

متن سوال:

Can you login?
The falg is queraCTF{username_password}. Find the username and password.

فایل: لینک

در این سوال یک فایل apk به ما داده شده که اگر روی شبیه‌ساز (مثل AVD یا Genymotion) نصبش کنیم میبینیم که یک برنامه ساده است که در صفحه اولش نوشته Login و یک دکمه Login داره. همینطور دو تا فیلد برای وارد کردن username و password داریم. اگر کلمه عبور و نام کاربری درست نباشند، یک toast به ما نمایش داده میشه که میگه Username or Password is incorrect. ما باید نام کاربری و کلمه عبور درست را از apk استخراج کنیم.

برای بررسی فایل‌های apk معمولا از ابزار Jadx استفاده میشه. این ابزار فایل apk را به عنوان ورودی دریافت میکنه و سعی میکنه کد‌های کامپایل‌شده موجود در این فایل را به جاوا برگردونه (دیکامپایل کنه). دقت کنید که میگم سعی میکنه. در مواردی ممکنه Jadx نتونه کد را دیکامپایل کنه که در این صورت کد با فرمت smali در بدنه‌ی کد دیکامپایل شده دیده میشه و فایلی با نام com/<apk name>/BadLogic تولید میشه.

نکته دیگه‌ای که فکر میکنم دونستنش لازمه اینه که با Jadx نمیشه فایل را apk را اصلاح کرد و فقط برای خوندن کد استفاده میشه. اگر قصد تغییر در فایل apk را دارید باید با apktool اون را دیکامپایل کنید (که در نتیجه‌اش تعدادی فایل smali دریافت می‌کنید) و بعد با یک ادیتور بخش‌هایی را که نیازه عوض کنید. بعد هم با apktool دوباره برنامه را کامپایل کنید و با ابزار Sign امضا کنید. اگر دوست دارید این موارد را یاد بگیرید این آموزش را پیشنهاد میکنم (میتونید از کانال تلگرامی t.me/zer0daylab دریافت کنید).

راه حل

برای حل سوال کافیه که فایل apk را با Jadx دیکامپایل کنیم (فقط کافیه فایل را بندازید داخل UI یا دکمه Open را بزنید). بعد از دیکامپایل شدن برنامه، وارد مسیر com/example.logmein میشیم و فایل‌ Login را بررسی میکنیم. در فایل Login میشه منطق بررسی نام کاربری و کلمه عبور را دید:

طبق چیزی که میبینیم، برای نمایش پیام Username and Password is correct، دو تا اتفاق میوفته:

1- نام کاربری اول با base64 کدگذاری میشه و بعد با مقدار R3JleWhhdEluWW91ckFyZWE= مقایسه میشه. اگر با CyberChef بررسی کنیم میبینیم که این رشته معادل GreyhatInYourArea است.

2- مقدار پسورد با الگوریتم md5 هش میشه و با مقدار d23b3bc1dc24919d2439219ad6072d33 مقایسه میشه. برای شکستن این هش از سایت dCode استفاده کردم و نتیجه شد monkeyfish.

جواب: queraCTF{GreyhatInYourArea_monkeyfish}

queractfهکاتون
شاید از این پست‌ها خوشتان بیاید