IOSApp开发安全策略
App开发
APP开发
浏览:558 次

前言
本文旨在为iOSApp开发者提供最全面的通用安全保护手段。它涉及一些主动保护策略,如字符串加密、类名和方法名混淆、程序结构混淆、加密、反调试、反注入等,并在反向应用后以截图显示。(持续更新)
字符串加密
对于字符串加密和解密,常规方法是XOR加密和解密。
查看以下代码:
#定义XOR_键0xBB
void xorString(无符号字符*str,无符号字符键)
{
无符号字符*p=str;
而((*p)^=键)!=“\”0’)p++;
}
-(无效)xor测试
{
无符号字符str[]={(XOR_KEY^'w'),//欢迎
(XOR_KEY^'e'),
(XOR_KEY^'l'),
(XOR_KEY^'c'),
(XOR_KEY^'o'),
(XOR_KEY^'m'),
(XOR_KEY^'e'),
(XOR_KEY^'\0')};
xorString(str,XOR_KEY);

静态无符号字符结果[7];
memcpy(结果,str,7);
NSLog(@“%@”,[NSString stringWithFormat:@“%s”,结果]);//输出:欢迎
}
现在让我们看看IDA中的反编译代码:
void __ cdecl-[ViewController xorTest](ViewController*self,SEL a2)
{
无效*v2;//雷克斯
__int64 v3;//ST00_八
__int64 v4;//[rsp+20h][rbp-10h]
v4=-4909250334127825204LL;
xorString(&v4187LL);
xorTest_结果=v4;
word_100003E9C=字2(v4);
字节_100003E9E=字节6(v4);
v2=objc_msgSend(&objc_CLASS__NSString,“stringWithFormat:”,CFSTR(“%s”),&xorTest_result);
v3=objc_retainAutoreleasedReturnValue(v2);
NSLog(CFSTR(“%@”),v3);
objc发布(v3);
}
取消调试
如何防止他人使用LLDB+debugserver动态调试我们的应用?防止LLDB连接到App的一般方法是:

#导入
#导入“AppDelegate.h”
#导入
#导入
类型定义int(*ptrace_ptr_t)(int _request,pid_pid,caddr_t_addr,int _data);
#如果!已定义(PT_DENY_ATTACH)
#定义PT_拒绝_附件31
#结束
void disable_gdb(){
void*句柄=dlopen(0,RTLD_GLOBAL|RTLD_NOW);
ptrace_ptr_tptrace_btr=dlsym(句柄,“ptrace”);
ptrace_ ptr(PT_DENY_ATTACH,0、0、0);
dlclose(句柄);
}
int main(int argc,char*argv[]){
#ifndef调试
禁用gdb();
#结束
@自动释放池{
返回UIApplicationMain(argc、argv、nil、NSStringFromClass([AppDelegate class]));
}
}

添加上述代码后,使用LLDB+debugserver进行动态调试。
LLDB连接失败.png