نه من مک کار میکنم و اسم فایل رو هم تو پروژه خودم تغییر ندادم. فقط پکیج رو تغییر دادم از نام توابعی که داخل اون فایل سی هستن. من اصلا این فایل Android.mk رو ندارم تو پوشه های پروژه. و اینکه مسیر و همه چیز پروژه خودم شبیه پروژه شماست. این ndk-build رو هم تو پژوه پیدا نمیکنم محتوای build.gradle اینه:
ndk.dir=/Users/mahdi/Desktop/Home/Packages/AndroidSdk/ndk-bundle
sdk.dir=/Users/mahdi/Desktop/Home/Packages/AndroidSdk
اسم پکیج اینطورریه:
ir_pishguy_MYAPPPRO_EncryptUtil_decrypt
تو همون اسم توابع داخل فایل c
تو این فایل setup-app-platfowm.mk گیر میکنه
ممکنه با مک یه جور دیگه هست.مک کار نکردم
مک با لینوکس تفاوتی نداره: میدونید این خطا چیه؟
رو پروژه شما هیچ مشکلی ندارم آخه. عجیبه:
Error:(115) *** Android NDK: Aborting . Stop. Error:Execution failed for task ':app:compileDebugNdk'. com.android.ide.common.process.ProcessException: Error while executing process /Users/mahdi/Desktop/Home/Packages/AndroidSdk/ndk-bundle/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/Users/mahdi/Desktop/Home/Projects/Android/myapp/app/build/intermediates/ndk/debug/Android.mk APP_PLATFORM=android-25 NDK_OUT=/Users/mahdi/Desktop/Home/Projects/Android/myapp/app/build/intermediates/ndk/debug/obj NDK_LIBS_OUT=/Users/mahdi/Desktop/Home/Projects/Android/myapp/app/build/intermediates/ndk/debug/lib APP_ABI=armeabi-v7a,armeabi,x86}
میتونم بهتون تیم بدم ببینید؟
gradle رو جدید کن
classpath 'com.android.tools.build:gradle:2.1.2'
آخرین نسخشو دارم
classpath 'com.android.tools.build:gradle:2.3.3'
مشکل از اینه که باید من این رو باید لینک کنم به گردل. روی پروژه فعلی مراحل فرق میکنه. شما آشنایید با اونها؟
همونطور که عرض کردن تنها راه ایمن اینه امتیاز دهی در سمت سرور انجام بشه
به عنوان مثال میز بازی دو نفر هست و امتیاز میز ۵۰، بعد از پایان بازی سرور باید برنده و بازنده رو تشخیص بده و امتیاز رو برای برنده به ثبت برسونه
دوست من ، بازی دو تنه نیست.
تنها یک تن بازی رو انجام میده و امتیاز کسب شده ارسال میشه به سرور.
همینک دیدگاهتون چیه؟ چه ترفندی به ذهنتون میرسه؟
----------------------------------------------------------------------------------------
نفر = واژه ای صد در صد عربی
تن = پارسی را پاس بداریم
آخرین ویرایش به وسیله mamadlooloo : سه شنبه 10 مرداد 1396 در 20:30 عصر
راه حل خوبیه ، ولی :
ایجاد رمز ورود تازه، دوای درد نمیتونه باشه.
فرض کنید هکر در برنامه ثبت نام کرده و برای دریافت رمز ورود هم مشکلی نداره. میتونه هر بار که خواست این درخواست رو از سرور داشته باشه.
مشکل سر اینه که یه امضا خاصی درون اپلیکیشن باشه و سرور تنها با این امضا خاص کار کنه. یه امضا مهر و موم شده. یا یه چیزی که تا اکنون به ذهنم نرسیده.
سلام خدمت همه
تونستم یه راه پیدا کنم
تو عکس زیر تست زدم که اول سیو کردم بعد میگه با موفقعیت امتیاز سیو شد بعد دکمه چک هک یعنی همون لینک که ارسال شده رو دوباره میفرسته ولی میزنه این در خواست تکرای هست و از 10 ثاینه بگذره باز چک کنه timeout نشون میده.
در اصل چه کار میکنه اول یه strtotime("now") کد شده رو از سرور میگیره بعد تو اندروید از کد بیرون میاد اون زمان رو همراه با داده ها کد میشه میفرسته به سرور و تو دیتابیس تو تیبل request اون strtotime و ایدی یور سیو میشه که اگه اون هکر لینک رو دوباره زد بزنه نشون میده این درخواست قبلا ثبت شده و اگه دوباره زد و از 10 ثانیه گذشته باشه میزنه timeout . آدرس مثلا اینجوریه : http://192.168.1.1/webservice?data=5415435d90a48dcec4fef9eb
تمام فایل ها
Zelix KlassMaster برای Obfuscator کردن جاوا به کار میره
data پروژه جاواست که شامل APP_encryption میشه برنامه برای کد کردن و از کد در آوردن و MCrypt کلاس برای کد کردنه
data هم شامل آدرس ها میشه مثلا هر چیزی خواستید اضافه کنید اول کد کنید بعد.
ادرس است list.put("ip", "http://test.com/");url encryption پروژه اندروید استودیو
اینم اسم فایل وبسرویسون list.put("file", "webservice.php?");
اینم ادرسی که امتیاز سیو میشه حتما از تگ استفاده کنید مثل [dat] list.put("save_score", "action=save_score&user=[us]&pass=[ps]&score=[sc]&date=[dat]&key=71377499144");
اینم مال ادرسی که تاریخ و زمان ازش بگیرید list.put("get_time", "action=get_date&key=71377499144");
تگها اینجا به کار میرهsave_score = save_score.replace("[us]", "test");
save_score = save_score.replace("[ps]", "1234");
save_score = save_score.replace("[sc]", "200");
save_score = save_score.replace("[dat]", date);
برای ساختن فایل jar
بعد با Zelix KlassMaster فایل جار رو Obfuscator کنید بعد فایل جار رو به فولدر url encryption\app\libs انتقال بدید.
ســوال داشتیــد در خدمتـــم....
آخرین ویرایش به وسیله saeidpsl : جمعه 13 مرداد 1396 در 08:40 صبح
یه test بزنید
درود بر شما دوست خوبم که تا این اندازه به من یاری رسوندید و پیگیر بودید.
ای کاش همه افراد به کارشون همین اندازه علاقه داشته باشن.
میخوام یکم همدیگه رو به چالش بکشیم. هدفم سازندست. در واقع میخوام از طرح خودتون دفاع کنید.
شما فرض کن یه هکر اومده و اپلیکیشن ما رو مهندسی معکوس کرده و از تمام رمز و راز اون آگاه شده.
در واقع کد strtotimenow که از سمت سرور میاد توسط یه کلیدی که درون اپلیکیشن ما هست باز میشه.
این کلید رو توسط سی++ محافظت میکنیم.
اگه هکر از محتویات این فایل سی++ آگاه بشه و کلید ما رو به دست بیاره ، میتونه به راحتی strtotimenow اومده از سمت سرور رو باز کنه و داده خودش رو بفرسته به سرور.
چه راه حلی دارید ؟؟؟
هدف و ظرح شما عالیه.
کلید + لینک ها تو یه فایل ذخیره jar هستش که بعد با Zelix KlassMaster فایل جار رو Obfuscator مبهم میشه و داخل فولدر url encryption\app\libs قرار میگیره.
اینجور میشه کسی نمیتونه برشگردونه خعلی خعلی خعلی خعی خعلی سخته و کارش از سی++ هم بهتره.
البته با سی++ هم میشه انجام دارد.
strtotimenow هم هک کنه چیزهای دیگه رو چه جور پیدا میکنه با این روش کد شده لینک ایده که داری برای خودت میشه درست کنی strtotimenow یه روش هست.1000 روش دیگه هم هست
دوستان عزیز یه نظری بدید لطفا!
آخرین ویرایش به وسیله saeidpsl : شنبه 14 مرداد 1396 در 23:45 عصر
سلام
یه روشی سراغ دارم ولی تا حالا ازش استفاده نکردم.میشه در کنار اینها ازش استفاده کرد.شما میتونید امضای نرم افزار رو توی سرور ذخیره ش کنید.بعد سمت اندروید امضا رو به پارامترها اضافه کنید.سمت سرور هم امضای دریافتی رو با امضایی که سرور ذخیره شده رو چک میکنه.اگه مطابقت نداشت خطا بده.از طرفی میتونید اجرای کد php رو از طریق کتابخونه mobile detect محدود کنید طوری که کدهای شما فقط بتونه سمت موبایل اجرا بشه
Signature sig = context.getPackageManager().getPackageInfo(context.getPackageName(),PackageManager.GET_SIGNATURES).signatures[0];
این روش فقط از ریپلی اتک جلوگیری میکنه, شما فرض کن روش انکریپت و دیکریپت توسط چیتر به دست بیاد طرف دیگه حتی به اپ اندروید هم احتیاج نداره خودش میز میسازه و برای خودش امتیاز دلخواهاش رو به ثبت میرسونهدر اصل چه کار میکنه اول یه strtotime("now") کد شده رو از سرور میگیره بعد تو اندروید از کد بیرون میاد اون زمان رو همراه با داده ها کد میشه میفرسته به سرور و تو دیتابیس تو تیبل request اونstrtotimeو ایدی یور سیو میشه که اگه اون هکر لینک رو دوباره زد بزنه نشون میده این درخواست قبلا ثبت شده و اگه دوباره زد و از 10 ثانیه گذشته باشه میزنهtimeout. آدرس مثلا اینجوریه :b
عرض کردم به عنوان مثال! تعداد بازیکن اهمیتی نداره فقط امتیاز دهی و مشخس شدن برنده و پایان بازی باید توسط سرور انجام بشه نه کلاینت.دوست من ، بازی دو تنه نیست.
تنها یک تن بازی رو انجام میده و امتیاز کسب شده ارسال میشه به سرور.
همینک دیدگاهتون چیه؟ چه ترفندی به ذهنتون میرسه؟
هکر نمیتونه کتابخونه نوشته شده با ++c رو دیکامپایل کنه و احتیاجی هم نداره به این کار, فقط کافیه توابع و آرگومان هایی که توسط جاوا به کتابخونه ++c فرستاده میشن رو پیدا کنه در این صورت خودش میتونه از همین کتابخونه استفاده کنه!
برای اینکه منظور منو متوجه بشید براتون یک مثال کلی میزنم؛ فرض میکنیم بازی تخته نرد رو میخواهیم طوری بنویسیم که غیر قابل تقلب باشه, کلاینت درخواست شروع بازی رو به سرور ارسال میکنه, سرور شروع کننده بازی رو به صورت تصادفی مشخص میکنه و به کلاینت ها ارسال میکنه , بازی کنی که به عنوان شروع کننده بازی مشخص شده درخواست انداختن تاس میکنه سرور دو عدد تصادفی برای اون بازیکن ارسال میکنه و کلاینت فقط جای خونه هایی که میتونه حرکت کنه رو مشخص میکنه و به سرور اطلاع میده... یعنی در واقع در سمت سرور هم یک میز مجازی ساخته شده که سرور میدونه مهره های بازیکن ها تو چه موقعیتی قرار دارند و نوبت چه بازیکنی هست و چون از موقعیت مهره ها باخبره میدونه چه بازیکنی میتونه فقط چه حرکت هایی رو انجام بده و در آخر هم میتونه پایان بازی رو تشخیص بده و امتیاز رو برای برنده به ثبت برسونه
اگه امضای نرم افزار به سرور فرستاده نشه، باز هم برنامه هایی مثل لاکی پچر میتونن امضا برنامه من رو هک کنن و استفاده کنن ؟؟؟
mobile detect تا یه اندازه ای میشه گفت یاری میرسونه ، نمیشه گفت 100 درصد کار نمیکنه. اگه هکر بتونه از طریق کامپیوتر کاری کنه که سرور اون سیستم عامل رو اندروید بشناسه ، حرف شما کاملا درسته.
ولی اگه از طریق سیستم نشه داده فرستاد به سرور ، اونوقت حتما باید خروجی apk بگیره و رو گوشی تست کنه. میشه گفت تا حدی روند کار رو واسه هکر طولانی میکنه.
دیدگاهتون چیه دوستان ؟؟؟ درست میگم یا اشتباه میکنم ؟؟؟
من مثال زدم . از امنیت Zelix KlassMaster کاملا مطمئن هستم. شما از کجا میدونید که امنیت نداره ؟ حتی بانک صادرات هم داره ازش استفاده میکنه.
در کل امنیتی و جود نداره . اگه هکر حرفه ای باشه هیچ وقت خودشو درگیر برنامه اندروید نمیکنه مستقیم میره برا هک کردن خود سرور برنامه!
این رو ببینید: https://android-developers.googleblo...m-android.html
دقیقاً در همین مورد صحبت کرده که چطور در سمت Back-end اطمینان حاصل کنیم که درخواست از سمت App ما میاد و نه جای دیگه.
البته توجه کن که بالای همون بلاگ پست نوشته که API هایی که واسه اینکار استفاده میشن (که در اون پست توضیح داده) عوض شدن و باید از روش جدید استفاده کنید. پس حتمن از توضیحات لینک جدید استفاده کن.
مستقیماً آدرس لینک جدید رو ندادم چون تو اون بلاگ پست اطلاعات خوبی هست.
سلام به همه
یه روش جدید پیدا کردم
اونم اینه که داده هایی که خعلی مهمه سمت اندروید کد میشه بعد تو یک فایل تکس سیو میکنه بعد zipش میکنه و روش پسورد میزاره و به وب سرویس ارسال میکنه اونجا هم کار برعکس میشه زیپ رو از حالت فشرده بیرون میاد و فایل داده رو میخونه . تو بخش اندروید هم پسورد زیپ مبهم میشه به کمک Zelix KlassMaster یا هر برنامه دیگه.
دانلود
نظر یادتون نره!
آخرین ویرایش به وسیله saeidpsl : سه شنبه 24 مرداد 1396 در 15:58 عصر
با سلام خدمت همه یه کتابخونه پیدا کردم که حتی با برنامه Fiddler لینک ها پیدا نمبشه یعنی وقتی یه درخواست به وب سرویس ارسال میکنی یا برعکس لینک سایت حتی با اسنیف لینک دیده نمیشه !
compile 'com.loopj.android:android-async-http:1.4.9'
compile 'cz.msebera.android:httpclient:4.3.6'
RequestParams paramss = new RequestParams();
paramss.put("user", "saeid");
HttpRequest aa =new HttpRequest();
aa.get("http://192.168.1.10/json.php", paramss, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
try {
String str = IOUtils.toString(responseBody, "UTF-8");
Toast.makeText(getApplicationContext(),str, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
class HttpRequest {
public static AsyncHttpClient syncHttpClient= new SyncHttpClient();
public static AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
public static void setCookieStore(PersistentCookieStore cookieStore) {
getClient().setCookieStore(cookieStore);
}
public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
getClient().get(url, params, responseHandler);
}
public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
getClient().post(url, params, responseHandler);
}
private static AsyncHttpClient getClient()
{
if (Looper.myLooper() == null)
return syncHttpClient;
return asyncHttpClient;
}
}
آخرین ویرایش به وسیله saeidpsl : یک شنبه 05 شهریور 1396 در 23:36 عصر
فرض کنید سرور خانه شما است . در به سمت داخل باز میشود . باید در را از سمت داخل محافظت کرد نه از بیرون. درخواست از هر راهی و هر در و پنجره ایی میاد مهم اینه از داخل سیستم محکم باشد. شما نمیتوانید همه گوشی های موبایل را امن کنید اما میتوانید سیستم خود را امن کنید.
من پیشنهاد میکنم توکن در هنگام لاگین به اپ فرستاده شود و همه درخواستهای اپ با توکن باشد. سمت سرور هم توکن اعتبارسنجی شود و همینطور بعد از یک مدت غیر فعال بود توکن remove شود.
من از یک دیدگاه لاجیک نگاه کردم . شاید راهکارهای فنی متفاوت و یا حتی متضاد با نظر من باشد.
دنیای خیلی بدی شده بدون اسلحه بیرون نرید
سپاس از همه دوستان
اگر روش های دیگری هم دارید، خواهش میکنم راهنمایی کنید.
پاینده باشید