总所周知微信设置性别以后就没有办法还原成无性别
今天分享的这个插件就是帮助大家还原空白性别,从界面分析到静态分析到动态分析
工具:Reveal,MonkeyDev,Cycript,class-dump
基本的逆向工具使用教程就不介绍了有兴趣的可以去别的贴看看
在Reveal打开我们的微信去到我们设置的界面可以拿到控制器的类名SettingSocialInfoViewController
用class-dump导出头文件后我们可以看到SettingSocialInfoViewController里面有一个名为m_infoLogic的属性接下来我们去看看SettingMyAccountExtInfoLogic这个类
我们来到SettingMyAccountExtInfoLogic可以看到一个名为m_usrInfo的属性下面我们去到CUsrInfo
我们看到CUsrInfo类里面有非常多类似以个人信息命名的成员属性 ,接下来我们用cycript调试
我们用cycript一直跟踪到CUsrInfo这个类里面,可以看到我们第一次性别为男时m_uiSex为1,当我把性别切换到女性的时候这个属性变成了2,可见m_uiSex就是控制性别的一个成员属性,当这个属性被设为0的时候性别就变成空了
到此分析就结束了
下面我们为tableview增加一个名为空的cell
在Reveal可以看到所属控制器为NSStringSelectViewController
在NSStringSelectViewController看到一个- (id)initWithArray:(id)arg1 selected:(id)arg2的方法
我们用monkeydev新建一个工程
在方法中下断点可以看到arg1数组拥有两个值我们只需要在数组里面增加一个元素就能达到增加一个cell的效果
下面直接上代码
可以通过monkeydev或theos编译成dylib文件最后打包deb文件安装
@interface CUsrInfo : NSObject
@property(nonatomic) unsigned int m_uiSex;
@end
@interface SettingSocialInfoViewController : UIViewController
@end
@interface SettingMyAccountExtInfoLogic : NSObject
@property(retain, nonatomic) CUsrInfo *m_usrInfo;
@end
@interface NSStringSelectViewController : UIViewController
@property(nonatomic) _Bool bPresentModel;
@end
@interface MMTableViewUserInfo : NSObject
@end
@interface MMTableViewCellInfo : MMTableViewUserInfo
@end
static int number;
static SettingMyAccountExtInfoLogic *logic;
%hook SettingSocialInfoViewController
-(void)viewDidAppear:(BOOL)animated{
logic = [self valueForKeyPath:@"m_infoLogic"];
}
%end
%hook NSStringSelectViewController
- (id)initWithArray:(NSArray *)arg1 selected:(id)arg2{
NSMutableArray *myMutableArray = [arg1 mutableCopy];
[myMutableArray addObject:@"空"];
arg1 = myMutableArray;
return %orig;
}
- (void)OnSelectCell:(MMTableViewCellInfo *)arg1{
%orig;
NSMutableDictionary *dict = [arg1 valueForKeyPath:@"_dicInfo"];
if([dict[@"title"] isEqualToString:@"空"]){
number = 1;
} }
- (void)OnDone{
%orig;
if(number == 1){
number = 0;
[logic.m_usrInfo setM_uiSex:0];
} }
%end