文章总结: 本文记录了iOSAPP逆向分析实录,作者利用Hopper与IDAPro分析二进制文件。首先通过HookBiHelper类的identityStatus方法绕过实名认证弹窗,再定位IAPMgr与TempCell逻辑,修改isSubscript返回值以隐藏VIP解锁图标。文中对比了工具优势并提供了具体的TheosHook代码,最终通过注入dylib成功实现功能解锁。
综合评分: 84
文章分类: 逆向分析,移动安全,实战经验,安全工具
iOS简单逆向之小白的首个APP分析实录
原创
初心莫负眉间
初心莫负眉间雪
2025年8月23日 10:23
四川
这个app现在看来真的很简单,以至于之前写的dylib现在都还能用。不过当时真的花了点时间来搞定它,当时只知道有个hopper,对ida也不太感冒,注入器也才找到别人分享的在线网址安装上没多久,加上小孩在平板上下了这个app,还挺耐玩的,但是有些需要解锁,于是就想试一下,虽然是小白。
我能想到的就是使用Lookin看UI,再分析二进制。先注入看看关键UI吧。一上来就有个实名认证弹窗,是直接加在vc上的
每个cell上还有个vip可解锁的图标
直接在hooper中对应的vc中查找搜索实名认证的类名字符串
hopper查看
int -[HomeVC checkAlertView](int arg0) { r31 = r31 - 0xb0; var_40 = d9; stack[-72] = d8; var_30 = r24; stack[-56] = r23; var_20 = r22; stack[-40] = r21; var_10 = r20; stack[-24] = r19; saved_fp = r29; stack[-8] = r30; r29 = &saved_fp; r19 = arg0; if (sub_10125a9c0() != 0x0) { r0 = sub_101234340(); } else { r0 = sub_1012d2020(); ...
在IDA Professional 9.1中查看
void __cdecl -[HomeVC checkAlertView](HomeVC *self, SEL a2){ id v4; // x21 unsigned int v5; // w22 void *v6; // x20 void *v7; // x22 id v8; // x0 _QWORD v9[5]; // [xsp+8h] [xbp-98h] BYREF _QWORD v10[4]; // [xsp+30h] [xbp-70h] BYREF id v11; // [xsp+50h] [xbp-50h] BYREF id v12; // [xsp+58h] [xbp-48h] BYREF
if ( +[BiHelper identityStatus](&OBJC_CLASS___BiHelper, "identityStatus") ) { -[HomeVC addAlertView](self, "addAlertView"); return; } ...
所以个人觉得还是优先使用ida,hopper备用,可能会更快定位到关键类的关键方法。ida的话装上keypath会更nice,所以这里我们就直接过掉实名认证
%hook BiHelper+ (BOOL)identityStatus { return YES;}%end
接下来再看vip点亮图标。这个如果用hopper太难定位关键位置了,最后我在hopper里搜索的IAP,也算是成功拿下。
现在让我们用ida来找找,可以直接定位到关键处
v74 = objc_retainAutoreleasedReturnValue(+[IAPMgr sharedInstance](&OBJC_CLASS___IAPMgr, "sharedInstance"));v75 = -[IAPMgr isSubscript](v74, "isSubscript");objc_release(v74);objc_release(v73);if ( (v75 & 1) != 0 ) goto LABEL_48; v76 = objc_retainAutoreleasedReturnValue(-[TempCell proMker](self, "proMker")); -[UIImageView setAlpha:](v76, "setAlpha:", 1.0);
LABEL_48: v81 = objc_retainAutoreleasedReturnValue(+[BiHelper instance](&OBJC_CLASS___BiHelper, "instance")); v82 = (unsigned int)objc_msgSend(v81, "noAD_ti"); objc_release(v81); if ( v82 ) { v83 = objc_retainAutoreleasedReturnValue(-[TempCell proMker](self, "proMker")); -[UIImageView setAlpha:](v83, "setAlpha:", 0.0); objc_release(v83); }
大约意思就是isSubscript就goto LABEL_48隐藏高级图标,没isSubscript就显示这个图标。过vip就简单如何了。
%hook IAPMgr-(BOOL)isSubscript{ return YES;}-(BOOL)isExped{ return NO;}%end
打包也dylib用注射器注入即可解锁了。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:初心莫负眉间雪 初心莫负眉间《iOS简单逆向之小白的首个APP分析实录》