某ar特效app如何绕过下载限制

665 阅读2分钟

在appStore看到一个AR特效的app,为人脸增加各种华丽特效。现分享下效果:


带皇冠的皮肤需要订阅之后才能使用。


我们现在从逆向的角度,绕过限制,下载想要的皮肤。

运行app,点击一个戴皇冠的皮肤,跳转到订阅页面。


使用Reveal工具查看当前界面,如下图,看到当前控制器名称是 PremiumViewController。



在IDA中搜索这个类名,这个类对应的方法中,我们可以尝试猜测一下哪些方法是判断是否订阅相关的。一般方法名中带“is”、“check”和“vip”的会是重点排查对象。我们在看“checkPremiumStatus”方法的伪代码时,发现一些信息:

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 语句的判断条件。



下面直接写代码,hook这个 isUserPremium 方法,并让 isUserPremium 方法返回一个YES。

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

注入动态库到手机,并重新运行app,成功绕过限制。


总结

很多app的订阅只做了APP本地限制,比较简单。一旦找到判断条件,就能轻松绕过。

如果服务器增加一层逻辑判断,只允许已订阅用户下载对应的资源文件,可提高安全性。

可以动手自己尝试一下如何绕过限制。app地址:http://t.cn/E9lJZ5y


关注公众号:逆向APP