هدف از این تاپیک، صرفا ارائه نمونه Anti-Decompile برای اندروید تحت جاوا است. امیدوارم نهایت استفاده رو ببرید."محافظت از سورس برنامه"
هدف از این تاپیک، صرفا ارائه نمونه Anti-Decompile برای اندروید تحت جاوا است. امیدوارم نهایت استفاده رو ببرید."محافظت از سورس برنامه"
آخرین ویرایش به وسیله saeidpsl : جمعه 03 مرداد 1393 در 19:31 عصر
...................................
آخرین ویرایش به وسیله saeidpsl : جمعه 03 مرداد 1393 در 19:16 عصر
با apk protect از دیکامپایل توسط apktool و dex2jar جلوگیری کنید. (البته فکر کنم باید فایل apk را دوباره ساین کنید)
http://uploadboy.com/3yiqekf5s678.html
Write Once, Run Anywhere
دوستان اگر ممکنه لینک فایل اصلی از وبسایتش رو هم بزارید، اینطوری حداقل میشه اطلاعات بیشتری در مورد برنامه خوند. الان دوتا فایل تو این تاپیک هست که تا دانلود و اجراشون نکنم، هیچ اطلاعی ندارم که چی هستن.
برای دیکامپایل ابزار jd-GUI یه ابزار خوبه، بصورت پلاگین رو Eclipse و IntelliJ IDEA هم نصب میشه.
اما برای جلوگیری از دیکامپایل که خب راه حلی نیست، در واقع این ماهیت جاوا هست که کدها به کد ماشین ترجمه نمیشن. ابزارهایی که در این بین وجود دارن، Obfuscator هستن، میان و کدها رو به هم میریزن تا استفاده ازش مشکل تر بشه.
حالا یک سری ابزارهایی وجود دارن که کار بیشتری انجام میدن، مثلاً String ها رو هم به هم میریزن، یا از یه الگوریتم دیگه واسه بهم ریختن استفاده می کنن، بیشترشون هم تجاری هستن و ارزون هم نیستن
من تو اکلیپس ازش استفاده کردم و روی اون توضیح میدم، فرض کنید یک کنابخانه به پروژه اضافه کردید، سورس رو به حالت معمول نمیتونید ببینید، حالا اگه از قسمت Private Libraries (تو ساختار پروژه) اون فایل جار رو باز کنید لیست کلاس هاش رو میبینید، با باز کردن هر کلاس، سورس جاوا استخراج و نمایش داده میشه. و خب بزرگترین مزیتش اینه که مثل ادیتور های اکلیپس، می تونید با نگه داشتن Ctrl و کلیک رو نام کلاس، وارد اون کلاس بشید.
برای فایل های apk هم اول با dex2jar تبدیلش کنید و فایل jar تولید شده رو میشه با این برنامه باز کرد
حتی نرم افزارهای بزرگ که توی بازارهای جهانی هستن، به راحتی دیکامپایل میشن و من
این رو تست کردم و جالب اینه، کدها به خوبی هرچه تمام تر نمایش داده میشن.
برای مثال، نرم افزاری که اخیراً دیکامپایل کردم، نرم افزار App Lock با بیش از 50 میلیون
کاربر و پشتیبانی از 24 زبان !
پس یه نتیجه کلی و سریع میشه گرفت، اگر راه ی بود 100 درصد چنین نرم افزارهایی
انجام میدادن.
داش اینو تبدیل به سورس کن ببین String سلام رو میتونی از کد دربیاری اگه تونستی که هیچ اگه نتونستی بگو تا روش کار رو بگم.
قشنگتر از این؟ :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Proguard</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
</resources>
و بدین نشانی که در proguard و در قسمت MainActivity یک Toast داری.
برای دیکامپایل کردن زیاد به خودتون زحمت ندین، یکم حجم اینترنت بسوزونید کارتون خیلی راحت میشه
http://www.decompileandroid.com/
این سایت فایل apk رو میگیره، سورس تحویل میده :|
البته اگر مبهم سازی شده باشه همونطوری مبهم شده تحویل میده دیگه
ویرایش : فقط این سایت یا احتمالا هر دیکامپایلر دیگه ای، رشته های فارسی رو نمیتونه برگردونه و اونا رو به صورت کد هر کاراکتر برمیگردونه
آخرین ویرایش به وسیله poorman : جمعه 20 تیر 1393 در 20:57 عصر
چه ربطی داره من گفتم سلام نه hello این salam اون چیزی که toast میشه رو گفتم یه بار برنامه اجرا کن تا متوجه شی.
خودت ببین:
لینک
دوستان بهتره یکم در مورد خود زمان جاوا تحقیق کنید.جاوا میشه byte code به همین خاطر هم راحت دیکامپایل میشه و اگه به زبان ماشین تبدیل میشد این مشکلات خیلی کم بود.
هر کاری هم بکنید باز هم کد رو میشه دید.تنها مبهم سازی کار رو مشکل میکنه
YES I AM Qt
Code Less
Create More
Deploy Everywhere
چیزی پیدا نشد
داش من منظورم این بود اینو میتونی از کد دربیاری
public class a
{
public static String a;
public static boolean b;
public static boolean c;
public a()
{
}
static
{
char ac[];
int i;
int j;
ac = "\030\t>]l".toCharArray();
i = ac.length;
j = 0;
if (i > 1) goto _L2; else goto _L1
_L1:
char ac1[];
int k;
int l;
char ac2[];
ac1 = ac;
k = j;
l = i;
ac2 = ac;
_L9:
char c1 = ac2[j];
k % 5;
JVM INSTR tableswitch 0 3: default 68
// 0 103
// 1 110
// 2 117
// 3 124;
goto _L3 _L4 _L5 _L6 _L7
_L7:
break MISSING_BLOCK_LABEL_124;
_L4:
break; /* Loop/switch isn't completed */
_L3:
byte byte0 = 1;
_L10:
ac2[j] = (char)(byte0 ^ c1);
j = k + 1;
if (l != 0)
{
break MISSING_BLOCK_LABEL_131;
}
ac2 = ac1;
k = j;
j = l;
if (true) goto _L9; else goto _L8
_L8:
byte0 = 107;
goto _L10
_L5:
byte0 = 104;
goto _L10
_L6:
byte0 = 82;
goto _L10
byte0 = 60;
goto _L10
i = l;
ac = ac1;
_L2:
if (i <= j)
{
a = (new String(ac)).intern();
}
if (true) goto _L1; else goto _L11
_L11:
}
}
داش فارسی نیست که اینه salamنوشته شده توسط smemamian
حتمآ میزارم به زودی.
یه برنامه فوق العاده عالی و قوی برای Obfuscation کردن فایل jar
خوب دوستادن رسیدیم به بخش مهم مهم Obfuscation(مبهم کردن) یک پسورد یا آدرس سایت... در جاوا با کمک برنامه Zelix KlassMaster 5.5 یا Zelix KlassMaster 8.0.8 اگه پست بالا رو ببینید متوجه میشید نمونه مبهم شده با برنامه.
روش کار
پروژه اول اختصاص میدیم به دیتا یا فقط برای آدرس و پسورد ...چیزای که نمیخواهید کسی بتونه ببینه یه پروژه جاوا درست میکند بعد پکیج مثلا com.me و بعد هم یه کلاس بعد تو کلاس یه رشته مثلا پسورد درست میکنید بعد با فرمت جار export کنید. مثال
حالا میریم سراغ برنامه
برنامه رو ران میکنیم
فایل جار export شده رو باز میکنیم "Ctrl + O"
بعد از منو Tools >Obfuscation انتحاب کنید "Ctrl + B"
حالا از ComboBox Exclude package qualifiers پکیج مورد نظرتون رو انتخاب کنید و نکس رو انتخاب کنید این بخش برای تنظیم مبهم کردنه و بعد اوکی حالا همه چی مبهم شد خوب حالا از سطون اول سمت چپ کلاس مورد نظر رو سلکت کنید بعد سطون دوم معلومه اسم "اسم کلاس"و فیلد "رشته ها و ...."و متود ... رو با سلکت رو هر کدوم میتونید اسم و مقدارشون رو عوض کنید
و بعد از منو File > Save all انتحاب کنید "Ctrl + s"
جار رو سیو کنید و بعد اون جار رو کپی کنید تو پوشه libs سورس برنامتون و سورس رو رفرش کنید بعد اون رشته رو لود کنید مثل
Toast.makeText(getApplicationContext(), com.me.user.a , Toast.LENGTH_SHORT).show();
آخرین ویرایش به وسیله saeidpsl : پنج شنبه 09 شهریور 1396 در 03:01 صبح
دم saeidpsl و بقیه گرم
اسیر اینجور تاپیک ها هستم
ایول
خواهش داش
- تست کنید اگه درست جواب داد از آقا مدیر rubiks.kde عزیز میخوام این تاپیک رو به تاپیک های اعلان اضافه کنه.
من اصلا تو فکرشم یه برنامه ی anti decompile خودم بنویسم.
Write Once, Run Anywhere
برای فایل های jar تا یه جاهایی پیش رفتم ولی نشد. برای اندروید هم چند وقته دارم تلاش می کنم ولی نمیشه
ولی یه مبهم کننده ی string نوشتم اگه خواستین بهتون بدم . طوری نیست که خودش بره و مبهم کنه. شما متنتون را با برنامه ی من مبهم می کنید و میزارید توی کدتون و توی کدتون با تابعی که نوشتم برش می گردونید به حالت اول. یکم سخته و سرعت را میگیره ولی کار می کنه.
Write Once, Run Anywhere
اینم کد کننده ی string من :
توی تست باکس اول متنتون را بنویسید و دکمه ی enode را بزنید . تکست باکس دوم کد را نمایش خواهد داد .
کد را توی برنامتون با تابع زیر به حالت اول در بیاوید و به کاربر نمایش بدید.
public static String decode(String s){
char[] ch = s.toCharArray();
int len = ch.length;
if(len % 4 !=0)
return "Error !";
String d= "";
int yy =0;
for (int i = 0; i < len/4; i++) {
int c = (int) Integer.decode("#"+s.substring(yy, yy+4));
yy+=4;
d+=(char)c;
}
return d;
}
فایل برنامه پیوست است. آن را از حالت زیپ در بیاورید و با jre اجرا کنید.
البته یه مدل دیگه از این نرم افزار را هم نوشتم که قابلیت اینو داره که با یه رمز کد می کنه و فقط با همون رمز هم به حالت اولیه بر می گردونه که کامل تر و بهتره . یکمی دیگه کار داره سعی می کنم اونم سریع بزارم.
Write Once, Run Anywhere
کلاً ابزارهای مبهم سازی دسته های مختلفی دارن و سطوح مختلفی از توانایی.
یکی از مراحل مبهم سازی Name Obfuscation هست، که معمول ترین حالت هست و اسم متد ها و متغیرها و کلاس ها رو بصورت رندوم انتخاب می کنه گه کد تولید شده رو برای خوندن سخت تر می کنه.
سطح دیگه String Encryption هست که String ها رو بهم میریزه، درواقع در یک مرحله کد می کنه و در مرحله ای دیگه دیکد می کنه.
سطح دیگه Flow Obfuscation هست که روند اجرای برنامه رو تغییر میده بصورتی که نتیجه ای مشابه حاصل بشه، نمونه ای از Flow Obfuscation در کدهایی که دوستمون گذاشتن مشخص هست، از این Label و Goto برای تغییر روند اجرای کدها استفاده شده.
موضوع این هست که Flow Obfuscation بخاطر تاثیر منفی که در سرعت و عملکرد برنامه میزاره توصیه نمیشه
String Encryption هم قابل دور زدن هست، به این دلیل ساده که الگوریتم کد کردن باید دوسویه باشه و بتونه رشته رو کد و دیکد کنه، درنهایت شخصی که قصد داره از برنامه ی ما سر در بیاره کافیه کدهای ما رو برداره و با یه کد ساده متد نهایی مارو صدا بزنه تا رشته دیکد شده براش نمایش داده بشه.
درواقع ما فقط داریم استرینگ رو از دید پنهان می کنیم که در نگاه اول مشخص نباشه، که من فکر می کنم بشه از یه روشی که خودمون ساختیم استفاده کنیم.
درکل مگر اینکه برنامه ی ما حاوی اطلاعات خیلی خاص و مهمی باشه، بهتره از روش هایی فراتر از Name Obfuscation استفاده نکنیم. به این دلیل که این ابزارها میتونن تاثیر منفی روی عملکرد برنامه بزارن و چون بر اساس فرضیاتی کار می کنن و قسمت هایی از کد رو تغییر میدن یا حذف می کنن، ممکنه ناخواسته باعث بشن برنامه ی ما کرش کنه.
در لیست زیر تعدادی نرم افزار جایگزین ProGuard رو میتونید ببینید: http://proguard.sourceforge.net/alternatives.html
ضمن اینکه با توجه به رایگان نبودن این ابزار، استفاده از dexGuard که هم ارزانتر هست، هم مخصوص اندروید هست و بر پایه ی ProGuard معقول تر بنظر میرسه.
این مقاله رو هم بخونید اطلاعات خیلی مفیدی داره: http://www.excelsior-usa.com/article...fuscators.html
درنهایت، شما فقط می تونید کدهاتون رو بهم بریزید تا نشه به راحتی ازش استفاده کرد. فکر می کنم تا همین اندازه کافی باشه، اما اگر تصمیم گرفتید پا رو از این حد فراتر بزارید، حتماً برنامه رو بعد از استفاده از این ابزارها چندبار تست کنید تا از کیفیت عملکردش مطمئن بشید
.................................................. ..........
آخرین ویرایش به وسیله saeidpsl : جمعه 03 مرداد 1393 در 19:21 عصر
کلا بحث های مربوط به هک و ... خلاف قوانین هست.**مدیر این پست رو بزار بالا خواهشا
حالا اگر هدف آموزش های لازم برای بالابردن امنیت باشه یه چیزی.
همچنین باید پست از حالت آشفتگی بیاد بیرون و مطالب پراکنده بیان نشه.
YES I AM Qt
Code Less
Create More
Deploy Everywhere
خوب اینجا کامل گفتم
دوست عزیز
راهی برای استفاده از این نمونه کدی که گذاشتید می شناسید؟
توی stackoverflowدنبال چی بگردم؟
public class a
{
public static String a;
public static boolean b;
public static boolean c;
public a()
{
}
static
{
char ac[];
int i;
int j;
ac = "\030\t>]l".toCharArray();
i = ac.length;
j = 0;
if (i > 1) goto _L2; else goto _L1
_L1:
char ac1[];
int k;
int l;
char ac2[];
ac1 = ac;
k = j;
l = i;
ac2 = ac;
_L9:
char c1 = ac2[j];
k % 5;
JVM INSTR tableswitch 0 3: default 68
// 0 103
// 1 110
// 2 117
// 3 124;
goto _L3 _L4 _L5 _L6 _L7
.
.
.
برادر من داداش من اخوی رفیق این یک نمونه از کد شده توسط برنامه است
ازش استفاده کنی برای چه ؟؟!!
اقا من برنامه رو دیکامپایل میکنم لامصب برداشته با C++ یک برنامه نوشته و کامپایلش کرده file.so هست گزاشته تو پوشه libs اینو چطوری دیکامپایل کنم ؟!
ایا یک برنامه نویش بهش بدی بنویسه نباید سورسشو بده !؟؟؟ ؟؟؟ بهش میگم سورس بده میگه باید 2 تومن بدی :| میخوام یه تغییر کوچیک بدم میگه 200 تومن !!! کلا هم 500 گرفته !!!