某ar特效app如何繞過下載限制

在appStore看到一個AR特效的app,爲人臉增長各類華麗特效。現分享下效果:安全


帶皇冠的皮膚須要訂閱以後才能使用。bash


咱們如今從逆向的角度,繞過限制,下載想要的皮膚。服務器

運行app,點擊一個戴皇冠的皮膚,跳轉到訂閱頁面。app


使用Reveal工具查看當前界面,以下圖,看到當前控制器名稱是 PremiumViewController。工具



在IDA中搜索這個類名,這個類對應的方法中,咱們能夠嘗試猜想一下哪些方法是判斷是否訂閱相關的。通常方法名中帶「is」、「check」和「vip」的會是重點排查對象。咱們在看「checkPremiumStatus」方法的僞代碼時,發現一些信息:ui

void __cdecl -[PremiumViewController checkPremiumStatus](PremiumViewController *self, SEL a2)
{
  v2 = self;
  v3 = +[IAPManager sharedManager](&OBJC_CLASS___IAPManager, "sharedManager");
  v4 = (void *)objc_retainAutoreleasedReturnValue(v3);
  v5 = (unsigned __int64)objc_msgSend(v4, "isUserPremium");
  objc_release(v4);
  if ( v5 )
  {
    v6 = objc_msgSend(&OBJC_CLASS___NSNotificationCenter, "defaultCenter");
    v7 = (void *)objc_retainAutoreleasedReturnValue(v6);
    objc_msgSend(v7, "removeObserver:", v2);
    objc_release(v7);
    if ( (unsigned int)-[PremiumViewController isLos](v2, "isLos") )
    {
      v8 = objc_msgSend(&OBJC_CLASS___FaceFiltersViewController, "alloc");
      v9 = objc_msgSend(v8, "initWithNibName:bundle:", CFSTR("FaceFiltersViewController"), 0LL);
      v10 = objc_msgSend(v2, "navigationController");
      v11 = (void *)objc_retainAutoreleasedReturnValue(v10);
      v19 = v9;
      v12 = objc_msgSend(&OBJC_CLASS___NSArray, "arrayWithObjects:count:", &v19, 1LL);
      v13 = objc_retainAutoreleasedReturnValue(v12);
      objc_msgSend(v11, "setViewControllers:animated:", v13, 1LL);
      objc_release(v13);
      objc_release(v11);
      objc_release(v9);
    }
    else
    {
      v14 = _NSConcreteStackBlock;
      v15 = 3254779904LL;
      v16 = sub_100062A40;
      v17 = &unk_102089E10;
      v18 = v2;
      objc_msgSend(v2, "dismissViewControllerAnimated:completion:", 1LL, &v14);
    }
  }
}
複製代碼

咱們猜想 IAPManager 類的 isUserPremium 方法可能有關,這個方法返回一個BOOL值,並做爲 if 語句的判斷條件。spa



下面直接寫代碼,hook這個 isUserPremium 方法,並讓 isUserPremium 方法返回一個YES。3d

%hook IAPManager-(BOOL)isUserPremium{    BOOL r = %orig;    NSLog(@"IAPManager--isUserPremium = (%d)",r);    return YES;}%end複製代碼

注入動態庫到手機,並從新運行app,成功繞過限制。code


總結

不少app的訂閱只作了APP本地限制,比較簡單。一旦找到判斷條件,就能輕鬆繞過。cdn

若是服務器增長一層邏輯判斷,只容許已訂閱用戶下載對應的資源文件,可提升安全性。

能夠動手本身嘗試一下如何繞過限制。app地址:http://t.cn/E9lJZ5y


關注公衆號:逆向APP

相關文章
相關標籤/搜索