ورود

View Full Version : سفارشی سازی دستورات پروگارد !؟



ghasem110deh
دوشنبه 28 آبان 1397, 17:15 عصر
سلام به همه :-)
دوستان من میخوام نام اکتیویتی ها هم مثل فرگمنت ها و کلاس ها تغییر کنه، کجای این دستورات مشکل داره !؟ (عکس ضمیمه)

اینم دستورات توی فایل پروگارد : (بعضی از قسمت ها با توجه به کامنت شون مشخصه چیکار میکنن ! ولی اونایی که ندارن رو هم اگه توضیح بدین ممنون میشم)



# General Options-verbose
# no optimize apk#-dontoptimize#-dontpreverify
# Optimization-optimizations !code/simplification/variable,!code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*-optimizationpasses 5-allowaccessmodification
# keep activity and fragment from obfuscate#-keep public class * extends android.app.Activity#-keep public class * extends android.app.Fragment
-keep public class * extends android.support.v4.app.Fragment-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService
-keepclassmembers class * extends android.content.Context { public void *(android.view.View); public void *(android.view.MenuItem); }
-keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet);}
-keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int);}
-keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String);}
-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}
# 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
# Removing logging code-assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...); }
-dontwarn java.nio.file.Files-dontwarn java.nio.file.Path-dontwarn java.nio.file.OpenOption

ghasem110deh
دوشنبه 28 آبان 1397, 17:18 عصر
راستی نکته مهم - من از یه سری رشته (string) توی برنامه استفاده کردم ! ولی استرینگ رو ظاهرا مبهم نمیکنه !؟
جستجو هم زدم چیزی دستگیرم نشد !!!

این از اون بالایی مهم تره :-)

rubiks.kde
سه شنبه 29 آبان 1397, 09:16 صبح
اسم اکتیویتی ها مبهم نمی شن چون دسترسی به اون ها به صورت reflection هه. اکتیویتی ها و view ها چون در فایل های xml فراخوانی می شن تغییر در اسم اون ها کار برنامه رو با مشکل روبرو میکنه


راستی نکته مهم - من از یه سری رشته (string) توی برنامه استفاده کردم ! ولی استرینگ رو ظاهرا مبهم نمیکنه !؟
جستجو هم زدم چیزی دستگیرم نشد !!!

این از اون بالایی مهم تره :-)

فک کنم pro guard رشته ها رو مبهم نمیکنه و خودتون باید این کار رو بکنید. رشته ها رو به صورت رمز شده قرار بدید و در runtime اونها رو تولید کنید.

ghasem110deh
سه شنبه 29 آبان 1397, 12:55 عصر
اسم اکتیویتی ها مبهم نمی شن چون دسترسی به اون ها به صورت reflection هه. اکتیویتی ها و view ها چون در فایل های xml فراخوانی می شن تغییر در اسم اون ها کار برنامه رو با مشکل روبرو میکنه
فک کنم pro guard رشته ها رو مبهم نمیکنه و خودتون باید این کار رو بکنید. رشته ها رو به صورت رمز شده قرار بدید و در runtime اونها رو تولید کنید.

تشکر ...
ظاهرا همینجوره که فرمودین! نسخه DexGuard این قابلیت رو داره !
باید رشته ها رو انکریپت و دکریپت کرد .

اینجا هم توصیه های به درد بخوری واسه امنیت برنامه گوش زد کرده :

https://blog.omni-bridge.com/5-ways-to-secure-your-android-application-769c8c73dafb

ghasem110deh
سه شنبه 29 آبان 1397, 18:48 عصر
سلام
دوستان این یکی دو شب من اینو ردیف کردم ... روی دو سه تا از پروژه های قبلی هم پیاده کردم ! خطا یا ایراد خاصی رخ نداد!
و تا حدودی (تقریبا متوسط) سورس رو به هم ریخته و نامفهوم کرده!

دوستان اگه راهنمایی خاص، نمونه ای که استفاده میکنن یا هر توصیه دیگه ای واسه افزایش امنیت دارن در ادامه توضیح بدن ...
نکته مهم اینه که از هر کتابخونه ای استفاده کریدن با توجه به توضیحات سازنده اون کتابخونه توی دستورات پروگارد رو روی کتابخونه مورد نظر اعمال کنید (بیشتر کتابخونه های درست و حسابی خودشون دستورات پروگارد رو ارائه میدن)


# Add project specific ProGuard rules here.# You can control the set of applied configuration files using the# proguardFiles setting in build.gradle.## For more details, see# http://developer.android.com/guide/developing/tools/proguard.html
# 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 *;#}
# General Options-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-verbose
# no optimize apk#-dontoptimize#-dontpreverify
# Optimization-optimizations !code/simplification/variable,!code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*-optimizationpasses 5-allowaccessmodification
# keep activity and fragment from obfuscate
-keep public class * extends android.app.Activity-keep public class * extends android.app.Fragment-keep public class * extends android.support.v4.app.Fragment-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService
-dontwarn android.support.design.**-keep class android.support.design.** { *; }-keep interface android.support.design.** { *; }-keep public class android.support.design.R$* { *; }
-keep public class android.support.v7.widget.** { *; }-keep public class android.support.v7.internal.widget.** { *; }-keep public class android.support.v7.internal.view.menu.** { *; }
-keep public class * extends android.support.v4.view.ActionProvider { public <init>(android.content.Context);}
# cardview-shadow-not-appearing-in-lollipop-after-obfuscate-with-proguard-keep class android.support.v7.widget.RoundRectDrawable { *; }
-keepattributes *Annotation*-keep public class com.google.vending.licensing.ILicensingService-keep public class com.android.vending.licensing.ILicensingService
-keepclassmembers class * extends android.content.Context { public void *(android.view.View); public void *(android.view.MenuItem); }
-keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet);}
-keepclasseswithmembernames class * { public <init>(android.content.Context, android.util.AttributeSet, int);}
-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}
# 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
# Removing logging code-assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int i(...); public static int w(...); public static int d(...); public static int e(...);}
-dontwarn java.nio.file.Files-dontwarn java.nio.file.Path-dontwarn java.nio.file.OpenOption
# keep sqlite class and helper-keep class org.sqlite.** { *; }-keep class org.sqlite.database.** { *; }
# keep libs-keep class com.itextpdf.** { *; }-dontwarn com.itextpdf.**
-keep class com.github.mikephil.charting.** { *; }

در مورد دستورات هم سوالی داشتین همیجا بپرسین، اگه تونستیم و سخت نبود جواب میدیم :لبخند:

Accidentboy
چهارشنبه 30 آبان 1397, 09:37 صبح
من از رتوفیت استفاده میکنم ولی تو interface ی که نعریف کردم باید تو متد Post اسم پیج رو بهش بدم . میشه کاری کرد که تو دیکامیل مشخص نشه؟
اسم پیج سمت سرور رو داخل Gradle هم دخیره کردم ولی تو دیکامپل بازم رشته مشخصه...




@POST(BuildConfig.page_name)
@FormUrlEncoded
Call<List<Page_Name>> getpage(@FieldMap (encoded = true) Map<String, Integer> map );




کاری میشه کرد؟

rubiks.kde
چهارشنبه 30 آبان 1397, 10:20 صبح
تشکر ...
ظاهرا همینجوره که فرمودین! نسخه DexGuard این قابلیت رو داره !
باید رشته ها رو انکریپت و دکریپت کرد .

اینجا هم توصیه های به درد بخوری واسه امنیت برنامه گوش زد کرده :

https://blog.omni-bridge.com/5-ways-to-secure-your-android-application-769c8c73dafb

بله DexGuard داره ولی خب پولیه و قیمتش هم خیلی بالاس (چند سال پیش که میخواستم بگیرم اصلا توجیه نداشت الان که دیگه ...)

در مورد string ها از روش های تولید run time استفاده کنید و کلید ها رو خودتون رمز کنید و استفاده کنید.