جلوگیری از هک پرداخت درون برنامه ای مایکت در B4A

با سلام خدمت کاربران عزیز سایت یاهو ۹۸ YAHOO

امروز با آموزشی دیگر در خدمتتون هستیم.

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

همانطوری که احتمالا میدانید، پرداخت درون برنامه ای توسط یک سری برنامه های مخرب به راحتی و در سریع ترین حالت ممکن جعل می شود و کاربر بدون پرداخت حتی یک ریال میتواند پرداخت درون برنامه ای را دور بزند و از محصولات درون برنامه ای شما بصورت رایگان استفاده کند.

چنین فرایندی آنقدر راحت است که حتی یک کودک ۷ ساله هم میتواند چنین عملیاتی را انجام دهد.

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

به همین دلیل مایکت با ارائه یک api از جعل پرداخت درون برنامه ای جلوگیری می کند و امنیت پرداخت درون برنامه ای با استفاده از این سرویس به ۱۰۰% می رسد.

حال به آموزش استفاده از سرویس جلوگیری از جعل پرداخت درون برنامه ای مایکت می پردازم:

ابتدا باید یک هاست داشته باشید.(اگر هاست ندارید میتوانید یک هاست اشتراکی لینوکس تهیه کنید)

سپس باید کدهای php زیر را در نوت پد پلاس پلاس بنویسید:

<?php
$Access_Token =""; //توکن دسترسی را از مایکت دریافت و اینجا وارد کنید

$packagename = $_GET["packagename"]; //گرفتن پکیج نیم در لینک
$token=$_GET["token"]; //گرفتن توکن خرید داده شده از طرف مایکت
$productid=$_GET["productid"]; //گرفتن شناسه محصول
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"X-Access-Token:$Access_Token."\r\n" // ست کردن توکن دسترسی در هدر
  )
);

$context = stream_context_create($opts);
        //تابع زیر اعداد فارسی را به انگلیسی تبدیل می کند
	    function fa_digits($text){
        $persian_digits = array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹');
        $english_digits = array('0','1','2','3','4','5','6','7','8','9');
        $text = str_replace($persian_digits, $english_digits, $text);
        return $text;
    }


try{
$token_En=fa_digits($token);
}
catch(Exception $e) {
   $token_En=$token;
}

//ارسال درخواست به سرور مایکت برای چک خرید
$file = file_get_contents("https://developer.myket.ir/api/applications/".$packagename."/purchases/products/".$productid."/tokens/".$token_En, false, $context);
$js=json_decode($file);
if($js->purchaseState==0){
    echo "Allowed"; //خرید واقعی است
} else echo ""; //جعل در خرید

?>

 

فقط تنها کاری که لازم است در ویرایش کدهای php بالا کنید این است که متغیر $Access_Token را برابر با توکن دسترسی قرار دهید.

Untitled.png (1023×604)

رای گرفتن توکن دسترسی به پنل توسعه دهندگی خود در مایکت مراجعه کنید و از منوی یک برنامه گزینه “درون برنامه”را انتخاب کنید. سپس از بالای صفحه دکمه “توکن صحت سنجی” را بزنید تا با تصویری مشابه تصویر بالا روبه رو شوید. حال توکن صحت سنجی را کپی و در متغیر Access_Token بریزید.

فایل حاوی کدهای php را با پسوند “php.” ذخیره کنید و در هاست خود آپلود کنید.

توجه داشته باشید از این فایل میتوانید برای هر برنامه ای استفاده کنید و مختص یک برنامه نخواهد بود.

کارمون با بخش هاست و سرور تموم شد.

حالا باید یک سری کارهارو هم در خود B4A انجام بدیم.

ببینید برای اینکه ما به این فایل php درخواستی ارسال کنیم باید یک لینک داشته باشیم و داخل لینک هم باید سه پارامتر قرار دهیم که عبارت اند از: پکیج نیم برنامه، شناسه محصول و توکن خرید یونیک

کتابخونه پیشفرض درون پرداخت مایکت متاسفانه توکن خرید رو بعد از خرید بر نمی گردونه که به سرور بفرستیم، پس من یک کتابخونه ادیت شده رو در انتها قرار میدم. اونو دانلود کنید و در پوشه librarys بریزید و از اون استفاده کنید.(با کتابخونه خود مایکت هیچ فرقی نداره فقط امکان برگردوندن توکن خرید بهش اضافه شده)

توجه داشته باشید در این تاپیک بنده آموزش پرداخت درون برنامه ای مایکت رو قرار نمیدم و هدف فقط امن کردن پرداخت درون برنامه ای هست. اگر با فرایند پرداخت درون برنامه ای مایکت آشنا نیستید میتوانید سورس آن را از سایت کافه توسعه دریافت کنید و سپس با این آموزش پیش بروید.

ابتدا کتابخونه های Httputils2 و MyketIAP باید فعال باشند.

یک ساب ایجاد کنید تا فرایند چک صحت خرید را بر عهده داشته باشد. بدین شکل:

 

Wait For (j) JobDone(j As HttpJob)
	If j.JobName="checker" Then
	If j.Success Then
		If j.GetString="Allowed" Then
		ToastMessageShow("برنامه خریده شد",True)
        ProgressDialogHide
		Else
		ToastMessageShow("برای هک برنامه تلاش نکنید",True)	
		ProgressDialogHide
		End If
	End If
	End If
	j.Release
End Sub

 

در تابع بالا یک لینکی به شکل زیر وجود دارد:

 

http://MYDomain.ir/myket_billing.php?token="&tok&"&productid="&id&"&packagename="&Application.PackageName

 

لطفا نام دامین و نام فایل php خود را در لینک بالا قرار دهید.

همانگونه که احتمالا میدانید نتیجه خرید در مایکت به ساب BillingManager_PurchaseCompleted بر میگردد. بنابر EventName که در هنگام initialize کتابخانه تعیین می شود ممکن است BillingManager فرق داشته باشد. پس در این ساب، تابع بالا باید صدا زده شود.

 

Sub BillingManager_PurchaseCompleted(Success As Boolean, Product As Purchase)
	If Success=True Then
		ProgressDialogShow2("در حال چک صحت خرید...",False)
		check_billing(Product.getToken,Product.ProductId)
		End If
End Sub

 

نابراین ما توانستیم با کمی تلاش دست مهاجمان را کوتاه کنیم تا نتوانند زحمات ما را ضایع کنند.

و اما نکته آخر: گاهی پس از خرید ممکن است یک فایل TXT ذخیره کنید برای اینکه هربار چک کنید آیا قبلا محصول خریده شده است یا نه!

حدالامکان از روش های استاندارد برای این کار استفاده کنید و حتی اگر از ایجاد فایل TXT استفاده می کنید همه چیز را رمزنگاری کرده و آن را در مکان های ناامن که ممکن است کاربر دسترسی داشته باشد(مثل dirrootexternal) ذخیره نکنید. چون حتی اگر از Api مایکت برای جلوگیری از جعل پرداخت درون برنامه ای استفاده کرده باشید ممکن است مهاجم برنامه شما را دیکامپایل کرده و مسیر ذخیره فایل TXT پس از خرید را تشخیص داده و یک فایل TXT در مسیر تعیین شده ایجاد کند و برنامه به اشتباه وجود آن فایل TXT را دلیلی بر خرید کاربر ببیند و محصول تحویل مهاجم داده شود.

کتابخانه اصلاحی پرداخت درون برنامه ای مایکت: دانلود

هزینه استفاده از این مطلب آموزشی: پنج صلوات

امیدوارم استفاده لازم را برده باشید.

در پناه حق، موفق باشید.

دیدگاهتان را بنویسید