111111
(碌木)
1
以下面的微信Reveal截图为例,在cycript里怎么样把屏幕所显示的viewController对象找出来呢?
还有一个问题,cycript里,我想显示某个UIButton的text里的文字(中文)来找viewController,结果是显示的是\xe5\xbe\xae\xe4\xbf\xa1这类字符串,这是什么编码?该怎么样转码?或者可以让cycript显示中文吗?
对了,[UIApplication sharedApplication].keyWindow.rootViewController.visibleViewController 用这个方法cycript没输出内容
choose(UIViewController) //有很多个结果,无法定位
UIApp.windows[0].rootViewController//是微信的主界面那个MMTabBarController
非常好的问题,问到点子上来了。
MVC标准中的C是非常重要的环节,起到承上启下的作用,一般来说,拿到C,逆向工程就成功了一半。书的第二版所提炼出的方法论中,就把拿到C作为重要环节反复讲解,敬请期待!
具体到你的例子里,要拿到文字所在view的controller,方法是:
- 通过recursiveDescription找到文字所在view的地址(在Cycript里,中文以unicode编码显示);
- 通过“#地址”命令拿到view对象;
- 对view对象不断调用nextResponder,直到返回一个controller。
111111
(碌木)
3
还有一个简单的,把所有viewController.title都改一遍,就知道哪个是当前显示的viewController了
我搜了一下,unicode是这样的啊\u670b\u53cb\u9a8c\u8bc1
111111
(碌木)
4
走个捷径:victory:
cy# var a = UIApp.windows[0].rootViewController.childViewControllers
cy# [a[0].childViewControllers[0] setTitle:"the 0"]
cy# [a[1].childViewControllers[0] setTitle:"the 1"]
cy# [a[2].childViewControllers[0] setTitle:"the 2"]
cy# [a[3].childViewControllers[0] setTitle:"the 3"]
请问您用的什么转换工具将Unicode转为中文, cycript输出的内容为\xe8\xbe\x93\xe5\x85\xa5\xe9\xaa\x8c\xe8\xaf\x81\xe7\xa0\x81 网上找了不少转换工具找不到中文~
susnmos
(susnm)
8
我写了一个脚本,可以直接获取主window当前显示的控制器,自己用了很久基本没有问题。
function allWin() {
return [UIApplication sharedApplication].windows
}
var allWindows=function () {
return allWin()
}()
function presentedVCForVC(presentedViewController) {
if ([presentedViewController isKindOfClass: [UINavigationController class]]) {
var topVC = presentedViewController.topViewController;
if (topVC.presentedViewController) {
return presentedVCForVC(topVC.presentedViewController);
}
return topVC;
}
if ([presentedViewController isKindOfClass: [UITabBarController class]]) {
var selectedVC = presentedViewController.selectedViewController;
return presentedVCForVC(selectedVC);
}
return presentedViewController;
}
// 获取对应UIWindow的当前控制器
function currentWithWindow(win) {
if (!win.rootViewController) {
return "The window hadn't a root viewcontroller";
}
return presentedVCForVC(win.rootViewController);
}
// 打印keyWindow上的当前的控制器
function currentVCWithKeyWindow() {
return currentWithWindow([UIApplication sharedApplication].keyWindow)
}
将其保存成.cy结尾的脚本,放到需要的位置后,在注入app时使用以下
cycript -p WeChat common.cy ; cycript -p WeChat
之后可以直接使用
currentVCWithKeyWindow ()
就可以获取到当前显示的控制器,如果当前显示的控制器是非主window的,那么可以使用
allWindows
获取当时所有的window,之后使用对应的window进行调用
currentWithWindow (#0x145fce5c0)
5 个赞
python shell:
>>> s=b'\xe8\xbe\x93\xe5\x85\xa5\xe9\xaa\x8c\xe8\xaf\x81\xe7\xa0\x81'
>>> print s
输入验证码
>>>
1 个赞
0xBBC
(0xBBC)
12
echo -e '\xe8\xbe\x93\xe5\x85\xa5\xe9\xaa\x8c\xe8\xaf\x81\xe7\xa0\x81'
3 个赞
少年,把这段弄出来算我输:
"\xffffffe4\xffffffbb\xffffffa5\xffffffe5\xffffff8f\xffffffaf\xffffffe5\xffffffae\xffffff83\xffffffe4\xffffffbf\xffffffa1\xffffffe7\xffffff9a\xffffff84\xffffffe6\xffffff9c\xffffff89\xffffffe5\xffffffae\xffffffb6\xffffffe7\xffffffb3\xffffffbb\xffffffe7\xffffff9c\xffffff8b\xffffffe7\xffffff9a\xffffff84\xffffffe7\xffffff94\xffffffa8\xffffffe7\xffffffbb\xffffffad\xffffffe7\xffffffbb\xffffffa7a"
我一般先写一个tweak 到 app 里面,再做其他的工作, hook 的是 UIViewController的 ViewDidLoad,在里面获取然后存到本地,这样就可以实时的查看当前的控制器
请问编辑cy文件有没有什么编辑器,方便使用的,你是用的什么,xcode吗
你是说xm吧,我用atom编辑器,有个addon支持logos语法:)
感谢大神,我是想像写OC代码或者JS 代码一样,可以边写cycript脚本,还可以很方便的调试,我看了大都是在命令行里写一句句代码,然后使用,这样很不方便,有没有什么IDE或者工具,可以一遍调试,一遍写cycript脚本的。