امیرحسین قاسمی 610 ارسال شده در 10 تیر، ۱۴۰۰ اشتراک گذاری ارسال شده در 10 تیر، ۱۴۰۰ سلام، همانطوری که احتمالا میدانید، پرداخت درون برنامه ای توسط یک سری برنامه های مخرب به راحتی و در سریع ترین حالت ممکن جعل می شود و کاربر بدون پرداخت حتی یک ریال میتواند پرداخت درون برنامه ای را دور بزند و از محصولات درون برنامه ای شما بصورت رایگان استفاده کند. چنین فرایندی آنقدر راحت است که حتی یک کودک 7 ساله هم میتواند چنین عملیاتی را انجام دهد. برخی از هکرهای کلاه سیاه حتی میتوانند پا را از این فراتر گذاشته و نسخه مود برنامه ای که برایش شاید ماه ها زحمت کشیده اید در اینترنت قرار دهند. به همین دلیل مایکت با ارائه یک api از جعل پرداخت درون برنامه ای جلوگیری می کند و امنیت پرداخت درون برنامه ای با استفاده از این سرویس به 100% می رسد. حال به آموزش استفاده از سرویس جلوگیری از جعل پرداخت درون برنامه ای مایکت می پردازم: ابتدا باید یک هاست داشته باشید.(اگر هاست ندارید میتوانید یک هاست اشتراکی لینوکس تهیه کنید) سپس باید کدهای 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 را برابر با توکن دسترسی قرار دهید. برای گرفتن توکن دسترسی به پنل توسعه دهندگی خود در مایکت مراجعه کنید و از منوی یک برنامه گزینه "درون برنامه"را انتخاب کنید. سپس از بالای صفحه دکمه "توکن صحت سنجی" را بزنید تا با تصویری مشابه تصویر بالا روبه رو شوید. حال توکن صحت سنجی را کپی و در متغیر Access_Token بریزید. فایل حاوی کدهای php را با پسوند "php." ذخیره کنید و در هاست خود آپلود کنید. توجه داشته باشید از این فایل میتوانید برای هر برنامه ای استفاده کنید و مختص یک برنامه نخواهد بود. کارمون با بخش هاست و سرور تموم شد. حالا باید یک سری کارهارو هم در خود B4A انجام بدیم. ببینید برای اینکه ما به این فایل php درخواستی ارسال کنیم باید یک لینک داشته باشیم و داخل لینک هم باید سه پارامتر قرار دهیم که عبارت اند از: پکیج نیم برنامه، شناسه محصول و توکن خرید یونیک کتابخونه پیشفرض درون پرداخت مایکت متاسفانه توکن خرید رو بعد از خرید بر نمی گردونه که به سرور بفرستیم، پس من یک کتابخونه ادیت شده رو در انتها قرار میدم. اونو دانلود کنید و در پوشه librarys بریزید و از اون استفاده کنید.(با کتابخونه خود مایکت هیچ فرقی نداره فقط امکان برگردوندن توکن خرید بهش اضافه شده) توجه داشته باشید در این تاپیک بنده آموزش پرداخت درون برنامه ای مایکت رو قرار نمیدم و هدف فقط امن کردن پرداخت درون برنامه ای هست. اگر با فرایند پرداخت درون برنامه ای مایکت آشنا نیستید میتوانید سورس آن را از سایت کافه توسعه دریافت کنید و سپس با این آموزش پیش بروید. ابتدا کتابخونه های Httputils2 و MyketIAP باید فعال باشند. یک ساب ایجاد کنید تا فرایند چک صحت خرید را بر عهده داشته باشد. بدین شکل: Sub check_billing(tok As String,id As String) Private checker As HttpJob checker.Initialize("checker",Me) checker.Download("http://MYDomain.ir/myket_billing.php?token="&tok&"&productid="&id&"&packagename="&Application.PackageName) End If 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 را دلیلی بر خرید کاربر ببیند و محصول تحویل مهاجم داده شود. کتابخانه اصلاحی پرداخت درون برنامه ای مایکت: دانلود هزینه استفاده از این مطلب آموزشی: پنج صلوات امیدوارم استفاده لازم را برده باشید. در پناه حق، موفق باشید لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
Seyedhamidreza Seyedalikhani 1 ارسال شده در 14 مرداد، ۱۴۰۰ اشتراک گذاری ارسال شده در 14 مرداد، ۱۴۰۰ درود بر شما راست خیلی دنبال این آموزش بودم،و صمیمانه از شما تشکر می کنم سوالی که دارم اینه،این فرایند صحت سنجی ،چقدر زمان می بره(یعنی کاربر چقدر باید منتظر بمانه تا خرید انجام بشه)؟یا فرق زمانی در روند پرداخت درون برنامه ای ایجاد نمی کنه؟ و آیا برای صحت سنجی حتما به هاست نیاز داریم؟و اون هاست اگر پس از یه مدت غیرفعال شد تکلیف چیه! درکل راهی هست که از این بابت هاست خیالمون راحت باشه که از بین نمیره؟ و آیا پرداخت درون برنامه ای کافه بازار به وسیله پلاگین باباردور رو مشاهده کرده اید؟ لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
امیرحسین قاسمی 610 ارسال شده در 16 مرداد، ۱۴۰۰ سازنده اشتراک گذاری ارسال شده در 16 مرداد، ۱۴۰۰ در ۱۴۰۰/۵/۱۴ در 23:00، Seyedhamidreza Seyedalikhani گفته است: درود بر شما راست خیلی دنبال این آموزش بودم،و صمیمانه از شما تشکر می کنم سوالی که دارم اینه،این فرایند صحت سنجی ،چقدر زمان می بره(یعنی کاربر چقدر باید منتظر بمانه تا خرید انجام بشه)؟یا فرق زمانی در روند پرداخت درون برنامه ای ایجاد نمی کنه؟ و آیا برای صحت سنجی حتما به هاست نیاز داریم؟و اون هاست اگر پس از یه مدت غیرفعال شد تکلیف چیه! درکل راهی هست که از این بابت هاست خیالمون راحت باشه که از بین نمیره؟ و آیا پرداخت درون برنامه ای کافه بازار به وسیله پلاگین باباردور رو مشاهده کرده اید؟ سلام، فرایند صحت سنجی به سرعت اینترنت کاربر بستگی داره. من خودم تست کردم بین 1 الی 2 ثانیه زمان برد. به طور کلی زمان میبره ولی خیلی کمه. به هرحال باید درخواست ارسال بشه از اونجا به سرور مایکت ریکوئست زده بشه و مایکت جوابو برگردونه چند ثانیه طول می کشه. فکر کنم بتونین با کتابخونه httpjob هدر رو ست کنید و بدون هاست به سرور مایکت ریکوئست بزنین اما مطمئن نیستم و امتحان نکردم جواب میده یا نه. پیشنهاد می کنم از همون هاست استفاده کنین، چون حتی این مورد جواب هم بده از سمت کلاینت ریکوئست بزنین یه خورده باز میتونه امنیت رو بیاره پایین بهتره کارها تو سمت سرور انجام بشه و فقط جواب رو برگردونه به برنامه. شما اولا نباید بزارید هاست تون غیرفعال بشه. هزینه هاست اونقدری سنگین نیست که بخاطرش بزارین برنامه تون از کار بیفته. اگه با همین روال و آموزش من پیش برین و هاست تون غیرفعال بشه progressbar همچنان میچرخه و hide نمیشه، اما میتونین خودتون با کمی ویرایش کدها و خلاقیت تعریف کنید که اگه ارتباط با سرور برقرار نشد محصول همینجوری بدون چک اعتبار به کاربر تحویل داده بشه.(قطعا عدم برقراری ارتباط به خاطر آفلاین بودن کاربر نخواهد بود چون کاربر یک وجهی رو پرداخت کرده و آنلاینه مگه اینکه بخواد هک کنه و آفلاین باشه) پلاگین باباردو هم اشتباه نکنم برای یونیتی هستش و در حوزه تخصصی من نیست. موفق باشید لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
اندرویدستان 90 ارسال شده در 17 مرداد، ۱۴۰۰ اشتراک گذاری ارسال شده در 17 مرداد، ۱۴۰۰ در ۱۴۰۰/۴/۱۰ در ۱۲:۳۲، امیرحسین قاسمی گفته است: سلام، همانطوری که احتمالا میدانید، پرداخت درون برنامه ای توسط یک سری برنامه های مخرب به راحتی و در سریع ترین حالت ممکن جعل می شود و کاربر بدون پرداخت حتی یک ریال میتواند پرداخت درون برنامه ای را دور بزند و از محصولات درون برنامه ای شما بصورت رایگان استفاده کند. چنین فرایندی آنقدر راحت است که حتی یک کودک 7 ساله هم میتواند چنین عملیاتی را انجام دهد. برخی از هکرهای کلاه سیاه حتی میتوانند پا را از این فراتر گذاشته و نسخه مود برنامه ای که برایش شاید ماه ها زحمت کشیده اید در اینترنت قرار دهند. به همین دلیل مایکت با ارائه یک api از جعل پرداخت درون برنامه ای جلوگیری می کند و امنیت پرداخت درون برنامه ای با استفاده از این سرویس به 100% می رسد. حال به آموزش استفاده از سرویس جلوگیری از جعل پرداخت درون برنامه ای مایکت می پردازم: ابتدا باید یک هاست داشته باشید.(اگر هاست ندارید میتوانید یک هاست اشتراکی لینوکس تهیه کنید) سپس باید کدهای 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 را برابر با توکن دسترسی قرار دهید. برای گرفتن توکن دسترسی به پنل توسعه دهندگی خود در مایکت مراجعه کنید و از منوی یک برنامه گزینه "درون برنامه"را انتخاب کنید. سپس از بالای صفحه دکمه "توکن صحت سنجی" را بزنید تا با تصویری مشابه تصویر بالا روبه رو شوید. حال توکن صحت سنجی را کپی و در متغیر Access_Token بریزید. فایل حاوی کدهای php را با پسوند "php." ذخیره کنید و در هاست خود آپلود کنید. توجه داشته باشید از این فایل میتوانید برای هر برنامه ای استفاده کنید و مختص یک برنامه نخواهد بود. کارمون با بخش هاست و سرور تموم شد. حالا باید یک سری کارهارو هم در خود B4A انجام بدیم. ببینید برای اینکه ما به این فایل php درخواستی ارسال کنیم باید یک لینک داشته باشیم و داخل لینک هم باید سه پارامتر قرار دهیم که عبارت اند از: پکیج نیم برنامه، شناسه محصول و توکن خرید یونیک کتابخونه پیشفرض درون پرداخت مایکت متاسفانه توکن خرید رو بعد از خرید بر نمی گردونه که به سرور بفرستیم، پس من یک کتابخونه ادیت شده رو در انتها قرار میدم. اونو دانلود کنید و در پوشه librarys بریزید و از اون استفاده کنید.(با کتابخونه خود مایکت هیچ فرقی نداره فقط امکان برگردوندن توکن خرید بهش اضافه شده) توجه داشته باشید در این تاپیک بنده آموزش پرداخت درون برنامه ای مایکت رو قرار نمیدم و هدف فقط امن کردن پرداخت درون برنامه ای هست. اگر با فرایند پرداخت درون برنامه ای مایکت آشنا نیستید میتوانید سورس آن را از سایت کافه توسعه دریافت کنید و سپس با این آموزش پیش بروید. ابتدا کتابخونه های Httputils2 و MyketIAP باید فعال باشند. یک ساب ایجاد کنید تا فرایند چک صحت خرید را بر عهده داشته باشد. بدین شکل: Sub check_billing(tok As String,id As String) Private checker As HttpJob checker.Initialize("checker",Me) checker.Download("http://MYDomain.ir/myket_billing.php?token="&tok&"&productid="&id&"&packagename="&Application.PackageName) End If 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 را دلیلی بر خرید کاربر ببیند و محصول تحویل مهاجم داده شود. کتابخانه اصلاحی پرداخت درون برنامه ای مایکت: دانلود هزینه استفاده از این مطلب آموزشی: پنج صلوات امیدوارم استفاده لازم را برده باشید. در پناه حق، موفق باشید پنج تا صلوات رو فرستادم ممنون لینک ارسال به اشتراک گذاری در سایت های دیگر تنظیمات بیشتر اشتراک گذاری ...
ارسالهای توصیه شده
بایگانی شده
این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.