FreeBufiOS逆向之人脸识别绕过( 二 )

分析代码发现:
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对应汇编代码:
FreeBufiOS逆向之人脸识别绕过
本文插图
利用keypatch插件修改
MOVX22, X2修改为MOV X22,#0
FreeBufiOS逆向之人脸识别绕过
本文插图
修改后:
FreeBufiOS逆向之人脸识别绕过
本文插图
即修改地址000B03A8
F6 03 02 AA->16 00 80 D2
修改后:
FreeBufiOS逆向之人脸识别绕过
本文插图
伪代码:
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);}


推荐阅读