جلوگیری از نفوظ با اپلیکیشن LuckyPatcher در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش جلوگیری از نفوظ با اپلیکیشن LuckyPatcher در اندروید می پردازیم فکر می کنم دیگر کسی نباشد که این اپلیکیشن محبوب را نشناسد اپلیکیشنی که به راحتی بیشتر اپ های ایرانی را کرک می کند البته در اینجا منظور مهندسی معکوس اپلیکیشن نیست بلکه کرک محتوایی است به طور مثال سکه برنامه های ایرانی و خارجی را می توانید به سادگی کرک کنید (برای تمای اپ ها جواب نمی دهد ولی برای بیشتر اپ های ایرانی کار می کند.) در ادامه با ما همراه باشید.
در اینجا ما دو راه برای بررسی داریم تا از ورود luckypatcher جلوگیری کنیم
- بررسی CERTIFICATE اولیه پکیج خودمان
- بررسی نام پکیج Lucky Patcher
باید یک void به نام checkSignature ایجاد کنید تا این بخش را بررسی کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public void checkSignature(final Context context) { try { Signature[] signatures = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; if (signatures[0].toCharsString() != <CERTIFICATE>) { android.os.Process.killProcess(android.os.Process.myPid()); } } catch (NameNotFoundException ex) { android.os.Process.killProcess(android.os.Process.myPid()); } } |
همه چیز کد بالا درست است به جز یک بخشش که باید خودتان آن را به دست بیارید آن هم CERTIFICATE است برای اینکه CERTIFICATE را به دست بیارید از کد زیر استفاده کنید.
باید CERTIFICATE از خود برنامه در اولین بار دریافت کنید بعدش آن را کپی کنید و در بخش بالا به جای <CERTIFICATE> قرار دهید.
برای اینکه آن را به دست بیارید.
1 2 3 | Signature[] signatures =context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; signatures[0].toCharsString(); YourTextView.setText(signatures[0].toCharsString()); |
حالا با void اولی بررسی می شود که آیا در اپ شما یا همان CERTIFICATE شما تغییری ایجاد شده است یا خیر در صورتی که تغییر کرده باشد برنامه شما بسته می شود !
void دوم بررسی نام پکیج
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | private boolean checkLuckyPatcher() { if (packageExists("com.dimonvideo.luckypatcher")) { return true; } if (packageExists("com.chelpus.lackypatch")) { return true; } if (packageExists("com.android.vending.billing.InAppBillingService.LACK")) { return true; } return false; } private boolean packageExists(final String packageName) { try { ApplicationInfo info = this.getPackageManager().getApplicationInfo(packageName, 0); if (info == null) { return false; } return true; } catch (Exception ex) { } return false; } |
این آموزش هم به پایان رسید.
موفق و موید باشید.
جناب جعفری پور سلام
اول اینکه ممنون بابت این آموزش
دوم آیا فقط viod اول کفایت میکنه یا باید جفت viod ها استفاده بشن؟
سوم آیا این viod دوم هم لازم هست و اگر کاربر روی گوشیش اینو داشته باشه true برمیگردونه و اجازه کار با برنامه ما رو بهش نمیده؟
و اینکه راه های دیگه ای هم هست برای اینکه بتونیم دسترسی هکرها و کرکرها رو محدود کنیم؟
سلام
void اول کافی است ولی کار از محکم کاری عیب نمی کنه البته تنها این دو راهی گفته شد برای جلوگیری از هکر های تازه وارد جواب میدهد در صورتی که برنامه lucky patcher نصب شده باشد void دوم true بر می گرداند باید بزارید از برنامه بیادش بیرون در بین همان if ها
راه های خیلی زیادی برای محدود کردن دسترسی هکر هست ولی یکسری از آنها در خارج به فروش می رسد به طور مثال الگورتیم داوینچی نحوه کار این الگوریتم این است شما میای یه باگ خیلی فاحش در اپ خودتان می زارید و آن پوششی برای بخش دیگه اپ شما می شود . یا الگورتیم aes encryption که تلگرام هم از همین الگوریتم برای جلوگیری از مهندسی معکوس استفاده کرده است البته این الگوریتم در اینترنت به صورت رایگان پخش شده است ولی نسخه رایگان آن بسیار کثیف کد نویسی شده است و باعث بالا رفتن حجم اپتون می شود..
موفق باشید.
ممنون از راهنماییتون
اگر برنامه به Lucky patcher گیر بده و خارج بشه یکم برنامه رو ناسازگار میکنه. ممکنه خیلیها داشته باشن این برنامه را اما برای بازیهایی مثل کلش اف کلنز و هیچ کار دیگه ای با این برنامه انجام ندن و این باعث میشه که خیلی از کاربرها از برنامه استفاده نکنن.
راهی وجود نداره که به نصب بودنش گیر نده و زمانی گیر بده که lucky patcher بخواد به پکیج برنامه ما دسترسی پیدا کنه؟
VOID اول دقیقا همین کار را می کند.
پس Lucky Patcher فقط از تغییر دادن signature هست که میتونه به برنامه نفوذ کنه و اگر اون چک بشه دیگه نمیتونه نفوذ کنه؟
بله دقیقا در ابتدا signature اصلی برنامه به دست می آید سپس در صورتی که آن تغییر کند کد متوجه می شود چون برنامه lucky patcher دقیقا signature برنامه را تغییر میدهد چون دوباره فایل apk را کامپایل می کند و چون دوباره کامپایل شده است signature نیز تغییر کرده است.
ممنون.
پس ما باید اول Signature را بدست بیاریم و به صورت String توی برنامه ذخیره کنیم و هر بار برنامه باز بشه با signature که از موقع اجرا بدست میاریم مقایسه کنیم و اگر یکسان بود بعد اجازه اجرای برنامه را بدیم و اگر یکسان نبود پروسس برنامه را Kill کنیم؟
دقیقا
بنده همین کار را کردم اما نمیدونم چرا برنامه اجرا نمیشه.
در واقع مشخص هستکه داره همون کد اجرا میشه و اجازه اجرا شدن به برنامه نمیده.
من روی دستگاه ایمولاتور جنی موشن برنامه را اجرا کردم و از توی لاگ کت signature برنامه را بدست آوردم اما الان که نسخه را release کردم برنامه کار نمیکنه ولی نسخه Debug روی دستگاه به درستی عمل میکنه
نسخه release هم signature متفاوتی دارد باید signature آن را به دست بیارید.
وقتی میخوام توی حالت Release برنامه را روی Debug کنم متاسفانه نمیزاره و میگه کلید براش بزار. وقتی میزارم و مشکل حل میشه روی دکمه Debug که میزنم پیغام زیر میاد گوشه چپ پایین:
Cannot debug application from module app on device samsung-gt_i9500-4d008a31b2d360f3. This application does not have the debuggable attribute enabled in its manifest. If you have manually set it in the manifest, then remove it and let the IDE automatically assign it. If you are using Gradle, make sure that your current variant is debuggable.
من توی بخش Project Structure و قسمت Build Types گزینه Debuggable را هم True کردم.
نیازی نیست این کار رو بکنید کافی است یک TextView بزارید سپس مقدار را در TextView قرار دهید همانطور که در آموزش گفتم پیاده سازی کنید.
مشکل حد شد.
از فایل Build.Gradle کد زیر اضافه کردم مشکل حل شد:
الان مشکل حل شده و روی گوشی اجرا میشه اما اصلا روی Break Point ها توقف نداره برنامه
log گرفتید ؟
اصلا تو لاگ چیزی نشون نمیده و حتی این کد هم گذاشتم اما کار نمیکنه:
|
Log.d(“TAG”, “checkSignature: ” + ss);
بررسی کردم مشکلی ندارد بروی یک پروژه دیگر تست کنید.
ممنون توی قسمت تنظیمات مربوط به BreakPoint ها کمی دستکاری کردم درست شد.
خواهش می کنم.