范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

iOS逆向之人脸识别绕过

  达到目的的手段有很多种,也许存在优劣之分,我只是选择了其中一种我认为好玩的方式。人脸识别校验状态存储在服务端,因此即使通过该种方法绕过客户端人脸识别,由于并未获得合法session,因此无任何危害,仅做为IOS逆向学习思路。0×01 准备
  本文所使用环境:
  越狱IOS手机1个(本文所用为12.4.4)
  appstore下载的app一个:
  登录时存在人脸识别:
  0×02 脱壳
  apple在上架应用时,appstore会为上架的app加一层壳。在加壳状态下进行分析极为困难。但该层壳较为简单,可以通过各种自动化工具进行脱壳。如Clutch,CrackerXI+等。 Clutch -i #查看包名 Clutch -d 包名  #脱壳
  因为本文所用IOS版本为12.4.4,Clutch存在兼容性问题,故使用CrackerXI+进行脱壳,脱出未加壳版本:
  在CrackerXI+中选择该app脱壳后:
  把未加壳的ipa包下载到本地:
  0×03 破解
  ipa实际上是个压缩包,可以直接通过压缩软件打开,解压其中的二进制文件:
  用ida反编译ios中的二进制文件
  分析代码后发现:XXXXBaseViewController loginSuccessIsNeedBind:WithInfo:
  是登录后,人脸识别的函数,伪代码: void __cdecl -[XXXXAPPBaseViewController loginSuccessIsNeedBind:WithInfo:](XXXXAPPBaseViewController *self, SEL a2, bool a3, id a4) {  BOOL v4; // w22  XXXXAPPBaseViewController *v5; // x21  __int64 v6; // x19  void *v7; // x0  void *v8; // x0  void *v9; // x23  void *v10; // x0  void *v11; // x20  XXXXAPPLoginHelper *v12; // x0  void *v13; // x23  __int64 v14; // x1  __int64 v15; // x1  __int64 v16; // x0  struct objc_object *v17; // x0  void *v18; // x0  void *v19; // x22  void *v20; // x0  void *v21; // x23  int v22; // w24  void *v23; // x0  void *v24; // x0  __int64 v25; // x22  void *v26; // x0  __int64 v27; // x23  const char *v28; // x1  void **v29; // [xsp+0h] [xbp-70h]  __int64 v30; // [xsp+8h] [xbp-68h]  __int64 (__fastcall *v31)(); // [xsp+10h] [xbp-60h]  void *v32; // [xsp+18h] [xbp-58h]  XXXXAPPBaseViewController *v33; // [xsp+20h] [xbp-50h]  __int64 v34; // [xsp+28h] [xbp-48h]  __int64 v35; // [xsp+30h] [xbp-40h]  bool v36; // [xsp+38h] [xbp-38h]  v4 = a3;//赋值v4  v5 = self;  v6 = objc_retain(a4, a2);  v7 = objc_msgSend(&OBJC_CLASS___UIApplication, "sharedApplication");  v8 = (void *)objc_retainAutoreleasedReturnValue(v7);  v9 = v8;  v10 = objc_msgSend(v8, "delegate");  v11 = (void *)objc_retainAutoreleasedReturnValue(v10);  objc_release(v9);  if ( (unsigned int)-[XXXXAPPBaseViewController needInputIDCardInfomation:](v5, "needInputIDCardInfomation:", v6) ) {    +[PCUtil setObject:forKey:](&OBJC_CLASS___PCUtil, "setObject:forKey:", CFSTR("1"), CFSTR("maybeNeedBackLoginGuide"));    v12 = +[XXXXAPPLoginHelper sharedInstance](&OBJC_CLASS___XXXXAPPLoginHelper, "sharedInstance");    v13 = (void *)objc_retainAutoreleasedReturnValue(v12);    v29 = _NSConcreteStackBlock;    v30 = 3254779904LL;    v31 = sub_1000B05E4;    v32 = &unk_10263F2D8;    v33 = v5;    v36 = v4;    v34 = objc_retain(v11, v14);    v35 = objc_retain(v6, v15);    objc_msgSend(      v13,      "setCompleteGuideBlock:",      &v29,      _NSConcreteStackBlock,      3254779904LL,      sub_1000B05E4,      &unk_10263F2D8,      v5);    objc_release(v13);    objc_release(v35);    v16 = v34; LABEL_9:    objc_release(v16);    goto LABEL_10; }  if ( v4 ) //判断v4(bool)值,确定是否进入人脸识别 {    v17 = +[PNCMBankGlobal sharedData](&OBJC_CLASS___PNCMBankGlobal, "sharedData");    v18 = (void *)objc_retainAutoreleasedReturnValue(v17);    v19 = v18;    v20 = objc_msgSend(v18, "bindType");    v21 = (void *)objc_retainAutoreleasedReturnValue(v20);    v22 = (unsigned __int64)objc_msgSend(v21, "isEqualToString:", CFSTR("FACE"));    objc_release(v21);    objc_release(v19);    v23 = objc_msgSend(v11, "rootVC");    v24 = (void *)objc_retainAutoreleasedReturnValue(v23);    v25 = (__int64)v24;    v26 = objc_msgSend(v24, "navigationController");    v27 = objc_retainAutoreleasedReturnValue(v26);    if ( v22 )      v28 = "goToFaceCheckBindVC:info:";    else      v28 = "goSmsOrUKBindInfoVC:info:";    objc_msgSend(v5, v28, v27, v6);    objc_release(v27);    v16 = v25;    goto LABEL_9; }  -[XXXXAPPBaseViewController AfterBindSuccess:isNeedBind:](v5, "AfterBindSuccess:isNeedBind:", v6, 0LL); LABEL_10:  objc_release(v11);  objc_release(v6); }
  分析代码发现: void __cdecl -[XXXXAPPBaseViewController loginSuccessIsNeedBind:WithInfo:](XXXXAPPBaseViewController *self, SEL a2, bool a3, id a4) v4 = a3; //... if ( v4 ) { //... //人脸识别函数 //... }
  因此即理想状态为:
  只需使if(v4)判断永假,即可永不进入登录后的人脸识别,而v4又来源于v3,因此只要使v3为0或在赋值时强制赋0值,即可。
  因此即理想状态为: void __cdecl -[XXXXAPPBaseViewController loginSuccessIsNeedBind:WithInfo:](XXXXAPPBaseViewController *self, SEL a2, bool a3, id a4) v4 = 0;//v4 = a3; //... if ( v4 ) { //... //人脸识别函数 //... }
  查看v4 = a3对应汇编代码:
  利用keypatch插件修改 MOV             X22, X2 修改为 MOV             X22, #0
  修改后:
  即修改地址000B03A8
  F6 03 02 AA->16 00 80 D2
  修改后:
  伪代码: void __cdecl -[XXXXAPPCBBaseViewController loginSuccessIsNeedBind:WithInfo:](XXXXAPPCBBaseViewController *self, SEL a2, bool a3, id a4) {  XXXXAPPCBBaseViewController *v4; // x21  __int64 v5; // x19  void *v6; // x0  void *v7; // x0  void *v8; // x23  void *v9; // x0  __int64 v10; // x20  XXXXAPPCBLoginHelper *v11; // x0  void *v12; // x23  __int64 v13; // x1  __int64 v14; // x1  void **v15; // [xsp+0h] [xbp-70h]  __int64 v16; // [xsp+8h] [xbp-68h]  __int64 (__fastcall *v17)(); // [xsp+10h] [xbp-60h]  void *v18; // [xsp+18h] [xbp-58h]  XXXXAPPCBBaseViewController *v19; // [xsp+20h] [xbp-50h]  __int64 v20; // [xsp+28h] [xbp-48h]  __int64 v21; // [xsp+30h] [xbp-40h]  char v22; // [xsp+38h] [xbp-38h]  v4 = self;  v5 = objc_retain(a4, a2);  v6 = objc_msgSend(&OBJC_CLASS___UIApplication, "sharedApplication");  v7 = (void *)objc_retainAutoreleasedReturnValue(v6);  v8 = v7;  v9 = objc_msgSend(v7, "delegate");  v10 = objc_retainAutoreleasedReturnValue(v9);  objc_release(v8);  if ( (unsigned int)-[XXXXAPPCBBaseViewController needInputIDCardInfomation:](v4, "needInputIDCardInfomation:", v5) ) {    +[PCUtil setObject:forKey:](&OBJC_CLASS___PCUtil, "setObject:forKey:", CFSTR("1"), CFSTR("maybeNeedBackLoginGuide"));    v11 = (XXXXAPPCBLoginHelper *)+[XXXXAPPCBLoginHelper sharedInstance](&OBJC_CLASS___XXXXAPPCBLoginHelper, "sharedInstance");    v12 = (void *)objc_retainAutoreleasedReturnValue(v11);    v15 = _NSConcreteStackBlock;    v16 = 3254779904LL;    v17 = sub_1000B05E4;    v18 = &unk_10263F2D8;    v19 = v4;    v22 = 0;    v20 = objc_retain(v10, v13);    v21 = objc_retain(v5, v14);    objc_msgSend(      v12,      "setCompleteGuideBlock:",      &v15,      _NSConcreteStackBlock,      3254779904LL,      sub_1000B05E4,      &unk_10263F2D8,      v4);    objc_release(v12);    objc_release(v21);    objc_release(v20); }  else {    -[XXXXAPPCBBaseViewController AfterBindSuccess:isNeedBind:](v4, "AfterBindSuccess:isNeedBind:", v5, 0LL); }  objc_release(v10);  objc_release(v5); }
  可以看到,已经无人脸识别相关函数。
  patch到2进制文件:
  0×04 安装
  将修改后的二进制文件拖入ipa压缩包中覆盖原始文件
  将修改后的ipa放入手机中:
  使用ReProvision工具签名安装:
  签名:
  成功签名:
  0×05 完成
  直接输入账号密码即可登录,无需人脸识别即可进入设置指纹、手势密码页面,然后可登录成功。
  但登录后由于人脸识别验证在服务端,客户端中并无数据,因此无实际危害。

联通大领导们,求求你们今年别再搞春节引流了关注我,给你讲一个更真实的通信行业说起春节引流,每个联通基层员工可能都有深刻印象。联通春节引流最早好像是在2018年。经过2017年一整年腾讯大王卡的热卖,当时联通集团电商部众多精八部门到2025年户外运动产业总规模超过3万亿元中证网讯(记者刘丽靓)国家发改委11月7日消息,近日,体育总局国家发改委等八部门印发户外运动产业发展规划(20222025年)提出,到2025年,户外运动产业高质量发展成效显著,基十公里香八拉难寻公厕,新晋网红点儿配套设施没跟上北京日报客户端记者张楠李博近年来,越来越多京郊山野溪谷人气飙升,成为新晋网红景点。新景点收获了颇多人气,不少发现商机的小商小贩也随之而来,但原本该服务于民的一些基础配套服务设施却似群众工作札记丨让村民更有共富获得感阳光公开协同监督让村民更有共富获得感我们只知道强村富民公司挣了不少钱,但不知道什么时候分红,分多少钱。不久前,村民杨大爷来到镇纪委监察办,向我们提出了这样的疑问。强村富民公司由各行国家体育总局国家发展改革委等部门印发户外运动产业发展规划(20222025年)新华社北京11月7日电(记者林德韧王成)国家体育总局国家发展改革委会同工业和信息化部自然资源部住房和城乡建设部文化和旅游部林草局国铁集团等部门近日共同印发户外运动产业发展规划(20房车旅行第二季洱海不是海从洱源出来直奔大理古镇,看到路边指示牌周保中将军革命历史纪念馆,就折返回来,所到之处抗战纪念馆,我们是必去的,纪念馆管理员董大哥人非常好,本来我们到时正赶上是中午下班休息时间,董大10年增长42倍!青海湖湟鱼资源量恢复,曾经一度被捕捞到灭绝青海湖是位于我国青藏高原重要的湖泊,并且是我国内陆区域最大的咸水湖,而青海湖的变化一直受到大家的关注。无论是青海湖的生态系统变化,还是青海湖本身的过往历史,可以说让中国人难以忘记。相约川西红叶彩沟透水0211月6日上午9时,约定的川西扫黄出发时间。还是维也纳森林小区东门,永恒不变的里程碑零公里,气温22度暖和舒适爽朗,人员聚齐,3车骤然马达鸣响,对好导航线路,团长一声起步出发,车辆国产大沙发的香帅旅行者XS800,以后会出公升级的吗?骑行的乐趣不仅在于观赏沿途的风光,而在选择的摩托车上,乘骑的舒适性也是尤其重要的,在众多的摩托车类型当中,旅行车与太子车踏板车类的车型骑行起来的舒适度是最高的,而作为大沙发之称的巡探店全国足疗,北京输麻了。。这几年,我发现年轻人们可能是岁数到了,纷纷都迷恋上了足疗,一种传统乡土且不怎么耗电的休闲解压服务。我们总结出了这份全国足疗图鉴。这届迷恋舒服的90后们,已经扎堆儿足疗店了。重庆小张极具潜力的4个电动车品牌,发展速度很快,但没有爱玛雅迪阅读本文前,请您先点击上面的关注二字,可以快速订阅我们的最新内容,感谢支持电动车发展了20多年,高峰时期大小品牌多达2000多个,这2年经过了一轮行业洗牌,电动车的品牌数量急剧下滑
石家庄与济南,城市建设谁更强?2022省市GDP排名(单位亿元)前十名是1。广东129119。582江苏122875。63。山东874354。浙江777155。河南61345。056。四川56749。87。湖北海洋生态系统明显恢复400多头斑海豹洄游山东长岛随着天气回暖,大批国家一级保护动物斑海豹从辽东湾洄游到山东长岛,数量超过400只。洄游回来的斑海豹成群结队,模样憨态可掬。它们将长满胡须的嘴巴探出水面,露出圆圆的脑袋登上长岛各岛礁山东省北镇中学2023年2月学生月度人物风采录山东省北镇中学2023年2月学生月度人物表彰山东省北镇中学2月份学生月度人物评选活动顺利结束。经过各分区推荐年级组评选学校审议,高一。2班吴智跃等13名同学被评为2023年2月份月济南两地拟确定为第二批市级夜间文化和旅游消费集聚区记者程凌润3月3日,济南市文化和旅游局对济南市第二批市级夜间文化和旅游消费集聚区名单进行了公示,济南欧亚大观园文化旅游休闲街区CCPARK创意港上榜。根据山东省人民政府办公厅关于加聊斋故事色鼠明朝万历年间,保定府唐县住着一个19岁的采茶女,名叫韩玉梅,因为长得肌肤如雪,身材性感诱人,竟然被60岁的王屠夫看中,直接抢回家当小妾。没想到,就在她成亲的第三天晚上,王屠夫因为在关于BTCLayer2板块的布局建议本文仅供参考,不作为投资建议相信很多人都设想过,既然使用BTC进行日常交易可以做到更加安全,更加便捷,那为什么始终没有实现呢?除了众所周知的反洗钱问题,BTC的运行效率很低这一技术特斯拉提去稀土带崩板块,上市公司集体回应仍是最优方案马斯克一言激起千层浪。在3月2日清晨结束的特斯拉投资者日活动上,特斯拉CEO马斯克宣布,特斯拉下一代永磁驱动电机中完全不使用任何稀土材料。此消息一出,A股整个稀土板块立刻被带崩。不海城区花海惹人醉旅游促振兴来源人民网广西频道原创稿游客前来打卡,在花丛中拍照留影。游客前来打卡,在花丛中拍照留影。花海与曲桥亭台交相辉映。格桑花竞相开放,惹人心醉。格桑花粉白紫红相间,连成了如画般的花海美景再见格林,你好唐斯!美媒曝6换1交易,勇士组5巨头再迎大结局?本赛季的常规赛接近尾声,上个赛季的卫冕冠军勇士在这最后的阶段才渐渐起色,而此前他们甚至被认为可能无缘季后赛或者需要去通过附加赛争夺一个席位,这着实让球迷有点唏嘘,毕竟冠军球队本不应棋城棋事成都棋手夺得国际象棋新秀对抗赛冠亚军今日,2023李成智第四届中国国际象棋国家队新秀对抗赛在深圳龙岗训练基地结束了全部比赛,成都棋院棋手许翔宇和李荻分别获得男子组冠亚军。成都棋院棋手许翔宇和李荻同时获得世界冠军后,士半导体芯片板块分析通富微电,晓程科技芯导科技华大九天一,通富微电概念先进封装华为海思概念股公司深耕车载市场20年,在汽车电子国产化趋势下,大规模导入国产车载产品,成为国产头部汽车芯片客户首选封测合作伙伴,2021年成功导入NXP客户