panda
(panda)
2015 年1 月 9 日 05:18
1
Hook IOS 设备的 invertColors 选项 但是不成功
#import "UIKit/UIKit.h"
#import "Foundation/Foundation.h"
static NSNumber * flag = [NSNumber numberWithInt:1];
extern "C" BOOL _AXSInvertColorsEnabled(NSNumber* flag);
%hook SpringBoard
- (void)_menuButtonDown:(struct __IOHIDEvent *)arg1
{
%orig;
flag = flag ==[NSNumber numberWithInt:1]?[NSNumber numberWithInt:0]:[NSNumber numberWithInt:1];
_AXSInvertColorsEnabled(flag);
NSLog(@"NSNumber flag = %@ ",flag);
}
%end
最后安装成功后 有打印
Jan 9 13:12:45 Panda-iphone SpringBoard[993]: NSNumber flag = 0
Jan 9 13:12:53 Panda-iphone SpringBoard[993]: NSNumber flag = 1
Jan 9 13:12:54 Panda-iphone SpringBoard[993]: NSNumber flag = 0
Jan 9 13:13:33 Panda-iphone SpringBoard[993]: NSNumber flag = 1
Jan 9 13:13:34 Panda-iphone SpringBoard[993]: NSNumber flag = 0
Jan 9 13:13:35 Panda-iphone SpringBoard[993]: NSNumber flag = 1
但是就是不能成功切换选项
_AXSInvertColorsEnabled的函数原型和功能不是你想象的这样,这个函数仅仅是返回当前是否enabled;要enable/disable,貌似是用_AXSInvertColorsSetEnabled函数
panda
(panda)
2015 年1 月 9 日 14:26
3
大神,刚才是找错了函数,现在找到了函数,但是不知道是什么对象调用了它,
只知道是 [AccessibilitySettingsController accessibilitySetPreference:specifier:] 中的 arg1 调用了_handleInvertColorsEnabled
函数原型在 https://github.com/thenameisnigel/IOS7-Beta-1-Class-Dumps/blob/master/AccessibilitySettings/AccessibilitySettingsController.h 这里看到的
我只能去 hook 这个类AccessibilitySettingsController 的函数accessibilitySetPreference:specifier 然后去了解arg1是什么类然后才能调用_handleInvertColorsEnabled
%hook AccessibilitySettingsController
-(void)accessibilitySetPreference:(id)preference specifier:(id)specifier
{
UIAlertView *alert = [UIAlertView alloc] initWithTitle:@“Hello ,welcome panda’ tweak!” message:nil delegate:nil cancelButtonTitle:@“ok” otherButtonTitles:nil];
[alert show];
NSLog(@"accessibilitySetPreference preference = %s descript %@ specifier = %s descript %@",object_getClassName(preference),preference
,object_getClassName(specifier),specifier);
%orig;
}
%end
但是这个tweak始终不成功~_~
这个是 AccessibilitySetting 里的 invert color 选项的函数
panda
(panda)
2015 年1 月 9 日 14:55
4
我问的问题跟 141页的问题 一样,找到来电默认接听方式的查询函数
这个函数是 [specifier intValue] 照样的 我同样不知道 specifier 也就是 arg2 是什么对象 调用的initValue?
你现在的目的是什么?hook这个_AXSInvertColorsSetEnabled函数吗?
你hook
-(void)accessibilitySetPreference:(id)preference specifier:(id)specifier
是为了干什么?
panda
(panda)
2015 年1 月 9 日 15:34
7
是为了 知道(id)preference specifier:(id)specifier 是什么参数,书的后面介绍了可以 在跳过函数返回去看,但我这样像上面那样Hook 为什么不能成功呢? HOOK 只是为了验证能Hook住,现在问题就是HOOK 不住, 这是为什么呢,这个函数是被导出的函数?
你的filter填的是谁?这个函数可能是被某个bundle调用的,而不是被Preferences本身调用的,你hook的对象可能有问题
panda
(panda)
2015 年1 月 9 日 15:38
9
我用的 IOSOpenDev 新手不建议用吗?
难道默认是指定 SpingBoard???
panda
(panda)
2015 年1 月 9 日 15:40
10
好吧 我错了刚学学IOSOpenDev
我居然默认是 SpringBoard ~
我改改
新手不建议使用iOSOpenDev,这个IDE太智能,省略了许多初学者应该掌握的基本原理,其实是害了你
panda
(panda)
2015 年1 月 9 日 16:18
12
好的 下次绝不用它了~~~~
调试时,看到
[328] 0x0000000005e48000 /Users/panda/Library/Developer/Xcode/iOS DeviceSupport/8.1.2 (12B440)/Symbols/System/Library/PrivateFrameworks/CoreServicesInternal.framework/CoreServicesInternal
[329] 0x0000000105184000 /System/Library/PreferenceBundles/AccessibilitySettings.bundle/AccessibilitySettings(0x0000000105184000)
[330] 0x0000000005e48000 /System/Library/PrivateFrameworks/ScreenReaderOutput.framework/ScreenReaderOutput(0x00000001932cc000)
[331] 0x0000000005e48000 /System/Library/PrivateFrameworks/UIAccessibility.framework/UIAccessibility(0x0000000194a50000)
[332] 0x0000000005e48000 /System/Library/PrivateFrameworks/Accessibility.framework/Frameworks/AccessibilityUIService.framework/AccessibilityUIService(0x000000018d418000)
我设置 filter 为
com.apple.AccessibilitySettings或者
com.apple. Preferences
都不能HOOK住 没法了~~~
我估计这个函数是在AccessibilitySettings内部调用的,至于为什么没有hook到呢,应该是因为:
你点击图标,启动Preferences.app;在Preferences内部点击某个选项,它(延迟)加载AccessibilitySettings。
如果你hook的是com.apple.Preferences,目标就是错的;
如果你hook的是com.apple.AccessibilitySettings,因为CydiaSubstrate是随Preferences启动而加载的,Preferences启动时AccessibilitySettings还未得到加载,此时尝试hook,会因找不到hook对象而失败。
解决办法是,找到Prefenreces加载AccessibilitySettings的函数,在这个函数里做判断,当AccessibilitySettings得到加载时%init(hook)。
这个情况有点类似于最后一章“拦截电话”,你感受一下
panda
(panda)
2015 年1 月 9 日 16:40
14
谢谢大神!!!我也想到是这样,就是没想怎么解决,看来 书还是得看完才提问~~~ ~_~