IOSApp开发安全策略

App开发

APP开发


浏览:540 次

前言

本文旨在为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