iOS-Security[5]-修改

Cycript 是一款支持 OC 和 JS 混合语法,可用于动态修改 App 行为的工具。Snoop-it 是一款可以动态分析以及黑盒安全测试的工具。

Cycript

安装

直接在 Cydia 中搜索 Cycript 并安装即可。

启动

SSH 到设备上,并输入命令:

1
cycript -p '应用 PID'

语法参考:Cycript Tricks

修改

以 QQ 音乐为例,先 hook 住其进程,再修改其显示的数字:

iOS-Cycripty-BadgeNumber-Code

效果:

iOS-Cycripty-BadgeNumber

控制 QQ 音乐跳转到语音识别页面:

iOS-Cycripty-Control

效果如下:

iOS-Cycripty-Control-Result

查看 Instance 的所有变量:

1
function tryPrintIvars(a){ var x={}; for(i in *a){ try{ x[i] = (*a)[i]; } catch(e){} } return x; }

iOS-Cycripty-Class-Propertys

查看 Class 的所有方法:

1
2
3
4
5
6
7
8
9
10
11
12
function printMethods(className, isa) {
var count = new new Type("I");
var classObj = (isa != undefined) ? objc_getClass(className).constructor : objc_getClass(className);
var methods = class_copyMethodList(classObj, count);
var methodsArray = [];
for(var i = 0; i < *count; i++) {
var method = methods[i];
methodsArray.push({selector:method_getName(method), implementation:method_getImplementation(method)});
}
free(methods);
return methodsArray;
}

iOS-Cycripty-Class-Functions

Method Swizzling 替换实现:

iOS-Cycripty-MethodSwizzling

调用 NSLog:

1
2
NSLog_ = dlsym(RTLD_DEFAULT, "NSLog")
NSLog = function() { var types = 'v', args = [], count = arguments.length; for (var i = 0; i != count; ++i) { types += '@'; args.push(arguments[i]); } new Functor(NSLog_, types).apply(null, args); }
1
NSLog("From cycript")

iOS-Cycripty-NSLog

查看页面构成:

iOS-Cycripty-View-Recurise

Snoop-it

功能

Snoop-it 支持的功能如下:

  • 文件系统访问
  • Keychain 访问
  • HTTP(S) 连接 (NSURLConnection)
  • 访问敏感 API(address book, photos etc.)
  • 打印信息 (NSLog)
  • 跟踪 App 内部行为 (objc_msgSend)

安装

直接在 Cydia 中添加源安装即可。

1
repo.nesolabs.de

安装完成后,在桌面可以看到 Snoop-it 的图标:

iOS-Snoop-it

但是,目前 Snoop-it 只支持 32 位,不支持 64 位,后续支持再加上。