iOS使用cycript调试APP技巧
2016-06-28 15:37
447 查看
cycript -p MobiSecretSMS
var app = [UIApplication sharedApplication]
app.delegate
var keyWindow = app.keyWindow
var rootController = keyWindow.rootViewController
var visibleController = rootController.visibleViewController
function printMethods(className) {
var count = new new Type("I");
var methods = class_copyMethodList(objc_getClass(className), 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);
free(count);
return methodsArray;
}
printMethods(MobiLockViewController)
[visibleController onApiLoginSuccess:@"errCode:0"]
UIApp.keyWindow.recursiveDescription
function printMethods(className) {
var count = new new Type("I");
var methods = class_copyMethodList(objc_getClass(className), 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);
free(count);
return methodsArray;
}
//printMethods(MobiLoginViewController)
//var assetsController = new Instance(0x162b5e50)
//assetsController.view.backgroundColor = [UIColor blueColor]
[visibleController.view removeFromSuperview]
[rootController.view addSubview:visibleController.view]
[visibleController onApiCheckLoginSuccess:@"1"]
var tv = [[MobiTabbarViewController alloc] init]
[visibleController.view addSubview:tv.view]
[tv.view removeFromSuperview]
[visibleController onApiLoginSuccess:@"xxxxxx"]
[visibleController onApiCheckLoginSuccess:@"xxxxxx"]
//获得当前最上层VierController
function getTopVC(){
var result = nil;
var window = [[UIApplication sharedApplication] keyWindow];
if (window.windowLevel != UIWindowLevelNormal)
{
var winarray=[]
winarray= [[UIApplication sharedApplication] windows];
for(var i=0;i<windows.count;i++)
{
var tmpWin = [windows objectAtIndex:i];
if (tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
var frontView = [[window subviews] objectAtIndex:0];
var nextResponder = [frontView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]])
result = nextResponder;
else
result = window.rootViewController;
return result;
}
$ cycript -p 3272 weak_classdump.cy; cycript -p 3272
UIApp
UIApp.delegate
weak_classdump(MobiAppDelegate, "/someDirWithWriteAccess/");
var app = [UIApplication sharedApplication]
app.delegate
var keyWindow = app.keyWindow
var rootController = keyWindow.rootViewController
var visibleController = rootController.visibleViewController
function printMethods(className) {
var count = new new Type("I");
var methods = class_copyMethodList(objc_getClass(className), 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);
free(count);
return methodsArray;
}
printMethods(MobiLockViewController)
[visibleController onApiLoginSuccess:@"errCode:0"]
UIApp.keyWindow.recursiveDescription
function printMethods(className) {
var count = new new Type("I");
var methods = class_copyMethodList(objc_getClass(className), 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);
free(count);
return methodsArray;
}
//printMethods(MobiLoginViewController)
//var assetsController = new Instance(0x162b5e50)
//assetsController.view.backgroundColor = [UIColor blueColor]
[visibleController.view removeFromSuperview]
[rootController.view addSubview:visibleController.view]
[visibleController onApiCheckLoginSuccess:@"1"]
var tv = [[MobiTabbarViewController alloc] init]
[visibleController.view addSubview:tv.view]
[tv.view removeFromSuperview]
[visibleController onApiLoginSuccess:@"xxxxxx"]
[visibleController onApiCheckLoginSuccess:@"xxxxxx"]
//获得当前最上层VierController
function getTopVC(){
var result = nil;
var window = [[UIApplication sharedApplication] keyWindow];
if (window.windowLevel != UIWindowLevelNormal)
{
var winarray=[]
winarray= [[UIApplication sharedApplication] windows];
for(var i=0;i<windows.count;i++)
{
var tmpWin = [windows objectAtIndex:i];
if (tmpWin.windowLevel == UIWindowLevelNormal)
{
window = tmpWin;
break;
}
}
}
var frontView = [[window subviews] objectAtIndex:0];
var nextResponder = [frontView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]])
result = nextResponder;
else
result = window.rootViewController;
return result;
}
$ cycript -p 3272 weak_classdump.cy; cycript -p 3272
UIApp
UIApp.delegate
weak_classdump(MobiAppDelegate, "/someDirWithWriteAccess/");
相关文章推荐
- Android vold启下篇(NetlinkHandler)
- Android BottomSheet:以选取图片为例(2)
- Android BottomSheet:以选取图片为例(2)
- Android自定义ScrollView实现一键置顶功能
- [Unity3d]Player Settings导出设置
- Android studio 提高导入项目的速度
- 如何加快Android Studio 编译app 的速度
- Android开发技巧:像QQ一样输入表情图像
- iOS 项目中添加字体库
- Android 下拉展开动画
- iOS保存图片视频到photoLibrary
- ios - cordova 简介
- android(七)、 ContextImpl创建
- AndroidStudio快捷键大全
- Objective-C Runtime 运行时之二:成员变量与属性
- 如何将Android Studio项目提交(更新)到github作为远程仓库
- Android 适配不同的屏幕
- Log4j2 自定义 Appender
- Android Studio无法调试运行app的解决
- android+studio引用library与导入jar