با سلام خدمت دوستان عزیز
در این آموزش ما میاییم SHA1 امضای برنامه رو میگیریم که برای هر برنامه ای لازم است .
شخیص امضای دیجیتال برنامه به طور معمول، بعد از انجام مهندسی معکوس، امضای برنامه میشکند و به راحتی میتوان این موضوع را تشخیص داد؛ به همین دلیل، لازم است که در سمت سرور، قبل از ارائه محتوا، اطمینان حاصل شود که درخواست از نسخه اصلی برنامه انجام شده است. برای این منظور، ابتدا تابع زیر را به برنامه خود اضافه کنید:
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
برای به دست آوردن رشته منحصر به فرد امضای برنامه، لطفا این کد را به بخش Activity_Create اضافه کرده و یک بار برنامه را با امضای خود اجرا کنید:
Log(KeyDetection)
به منظور افزایش امنیت، باید توجه داشت که رشتهای که از کد فوق به دست آوردهاید را به صورت مستقیم در سورس کد قرار ندهید. به جای آن، این رشته را در سرور قرار داده و با انجام هر درخواست، رشتهای که از تابع KeyDetection برمیگردد را به صورت رمزنگاری شده به سرور ارسال کنید و سپس آن را با رشته منحصر به فرد کلید خود مقایسه کنید. اگر این دو رشته با یکدیگر برابر بودند، به این معنی است که درخواست از نسخه اصلی برنامه شما آمده است. اما اگر برابر نبودند، نشان میدهد که برنامه شما دیکامپایل و مجدداً کامپایل شده است و باید از ارسال محتوا از سمت سرور به سمت کلاینت ممانعت شود.
در این سورس از 3 کتابخانه زیر استفاده شده است :
JavaObject MessageDigest ByteConverter
متد MessageDigest زیر مجوعه کتابخانه Encryption می باشد .