توسعه دهنده ReactNative هستید ؟obfuscate رو فراموش نکنید

زمانی که ما یک اپلیکیشن React Native رو می سازیم ٬کد های جاوای ما تو فایلی با فرمت dex کامپال میشه .این فرمت قابل فهم برای من و شما نیست اما بگونه ای طراحی شده است که قابل فهم برای دی کامپایلر ها باشد.به هر حال میدانیم جلو دی کامپایل شدن فایل های جاوا را نمیشه گرفت ولی میشه کاری کرد که این کار سخت تر بشه.برای سخت تر کردن کار پیشنهاد Android استفاده از فایل ProGuard که یکسری تنظیمات رو در قالب کد های کوتاه میشه در اون انجام داد .و حتی میتوان با تنظیمات ProGuard از قسمت های بلا استفاده برنامه خلاص شد و اندازه برنامه را بهینه تر کرد.

همیشه امنیت رو باید برای اپلیکیشن های موبایل در نظر داشت . در React Native که بعضا ممکن است از کتابخانه های Native هم استفاده کنیم استفاده از این روش خالی از لطف نیست.



چگونه کد اندروید خودم رو obfuscate کنم ؟

تکه کد زیر را در فایل

[app_name]/android/app/build.gradle


def enableProguardInReleaseBuilds = true 

android {
 // other config omitted for brevity   
 buildTypes {        
                release {            
                        debuggable false            
                               shrinkResources enableProguardInReleaseBuilds          
                               zipAlignEnabled enableProguardInReleaseBuilds            
                               minifyEnabled enableProguardInReleaseBuilds            
                               useProguard enableProguardInReleaseBuilds            setProguardFiles([getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'])    
                   }   
          }
}

اضافه کنید.

در مرحله دوم باید خط های زیر رو در فایل

[app_name]/android/app/proguard-rules.pro


به صورت زیر کامنت کنید.

# Disabling obfuscation is useful if you collect stack traces from production crashes
# (unless you are using a system that supports de-obfuscate the stack traces).
# -dontobfuscate


یک نکته بسیار مهم که برای React Native خود گیت هاب ری اکت نیتیو یک فایل نمونه از Progurd داره که پیشنهاد میکنم حتما از اون استفاده کنید . من لینکش پایین می ذارم براتون :

https://github.com/facebook/react-native/blob/master/ReactAndroid/proguard-rules.pro


پیشنهاد دوم اینکه این کار رو هم برای حالت debug هم در گریدلتون انجام بدید چون ممکنه یکسری خطا ها رو دریافت کنید اینجوری بهتر میتونید حلش کنید.

چگونه چک کنیم که ایا کد من obfuscated شده یا نه ؟

شما به راحتی میتوانید توسط ابزار Apk آنالیز این کار را انجام دهید در خود Android Studio

  • به مسیر زیر برید و روی apk.* کلیک کنید
[app_name]/android/app/builds/outputs/apk
  • فایل classes.dex رو پیدا کنید و روش کلیک کنید

فایل classes.dex رو بازرسی کنید . اگر همه یا بخشی از کلاس ها و یا توابع نامشون به شکل زیر تغییر کرده پس فرایند obfuscated به درستی پیش رفته



اخطار امنیتی

دیکامپایل کردن کد اپلیکیشن اندروید شما ممکن است باعث لو رفتن کامل معماری سیتم شما شود . هرچند امنیت سمت بک اند از احمیت بیشتری برخوردار است اما سمت کلاینت یکی از کار های امنیتی که برای اپلیکیشن های اندروید میتوانید انجام دهید همین فرایند obfuscated می باشد .