رفتن به مطلب

جلوگیری از کامپایل مجدد


امیرحسین قاسمی

ارسال‌های توصیه شده

سلام،

در این آموزش میخوام نحوه جلوگیری از کامپایل مجدد برنامه رو توضیح بدم.

ببینید یک سری نرم افزارهای معروفی وجود دارند که هر فردی با استفاده از اونها میتونه برنامه شما رو دیکامپایل کنه و حداقل فایل های Assets یا نام و پکیج نیم و نسخه رو ویرایش کنن، یا یکی از معضلاتی که همه ما باهاش سروکله میزنیم اینه که از بچه های 6،7 ساله تا پیرمردهای 80 ساله اسم خودشون رو هکر گذاشتن و با لاکی پچر و برنامه های مخرب مشابه تلاش می کنن پرداخت درون برنامه ای مارو هک کنن که البته خب مارکت ها api ارائه دادن و این مشکل تا حدودی حل شده ولی اگه بخوایم دیگه کاملا خیال مون راحت باشه می تونیم از این آموزش هم استفاده کنیم.

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

پس تا الان یک چیزی رو متوجه شدیم اگه کسی بخواد برنامه رو دستکاری کنه در نهایت امضای برنامه فرق می کنه. پس ما میتونیم داخل سورس برنامه بگیم هربار که کاربر وارد برنامه میشه بیا ببین آیا این امضا مال منه یا نه؟ اگه امضا مال من بود یعنی برنامه دست نخورده و ادامه بده اما اگه امضا مال من نبود یعنی حداقل این برنامه ما یکبار دستکاری شده پس کاربر رو از ادامه اجرای برنامه منع کن.

برای تشخیص کلید اول این Sub رو اضافه کنین:

Sub KeyDetection As String
	Try
	Dim jo As JavaObject
	jo.InitializeContext
	Dim signatures() As Object = jo.RunMethodJO("getPackageManager", Null).RunMethodJO("getPackageInfo", _
     Array (Application.PackageName, 0x00000040)).GetField("signatures")
	Dim sig As JavaObject = signatures(0)
	Dim md As MessageDigest
	Dim hash() As Byte = md.GetMessageDigest(sig.RunMethod("toByteArray", Null), "SHA-1")
	Dim bc As ByteConverter
	Dim raw As String = bc.HexFromBytes(hash)
	Dim sb As StringBuilder
	sb.Initialize
	For i = 0 To raw.Length - 2 Step 2
		sb.Append(raw.CharAt(i)).Append(raw.CharAt(i + 1)).Append(":")
	Next
	sb.Remove(sb.Length - 1, sb.Length)
	Return sb.ToString
	Catch
	Return "Null"	
	End Try	
End Sub

اول در اکتویتی کریت این کد رو اضافه کنین.

Log(KeyDetection)

برنامه رو یک مرتبه اجرا کنید در پنجره Log خود b4a یک رشته چاپ میشه اونو کپی کنید و سپس این کد بالا رو دیگه نیازی نداریم و حذفش کنین.

If رشته چاپ شده=KeyDetection then
ToastMessageShow("مجاز",False)
Else
ToastMessageShow("مجاز نیست",False)
End If

:53::53::53::53::53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

مطلب مفیدی و راه کار زیرکانه ای بود👍

ی سوال

این روش برای جلوگیری از اجرای برنامه پچ شده هم جواب میده؟ مثل لاکی پچر اگه اسمشا اشتباه نکفته باشم؟ این برنامه ها کلید و اسم پکیج  تغیییر میدن؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۰/۶/۳۱ در ۲۲:۳۴، DexterFstone گفته است:

مطلب مفیدی و راه کار زیرکانه ای بود👍

ی سوال

این روش برای جلوگیری از اجرای برنامه پچ شده هم جواب میده؟ مثل لاکی پچر اگه اسمشا اشتباه نکفته باشم؟ این برنامه ها کلید و اسم پکیج  تغیییر میدن؟

بله، کلا کوچیکترین تغییر توی برنامه با هر ابزاری انجام بشه امضاش میشکنه و به این روش تشخیص میدیم.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

spacer.png

این روش جلوی اپلیکیشن های کلون ساز یا برنامه هایی مثل اپک ادیتور رو میگیره 

اما این کد کارکردی برای دستگاه های که به شکل پیش فرض از قابلیت ایجاد کلون یا نسخه دوم پشتیبانی میکنن نداره

روشی برای محدود کردن نسخه های دوم یا بیشتر برای این دستگاه ها وجود داره ؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۰/۶/۳۱ در 15:47، امیرحسین قاسمی گفته است:

سلام،

در این آموزش میخوام نحوه جلوگیری از کامپایل مجدد برنامه رو توضیح بدم.

ببینید یک سری نرم افزارهای معروفی وجود دارند که هر فردی با استفاده از اونها میتونه برنامه شما رو دیکامپایل کنه و حداقل فایل های Assets یا نام و پکیج نیم و نسخه رو ویرایش کنن، یا یکی از معضلاتی که همه ما باهاش سروکله میزنیم اینه که از بچه های 6،7 ساله تا پیرمردهای 80 ساله اسم خودشون رو هکر گذاشتن و با لاکی پچر و برنامه های مخرب مشابه تلاش می کنن پرداخت درون برنامه ای مارو هک کنن که البته خب مارکت ها api ارائه دادن و این مشکل تا حدودی حل شده ولی اگه بخوایم دیگه کاملا خیال مون راحت باشه می تونیم از این آموزش هم استفاده کنیم.

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

پس تا الان یک چیزی رو متوجه شدیم اگه کسی بخواد برنامه رو دستکاری کنه در نهایت امضای برنامه فرق می کنه. پس ما میتونیم داخل سورس برنامه بگیم هربار که کاربر وارد برنامه میشه بیا ببین آیا این امضا مال منه یا نه؟ اگه امضا مال من بود یعنی برنامه دست نخورده و ادامه بده اما اگه امضا مال من نبود یعنی حداقل این برنامه ما یکبار دستکاری شده پس کاربر رو از ادامه اجرای برنامه منع کن.

برای تشخیص کلید اول این Sub رو اضافه کنین:

Sub KeyDetection As String
	Try
	Dim jo As JavaObject
	jo.InitializeContext
	Dim signatures() As Object = jo.RunMethodJO("getPackageManager", Null).RunMethodJO("getPackageInfo", _
     Array (Application.PackageName, 0x00000040)).GetField("signatures")
	Dim sig As JavaObject = signatures(0)
	Dim md As MessageDigest
	Dim hash() As Byte = md.GetMessageDigest(sig.RunMethod("toByteArray", Null), "SHA-1")
	Dim bc As ByteConverter
	Dim raw As String = bc.HexFromBytes(hash)
	Dim sb As StringBuilder
	sb.Initialize
	For i = 0 To raw.Length - 2 Step 2
		sb.Append(raw.CharAt(i)).Append(raw.CharAt(i + 1)).Append(":")
	Next
	sb.Remove(sb.Length - 1, sb.Length)
	Return sb.ToString
	Catch
	Return "Null"	
	End Try	
End Sub

اول در اکتویتی کریت این کد رو اضافه کنین.

Log(KeyDetection)

برنامه رو یک مرتبه اجرا کنید در پنجره Log خود b4a یک رشته چاپ میشه اونو کپی کنید و سپس این کد بالا رو دیگه نیازی نداریم و حذفش کنین.

If رشته چاپ شده=KeyDetection then
ToastMessageShow("مجاز",False)
Else
ToastMessageShow("مجاز نیست",False)
End If

:53::53::53::53::53:

مرسی از آموزش خوبتون 

میشه با پکیج نیم هم این تغییر رو بررسی کرد که اگز تغییر یافته بود برنامه اجرا نشه ک البته کار کردن با امضا بهتره 

در ۱۴۰۰/۷/۱ در 21:47، Soheil_Miresmaili گفته است:

spacer.png

این روش جلوی اپلیکیشن های کلون ساز یا برنامه هایی مثل اپک ادیتور رو میگیره 

اما این کد کارکردی برای دستگاه های که به شکل پیش فرض از قابلیت ایجاد کلون یا نسخه دوم پشتیبانی میکنن نداره

روشی برای محدود کردن نسخه های دوم یا بیشتر برای این دستگاه ها وجود داره ؟

 

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

اگر در روش کلون خود سیستم عامل اسم برنامه تغییر می کنه می تونیید اسم هم به صورت پکیج نیم ران تایم بررسی کنید که اگر تغییر یافته بود خروج کنه 

 

(ولی این کار ها ممکنه باگ های مخفی داشته باشه ک داخل بعضی از سیستم عامل ها موجب اشتباه بشه مثلا اسم اگر به دو زبان انگلیسی و فارسی باشه اگر فارسی رو با نام ران تایم بررسی کنید باعث نتیجه اشتباه میشه )

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 1 ماه بعد...

با برنامه MultiSpace کار نمیکنه و کاربر میتونه دوباره از برنامه کپی بگیره

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...