|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
打开.xib的文件打开的就是IBIB和代码交互用的是IBActionIBOutlet这些标记这些标记追踪到他们的定义其实对编译器来说什么都不表示Objective-C代码简单被hook,表露信息太光秃秃,为了平安,改用C来写吧!
<br>
固然不是全体代码都要C来写,我指的是敏感营业逻辑代码。
本文就先容一种低进修本钱的,浅易的,Objective-C逻辑代码重写为C代码的举措。
大概,程序中存在一个相似如许的类:
- @interfaceXXUtil:NSObject
- +(BOOL)isVerified;
- +(BOOL)isNeedSomething;
- +(void)resetPassword:(NSString*)password;
- @end
被class-dump出来后,使用Cycript很简单完成打击,简单被hook,存在很年夜的平安隐患。
<br>想改,可是不想年夜改程序布局,肿么办呢?
把函数名埋没在布局体里,以函数指针成员的情势存储。
如许做的优点是,编译后,只留了下地点,往失落了名字和参数表,进步了逆向本钱和打击门坎。
改写的程序以下:
- //XXUtil.h
- #import<Foundation/Foundation.h>
- typedefstruct_util{
- BOOL(*isVerified)(void);
- BOOL(*isNeedSomething)(void);
- void(*resetPassword)(NSString*password);
- }XXUtil_t;
- #defineXXUtil([_XXUtilsharedUtil])
- @interface_XXUtil:NSObject
- +(XXUtil_t*)sharedUtil;
- @end
- //XXUtil.m
- #import"XXUtil.h"
- staticBOOL_isVerified(void)
- {
- //balabala...
- returnYES;
- }
- staticBOOL_isNeedSomething(void)
- {
- //balabala...
- returnYES;
- }
- staticvoid_resetPassword(NSString*password)
- {
- //balabala...
- }
- staticXXUtil_t*util=NULL;
- @implementation_XXUtil
- +(XXUtil_t*)sharedUtil
- {
- staticdispatch_once_tonceToken;
- dispatch_once(&onceToken,^{
- util=malloc(sizeof(XXUtil_t));
- util->isVerified=_isVerified;
- util->isNeedSomething=_isNeedSomething;
- util->resetPassword=_resetPassword;
- });
- returnutil;
- }
- +(void)destroy
- {
- util?free(util):0;
- util=NULL;
- }
- @end
<br>最初,依据Xcode的报错指引,把之前如许的挪用
对应改成:
就能够了。
是的,毫不费一点头脑。
继承自相应的不可变类比如NSMutableArray继承自NSArray他们都添加了可以改变对象内容的方法比如-(void)addObject:(id)anObject添加对象-(void)removeObject:(id)anObject删除对象上面只是一个大概的总结 |
|