در این پست میخواهم راه حلی برای محافظت از برنامه های اندروید را به شما آموزش بدم ، همانطور که می دانید برنامه های اندرویدی را به راحتی می توان دیکد کرد و از انها استفاده و بعضا سوء استفاده کرد و به فایلها و کلاس ها ، api و فایل های حیاتی آن دست پیدا کرد (سعی می کنم در آموزشی نحوه دیکد کردن برنامه اندروید را به شما آموزش بدم) . با این کار امنیت برنامه ، و در برنامه هایی که بصورت آنلاین کار می کنند می تواند امنیت سایت و سرور را به خطر بیاندازد و افراد سودجو و به اصطلاح هــــکر می توانند در برنامه شما دست برده و با انجام کارهای جعلی از این ضعف به سود خودشان استفاده کنند.متاسفانه نمی توان جلوی این خرابکاری ها را به طور کامل گرفت،ولی میتوان کاری کرد که انجام کار برای فرد مهاجم سخت شود. راه حل این کار استفاده از پروگارد (proguard) هست که در این پست به معرفی و نحوه استفاده آن در پروژه های اندروید می پردازیم.
پروگارد چه کارهایی انجام می دهد ؟
کوچک کردن برنامه یا minification
به هم ریختن برنامه یا obfuscation
بستهبندی مجدد برنامه یا repackaging
بهینهسازی یا optimization
پروگارد چه معایبی دارد؟
پروگارد ، کلاس ها و متغییرها مورد استفاده در پروژه را تغییر نام می دهد و باعث ناخوانا شدن انها و همچنین کلاس هایی که بی استفاده هستند را به صورت خودکار حذف می کند و دیباگ کردن برنامه اندروید را دچار مشکل می کند و همچنین سرعت بیلد کردن پروژه را بالا می برد. برای حل این مشکلات به راحتی می توان پروگارد را در زمان دیباگ کردن غیرفعال کرد و بعد از تست نهایی و گرفتن خروجی آن را فعال کرد ،به همین راحتی 😀
نصب پروگارد
پروگارد به صورت پیشفرض در Sdk وجود دارد و نیاز به نصب خاصی ندارد (sdk\tools\proguard)
پیکربندی پروگارد
تنظیمات و فایل پیکربندی پروگارد در فایل proguard-rules.pro در زیر شاخه ی Gradle Scripts قرار دارد.
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in E:\android-sdks/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
هر خط در این فایل که با # شروع میشود کامنت یا راهنما و توضیح هست که غیر فعاله و مابقی خط ها مربوط به تنظیمات می شود.
پروگارد تنظیمات زیادی داره که در زیر چند مورد که از همه مهم تر هست را توضیح میدم و مابقی آنها را می توانید از مستندات ان در سایت اصلی proguard مشاهده و بررسی کنید.
-keep: به پروگارد میگوییم که این کلاسها را نگه دارد و نام آنها و بسته آنها را تغییر ندهد. اگر بخواهیم همه کلاسهای داخل یک پکیج را استثنا کنیم از * و اگر بخواهیم همه کلاسهای داخل این پکیج و همه کلاسهای داخل پکیجهای داخلی آن را استثنا کنیم از ** استفاده میکنیم.
-dontwarn: اگر ارجاعاتی به/در کلاس یا کلاسهای مشخص شده وجود دارد که پروگارد آنها را به هر دلیل پیدا نمیکند، هشدار ندهد و آنها را نادیده بگیرد.
-ignorewarnings: عملکرد آن شبیه dontwarn است با یک تفاوت: در لاگ خروجی این ارجاع نامشخص را مینویسد اما به کار خود ادامه میدهد.
-keepattributes: ویژگیهایی که اینجا اعلام کردهایم را نگه میدارد و آنها را حذف نمیکند.
-dontnote: پروگارد بعد از اجرا فایلی را در اختیار ما میگذارد که در آن تمام تغییراتی را که در پکیجها، کلاسها و ویژگیها آنها داده است، در آن میآورد. اگر بخواهیم که خطاهای بالقوه در یک یا چند کلاس خاص را در آن فایل ننویسد از این تنظیم استفاده میکنیم.
*منبع این اپشن ها سایت اسمارت لب هست
استفاده از پروگارد در پروژه اندروید
ابتدا به مسیر build.gradle (Module :app) در زیر شاخه ی Gradle Scripts می رویم و کد زیر را پیدا می کنیم.و در ادامه
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
برای فعال کردن پروگارد در پروژه فقط کافی هست مقدار minifyEnabled را از false به true تغییر دهید.
تنظیمات پروگارد برای کتابخانه های اندروید
در زیر تنظیمات مربوط به کتابخانه ی معروف و پرکاربرد اندروید را برای شما قرار دادم که می تواند به راحتی از انها در پروژه خود استفاده کنید و پروژه خود را بدون مشکل کامپایل کنید.
فایل پیکربندی پروگارد برای کتابخانه ی پرکاربرد
سلام
من وقتی پروگارد رو true میکنم برنامه ای که خروجی میده توی موبایل نصب نمیشه ولی وقتی false باشه برنامه خروجی توی دستگاه نصب میشه؟
ممنون
سلام میلاد جان عزیز
ببنید دقیقا به کدوم قسمت گیر میده دقیقا از LogCat
اگر از کتابخانه ی خاصی استفاده میکنید که پروگارد باهاش مشکل داره باید کد مربوط به اون را به (فایل پیکربندی پروگارد proguard-rules.pro در زیر شاخه ی Gradle Scripts قرار دارد) اضافه کنید.
میتونید از لینک زیر هم کمک بگیرید.
https://github.com/krschultz/android-proguard-snippets/tree/master/libraries
باز هم اگر مشکلی بود کامنت بزارید تا بیشتر بررسی کنم