View Full Version : محکم کاری
darkenerboy
پنج شنبه 20 تیر 1392, 03:34 صبح
سلام به همه
من یک برنامه دارم نمیخوام که decompile بشه
یه چیزایی هم بابت برنامه نویسی native شنیدم ولی دقیقا نمیدونم چیه
اگه ممکنه با راهنمایی دقیق یه کمکی بفرمایین
با تشکر فراوان
darkenerboy
پنج شنبه 20 تیر 1392, 03:54 صبح
خوب من DexGuard و ProGuard رو پیدا کردم
ProGuard رایگان بود گرفتمش اگه کسی تا حالا استفاده کرده راهنمایی کنه (با تشکر)
DexGuard رو هم اگه کسی داره ممنون میشم بده و خوب قطعا به راهنمایی هم نیاز هستش
با تشکر از همه
farhadfery
پنج شنبه 20 تیر 1392, 09:36 صبح
تحقیقاتی که من کردم اکثرا همین ProGuard را پیشنهاد داده بودند.
rubiks.kde
پنج شنبه 20 تیر 1392, 09:44 صبح
خوب من DexGuard و ProGuard رو پیدا کردم
ProGuard رایگان بود گرفتمش اگه کسی تا حالا استفاده کرده راهنمایی کنه (با تشکر)
DexGuard رو هم اگه کسی داره ممنون میشم بده و خوب قطعا به راهنمایی هم نیاز هستش
با تشکر از همه
در مورد ProGuard و همچنین برنامه نویسی native براتون یه توضیح میدم.
ProGuard : یه ابزار رایگانه که همراه با sdk خود آندورید هم وجود داره برای استفاده از اون باید شما با اسکریپت نویسی اون تا حدودی آشنا باشی ، بعد از نوشتن اسکریپت اون رو از توی properties پروژه فعال میکنی به این صورت proguard.config=آدرس اسکریپت
البته دقت کنید که ProGuard که ابزاری برای بهینه سازی و همچنین مبهم سازی کد هست بعضی وقت ها کار دست آدم میده و دچار اختلال در برنامه میشه چون اگه مبهم سازی از یه مرحله بگذره دیگه dalvik (ماشین مجازی آندورید) قادر به اجرا کد نیست.حالا قوانین خاص خودش رو هم داره مثلا کلاس هایی که از اکتیویتی یا سرویس و ... مشتق میشن مبهم سازی چندان روی اون صورت نمیگیره و همچنین اگه از کد native هم استفاده کردید نباید اینترفیس اون رو مبهم کنید.
درمورد برنامه نویسی native ، همون طور که میدونید هسته آندروید یه نسخه از لینوکسه به همین خاطر میشه با سی یا سی پلاس پلاس یا سی شارت (پروژه مونو) کد نوشت البته کدی که نوشته میشه به برنامه اجرایی تبدیل نمیشه تنها به یه lib تبدیل میشه (یه فایل .so که مثل همون dll ها توی ویندوزه) بعد توسط کلاسی که با جاوا نوشته میشه اون رو لود میکنن و از کدای داخلش استفاده میشه .
باز میشه با دی کامپایل فهمید و این بار چون کد native هست نمیشه از سازوکار سر در آورد.
برای این که بتونی این طوری کد بزنید روی پروژه راست کلیک کرده و گزینه Android Tools -> Add Native Support رو بزنید چیزهایی که لازمه رو براتون ایجاد میکنه ، برای کامپایلشم اگه از ویندوز استفاده میکنید cygwin رو میتونید دانلود کنید و ازش استفاده کنید.
البته من خودم چون بیشتر Qt کار کردم برای این از Qt استفاده میکنم . کیوت یه پورت استاندارد به آندروید داره که حتی طراحی ui هم به راحتی توی native قرار میگیره و شاید اون پیچیدگی که در استفاده از JNI هست رو خیلی کم میکنه.
darkenerboy
پنج شنبه 20 تیر 1392, 10:20 صبح
مرسی مرسی مرسی خیلی زیاد
هر دوتا رو متوجه شدم
اما واستون ممکنه که کمی بیشتر راجع به ProGuard توضیح بدید
و قوانینش و اسکریپت نویسیش
بازم ممنونم
rubiks.kde
پنج شنبه 20 تیر 1392, 10:33 صبح
من هم با تمام دستورات آشنا نیستم ولی داکیومنت داره توی sdk هم هست.
اینم یه نمونه از اسکریپتش که خودم ازش استفاده میکنم.
-optimizationpasses 9
-keepattributes *Annotation*
-injars bin/classes
-injars libs
-outjars bin/classes-processed.jar
-libraryjars D:\Android\android-sdk\platforms\android-8\android.jar
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-dontpreverify
-dontwarn
-ignorewarnings
-keep class android.support.v4.** { *; }
-dontwarn android.support.v4.**
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
-repackageclasses ''
-allowaccessmodification
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keepclassmembers class * {
public void setOnClickListener(android.view.View);
public void onClickButton2(android.view.View);
public void onClickButton3(android.view.View);
}
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.content.Context {
public void *(android.view.View);
public void *(android.view.MenuItem);
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
-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 *;
}
خیلی ازش خوشم نمیاد چند ماه روی یه پروژه کار کردیم کلی روی امنیت کارکردیم تا محتوا قابل دیدن نباشه ولی حالا اونقد امن شده که اجرا نمیشه روی بعضی از دستگاها:عصبانی++:
حالا جدا ازاینا بعضی وقت ها از روی کنجکاوی برنامه هایی رو که میبینم خوبه رو دی کامپایل میکنم ولی یه بار به یه چی برخوردم که کلی کیف کردم اونم برنامه یه بانک بود که دی کامپایل کردم همش فایل های خالی برگشت و حتی یه خط هم قابل مشاهده نبود خیلی گشتم ببینم چه راهی رو رفتن به نتیجه نرسیدم
darkenerboy
پنج شنبه 20 تیر 1392, 23:10 عصر
اقا اگه بانکش ایرانیه بگو برنامه ماله کدوم بانکه شاید برنامه نویسش آشنا در اومد :لبخندساده:
powerboy2988
پنج شنبه 20 تیر 1392, 23:15 عصر
خیلی ازش خوشم نمیاد چند ماه روی یه پروژه کار کردیم کلی روی امنیت کارکردیم تا محتوا قابل دیدن نباشه ولی حالا اونقد امن شده که اجرا نمیشه روی بعضی از دستگاها:عصبانی++:
حالا جدا ازاینا بعضی وقت ها از روی کنجکاوی برنامه هایی رو که میبینم خوبه رو دی کامپایل میکنم ولی یه بار به یه چی برخوردم که کلی کیف کردم اونم برنامه یه بانک بود که دی کامپایل کردم همش فایل های خالی برگشت و حتی یه خط هم قابل مشاهده نبود خیلی گشتم ببینم چه راهی رو رفتن به نتیجه نرسیدم
سلام
اگر می تونی اون برنامه رو میل کن واسه دی کامپایل کردن یه تستی انجام بدم
ممنون
khalaj.hossein@hotmail.com
darkenerboy
پنج شنبه 20 تیر 1392, 23:29 عصر
من یک کلاس تو سی شارپ نوشتم و فقط هم از system.text داره استفاده میکنه
اگه که کتابخونش پشتیبانی میشه بفرمایین جوری ازش خروجی lib یا هم .so بگیرم
و اگه نمیشه و کسی میدونه چجوری بدون استفاده از این کتاخونه string رو به Byte تبدیل کنم
rubiks.kde
جمعه 21 تیر 1392, 00:57 صبح
الان کلی دنبالش گشتم ولی پیدا نکردم کدوم بانک بود ولی تا اونجا که یادمه از این بانک معروفا نبود.
در مورد سی شارپی هم که گفتی باید با مونو ظاهرا کامپایل بشه یا با زامارین برنامه رو بنویسی.
darkenerboy
جمعه 21 تیر 1392, 09:16 صبح
عجب داستانیه این native
کد سی رو چجوری باید کامپایل کنم ؟
بعد فایل باید کجا باشه ؟ که از تو منو add native بشه اضافش کنم
rubiks.kde
جمعه 21 تیر 1392, 11:10 صبح
اول روی پروژت راست کلیک کن بعد از قسمت Android Tools -> Add Native Support رو بزن خودش فایلا رو درست میکنه یه پوشه به اسم JNI ایجاد میشه که توی میتونی فایل سی یا سی پلاس پلاس ایجاد کنی و کد بزنی .
برای کامپایل یه فایل ایجاد میکنه به اسم Android.mk که مثل اسکریپت های لینوکسه برای کامپایل .
حالا که کدتون رو زدید و اماده اید برای کامپایل به دو چیز دیگه هم نیاز دارید 1- Android ndk و دیگری cygwin
بعد از دانلود این دو ترمینال cygwin رو باز کنید و برید به محل کدتون جایی که پوشه jni وجود داره. بعد باید برنامه ndk-build رو اجرا کنید.
بعد از کامپایل موفقیت آمیز داخل پوشه lib شما فایل های .so رو میتونید ببیندی برای استفاده مثلا توی کلاس که میخواهید استفاده کنید اول لود کنید بعد تابع ایی رو که می خوایی ازش استفاده کنی رو اول معرفی میکنی بعد استفاده می نمایی.
آموزش کامل (http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/)
shahin bahari
جمعه 21 تیر 1392, 16:06 عصر
و اگه نمیشه و کسی میدونه چجوری بدون استفاده از این کتاخونه string رو به Byte تبدیل کنم سلام
برای تبدیل یه رشته به بایت من این کار رو میکردم. نمیدونم شما هم این رو لازم دارید یا نه!
temp="some text".getBytes();
darkenerboy
جمعه 21 تیر 1392, 22:07 عصر
سلام
برای تبدیل یه رشته به بایت من این کار رو میکردم. نمیدونم شما هم این رو لازم دارید یا نه!
temp="some text".getBytes();
دوست عزیز جاوا و سی شارپ کمی تفاوت داره
یکیش اینکه string در سی شارپ getByte نداره
darkenerboy
چهارشنبه 26 تیر 1392, 17:13 عصر
سلام بالاخره بعد از کلی بدبختی cygwin رو دانلود کردم همین طور ndk رو.
حالا موقعی که Add Native Support رو میزنم خطای زیر رو توی کنسول مینویسه
Unable to launch cygpath. Is Cygwin on the path?] java.io.IOException: Cannot run program "cygpath": CreateProcess error=2, The system cannot find the file specified
darkenerboy
پنج شنبه 27 تیر 1392, 20:51 عصر
سلام
مشکل بالا زمانی کهminSdkVersion=14 شد، حل شد
اما من میخوام حداقل ورژنی که پشتیبانی میشه 8 باشه
کسی میدونه باید چیکار کنم ؟
darkenerboy
شنبه 29 تیر 1392, 21:30 عصر
:افسرده: :افسرده: :افسرده: :افسرده:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.