وقتی پسورد keystore اپلیکیشن رو فراموش کردیم !

استاندارد

یکی از بدترین اتفاقاتی که میتونه برای یک توسعه‌دهنده اندروید بیوفته ، فراموش کردن اطلاعات مربوط به sign اپلیکیشنه .
چرا ؟‌ چون بدون داشتن این اطلاعات باید فکر بروزرسانی کردن اپلیکیشنتون روی مارکت‌ها رو از سرتون بیرون کنید . منظور از بروزرسانی ، امکان نصب نسخه جدید به روی نسخه قدیمی بدون بوجود اومدن خطا در حین این کاره . یعنی کاربرتون به‌راحتی بدون نیاز به پاک کردن نسخه قدیمی نسخه جدید اپلیکیشنتون رو نصب کنه .
حالا چه اتفاقی میوفته اگه نسخه جدید اپلیکیشنمون رو با اطلاعاتی متفاوت از چیزی که نسخه‌‌های قبلی رو با اون sign کردیم sign کنیم ؟‌ تو این حالت اگه کاربرمون بخواد نسخه جدید رو نصب کنه به error زیر بر میخوره ( یا یه همچین چیزی ) .
photo_2016-06-21_11-07-06
در این حالت تنها کاری که کاربر میتونه برای نصب نسخه جدید انجام بده ، حذف نسخه قدیمی و بعد از اون نصب نسخه جدیده (که با این کار کاربرتون اطلاعات درون اپلیکشن رو از دست میده ).
خب حالا اگه این اتفاق بیوفته چیکار میتونیم بکنیم ؟
اول از همه اگه فایل keyStore تون رو گم کردین متاسفانه راهی براتون نمیمونه جز اینکه بیخیال بروزرسانی کردن نسخه قدیمی اپلیکیشنتون بدون حذف کردنش بشید .
ولی اگه فایل keyStore تون رو گم نکردید و فقط پسورد اون رو به خاطر نمیارید ، هنوز جای امیدواری هست .    
این اتفاق ناخوشایند چند روز پیش برای من افتاد و من هرچی سعی کردم نتونستم پسورد فایل keyStore م رو به یاد بیارم .
ولی خب خوشبختانه بعد کلی تلاش تونستم پسورد مورد نظر رو پیدا کنم و یه نفس راحت بکشم . در ادامه روندی که برای پیدا کردن پسورد طی کردم رو براتون مینویسم .

کاری که اول من انجام دادم ، سعی کردن برای به یاد اوردن پسورد بود ، که این کار رو با تست کردن چند باره و چند باره پسوردهایی که به ذهنم میومد انجام میدادم . من این کار رو بجای انجام روند sign کردن اپلیکیشن به‌وسیله AndroidStudio و به‌واسطه اون چک شدن پسوردی که بهش میدادم ، با استفاده از keytool در داخل ترمینال انجام دادم . اینطوری بجای انجام کلی کار نامرتبط ، مستقیما پسورد رو با فایل keyStore برسی میکردم .برای استفاده از keytool کافیه ترمینال رو باز کنید و دایرکتوری رو به فولدری که فایل keyStore تون در اون قرار داره تغییر بدید و بعد با استفاده از دستور زیر پسوردتون رو چک کنید.

دستور بالا در صورت درست بودن پسورد ، اطلاعات کامل فایل keystore رو به شما خواهد داد و اگر پسورد وارد شده غلط باشه به شما Exception ای میده مبنی بر غلط بودن پسورد .
خب من تو این مرحله چندتا پسورد رو چک کردم و به نتیجه‌ای نرسیدم . و از اونجایی که دیدم انجام این کار داره تکراری ( و به همین دلیل رو مخ ) میشه ، تصمیم گرفتم کار دیگه‌ای بکنم .

از اینجا به بعد روند گشتن دنبال پسورد واسه من از یه کار تکراری و خسته‌کننده ، تبدیل شد به یه کار جذاب . چطور ؟ چون تصمیم گرفتم با نوشتن یه اسکریپت کوچولو و استفاده از یه پروژه آماده به خودم Dictionary Attack بدم و پسوردم رو crack کنم ( هیچ وقت فکر نمیکردم یروز بخوام به خودم attack بدم :دی ) .
از اینجا به بعد رو با دقت‌ بیشتر دنبال کنید، چون احتمالش هست این روش بتونه  تو پیاده کردن پسوردتون کمکتون کنه .

خب در ابتدا نیاز بود لیستی از پسوردهای احتمالی (یا همون دیکشنری‌) رو آماده کنم . من برای این کار از crunch استفاده کردم . crunch برنامه‌ای تحت ترمیناله که بوسیله اون میتونید ترکیب‌های مختلفی از کلمات رو بسازید و اون رو توی یک لیست ذخیره کنید . بذارید با یه مثال بیشتر توضیح بدم .
اول از همه میریم سراغ نصب crunch . اگه توی mac هستید و از قبل Homebrew رو نصب دارید فقط کافیه دستور زیر رو داخل ترمینالتون اجرا کنید. در غیر این صورت اول باید Homebrew رو نصب کرده و بعد دستور زیر رو اجرا کنید (نحوه نصب Homebrew رو میتونید توی این پست بخونید ) .

و اگه در ubuntu یا سیستم‌های برپایه debian هستید میتوید از دستور زیر برای نصب crunch استفاده کنید .

خب بعد از نصب میرسیم به نحوه استفاده از crunch و ساخت لیست مورد نظرمون . برای این کار دستور زیر رو اجرا کنید .

در دستور بالا st%ck^%xch%ng% نشان دهنده نوع ترکیب کلماتی هست که میخوایم بسازیم .
در کلمه‌ای که به‌عنوان ورودی به crunch میدهیم ، کارکترهای زیر با حالت‌هایی که برایشون ذکر میشه تغییر میکنند و لیستی از حالت‌های مختلف رو میسازند که در فایلی به اسم wordlist.txt که در دستور بالا به crunch دادیم ذخیره میشند .
کارکتر @ با حروف کوچک انگلیسی جایگزین خواهد شد.
کارکتر , با حروف بزرگ انگلیسی جایگزین خواهد شد.
کارکتر % با اعداد انگلیسی جایگزین خواهد شد.
کارکتر ^ با سمبل‌ها ( مثل !،@،#،$، …‌ )  جایگزین خواهد شد.
عددهایی که در دستور بالا میبینید حداقل و حداکثر طول کلمات ساخته شده توسط crunch رو مشخص میکند .
و در اخر لیستی خواهیم داشت از ترکیبات مختلف شبیه لیست زیر .

حالا که لیستی از ترکیباتی که احتمال میدیم پسوردمون باشه رو ساختیم ، میریم سراغ چک کردن این لیست .

من برای این کار اسکریپتی نوشتم که به‌وسیله اون میتونیم این لیست رو چک کنیم .

اسکریپت بالا یک فایل رو به‌عنوان ورودی میگیره که اون فایل همون لیست پسوردهایی هست که در مرحله قبل ساختیم . بعد از اون به‌وسیله یک حلقه هر خط از این فایل رو میخونیم و اون خط رو به‌عنوان پسورد فایل keyStore به keytool میفرستیم و در همون خط از اسکریپت چک میکنیم اگر دستور مربوط به keytool با موفقیت اجرا شده بود ( پسورد درست بود ) ، پسورد چک شده رو به رنگ سبز چاپ میکنیم و از حلقه خارج میشیم .
برای استفاده از این اسکریپت اول باید اون رو داخل یک فایل ( مثلا فایلی به اسم PassChecker.txt ) ذخیره کنید ، سپس این فایل رو به فولدری که لیست پسوردتون و فایل keyStore تون قرار داره منتقل کنید . بعد دایرکتوری رو به همون فولدر تغییر بدین . و در آخر دستور زیر رو اجرا کنید .

این اسکریپت روی سیستم من برای چک کردن هر ۱۰۰ تا پسورد تقریبا ۲۰ ثانیه زمان لازم داشت ، که عدد کوچیکی نیست . به همین دلیل درست انتخاب کردن لیست پسوردها تو مرحله اول خیلی خیلی مهم خواهد بود .

در آخر من با انجام دو مرحله‌ی بالا و منتظر موندن به مدت چند ساعت ، تونستم پسوردم رو پیدا کنم.

خب در آخر چندتا نکته که باید بگم :

نکته اول : همیشه اطلاعات sign اپلیکیشنتون رو یه جای امن ذخیره کنید ، مثلا تو dropbox ، google drive ، git یا هرجایی که فک میکنید که این اطلاعات از بین نمیره .
نکته دوم : اگه باز هم نتونستید پسوردتون رو پیدا کنید ، میتونید باز هم این روش رو با لیست پسوردهای مختلف انجام بدین . ولی در نهایت درصورت به نتیجه نرسیدن باز هم متاسفانه باید قید بروزرسانی کردن نسخه قدیمی اپلیکیشنتون بدون حذف کردنش رو بزنید .
نکته سوم : اگر دوستداشتید میتونید با دستور زیر پسورد فایل keyStore تون رو عوض کنید ، گرچه باید این هشدار رو بدم که درصورت تغییر پسورد دیگه باید کلا بیخیال بروزرسانی بدون نیاز به حذف بشید ، پس قطعا اگر این کار رو انجام ندید خیلی بهتره .

و نکته آخر : ترمینال خیلیی خوبه ، باهاش دوست باشیم 🙂

7 دیدگاه در “وقتی پسورد keystore اپلیکیشن رو فراموش کردیم !

  1. سلام
    من نمی دونم یهو چطور شد تمام تنظیمات برنامه ها حذف شد قبل ازاون کلا همه فایل های درایوی که توش کیاستور ذخیره بود رو هم پاک کردم حالا من می مونم و برنامه و مایکت
    اصلا راهی نداره؟

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *