PDA

View Full Version : جلوگیری از سو استفاده از کتابخانه های سی ++



dasssnj
یک شنبه 05 بهمن 1393, 13:17 عصر
سلام دوستان .
من دارم برای یه قسمت از بازی ام از سی ++ استفاده می کنم طوری که بعضی محاسبات و String ها را از توابع سی ++ دریافت می کنم. اما مشکل اینجاست که اگه کسی کتابخانه ی So را از فایل Apk بازی من بیرون بیاره می تونه از توابعش استفاده کنه . می خوام بدونم دوستان راهی برای حل این مشکل بلدن یا چیز مفیدی در این رابطه می دونند یا خیر . ممنون میشم اگه کمک کنید .


تشکر .

dasssnj
یک شنبه 05 بهمن 1393, 20:12 عصر
مثلا فرستادن شئ context برنامه به سی ++ و چک کردنش شاید راه حل باشه اما یادمه مدیر بخش گفتن امکان ایجاد context تقلبی وجود داره .

=============================

چک کردن امضای برنامه چطور انجام میشه ؟ این راه خوبی نیست ؟

dasssnj
دوشنبه 06 بهمن 1393, 04:21 صبح
روش چک کردن امضا را کسی بلد نیست ؟

c0mmander
دوشنبه 06 بهمن 1393, 09:24 صبح
public String MySigCheck(Context context) {
String sigChk = "";

Signature[] signature = new Signature[0];

try {
signature = context.getPackageManager().getPackageInfo(context .getPackageName(), PackageManager.GET_SIGNATURES).signatures;

} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
sigChk = String.valueOf(signature[0].hashCode());

return sigChk;
}




برای پیدا کردن امضای خود برنامه هم یک لوگ بزار تا بهت بده. البته این کارت یکمی بیخوده چون کسی که برنامت رو داشته باشه پس امضا برنامه رو هم خواهد داشت!
_____________________________

اما برای موضوعی که مطرح کردی. وقتی از کتاب خونه native استفاده میکنی دیگه اون قسمت از کدتقابل بازگردانی نیست(البته برای 90 درصد کرکر ها و اون 10 درصد هم نیازی به کرکر برنامه شما ندارند خودشون بهترشو میتونن بسازند :) ) اما خوب وقتی کسی ندونه که شما از چه کدی استفاده کردی ورودی و جروجی شما به چه درش میخورده؟

dasssnj
دوشنبه 06 بهمن 1393, 16:01 عصر
ممنون .
من اطلاعات بازیمو کد گزاری می کنم و کلید اون رمزنگاری را با توابع سی ++ در زمان اجرا تولید می کنم . خب اگه کسی کلیدمو با اجرای اون توابع به دست بیاره می تونه اطلاعاتمو رمز گشایی کنه . بالاخره باید یه روش امن برای نگه داری یا ساخت String وجود داشته باشه .....

ضمنا کسی که برنامه ام را داشته باشه ، ازش امضا را چجوری به دست میاره ؟؟؟؟

c0mmander
دوشنبه 06 بهمن 1393, 19:08 عصر
اعتبار سنجی رو داخل بخش نیتو قرار بده و فقط context رو بفرست برای ای کار. بصورت اشاره گر فکر کنم باید این کارو انجام بدید یعنی یک مقدار context رو بصورت اشاره گر کلاس رو تعریف کنید و بفرسیتید به لایبرری native

خوب معمولمه که این کار هیچ سودی برای امنیت برنامه نداره. برنامه شما :
1- برنامه اصلی به قسمت نیتیو: ببین رشته کد چیه
2- قسمت نیتو به برنامه اصلی : بیا بگیر اینم کد باز شدش!

که باید به این صورت باشه:
برنامه اصلی به قسمت نیتیو : ببین برنامه من معتبره
قسمت نیتو به برنامه اصلی : صبر کن بررسی کنم اگر مشکلی نداشت اجرا بقیه کد ها به بعد از اجرا بخش قرمز (مهم) بهت میدم.
...

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

بخش نتیو برای نگهداری رشته هایی خوبه که مثلا قرار با یک وب سایتی ارتباط برقرار کنه و یا مثلا قرار یک چیزی رو دانلود کنه اما شما نمیخواهید که اون لینک قبل از اعتبار سنجی برای کاربر دانلود بشه.
بگذار من یک سناریو رو برات مثال میزنم داخل پیغام خصوصی بخونش.