-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathTweak.xm
More file actions
125 lines (86 loc) · 3.26 KB
/
Copy pathTweak.xm
File metadata and controls
125 lines (86 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/***
* Fake Operator
* Thanks to DarkMalloc
* iPod-Compatiblility by Frigid
* NSPwn (c) 2010
**/
#include <stdio.h>
#include <string.h>
typedef struct {
char itemIsEnabled[22];
char timeString[64];
int gsmSignalStrengthRaw;
int gsmSignalStrengthBars;
char serviceString[100];
} _42data;
typedef struct {
char itemIsEnabled[20];
char timeString[64];
int gsmSignalStrengthRaw;
int gsmSignalStrengthBars;
char serviceString[100];
} _41data;
@class CPDistributedMessagingCenter;
static NSString *settingsFile = @"/var/mobile/Library/Preferences/com.nspwn.fakeoperatorpreferences.plist";
float _FOfirmwareVersion = 0.0f;
NSDictionary *_FOcarrier;
%class SBStatusBarDataManager
static void reloadPrefsNotification(CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo) {
NSLog(@"com.nspwn.fakeoperator Operator changed");
_FOcarrier = [[NSDictionary dictionaryWithContentsOfFile:settingsFile] retain];
id dataManager = [%c(SBStatusBarDataManager) sharedDataManager];
[dataManager _updateServiceItem];
[dataManager _dataChanged];
}
%hook SBStatusBarDataManager
- (void)_updateServiceItem {
if (_FOcarrier != NULL) {
NSLog(@"%@", _FOcarrier);
NSLog(@"Firmware: %f", _FOfirmwareVersion);
if ([[_FOcarrier objectForKey:@"Enabled"] boolValue] && [_FOcarrier objectForKey:@"FakeCarrier"] != nil) {
if (_FOfirmwareVersion == 4.2) {
_42data &data(MSHookIvar<_42data>(self , "_data"));
strncpy(data.serviceString, [[_FOcarrier objectForKey:@"FakeCarrier"] UTF8String], 100);
data.serviceString[99] = '\0';
} else if (_FOfirmwareVersion == 4.1 || _FOfirmwareVersion == 4.0) {
_41data &data(MSHookIvar<_41data>(self , "_data"));
strncpy(data.serviceString, [[_FOcarrier objectForKey:@"FakeCarrier"] UTF8String], 100);
data.serviceString[99] = '\0';
}
} else {
if (_FOfirmwareVersion == 4.2) {
_42data &data(MSHookIvar<_42data>(self , "_data"));
NSString *&serviceString(MSHookIvar<NSString *>(self , "_serviceString"));
if (serviceString != NULL) {
strncpy(data.serviceString, [serviceString UTF8String], 100);
data.serviceString[99] = '\0';
}
} else if (_FOfirmwareVersion = 4.1 || _FOfirmwareVersion == 4.0) {
_41data &data(MSHookIvar<_41data>(self , "_data"));
NSString *&serviceString(MSHookIvar<NSString *>(self , "_serviceString"));
if (serviceString != NULL) {
strncpy(data.serviceString, [serviceString UTF8String], 100);
data.serviceString[99] = '\0';
}
}
}
}
%orig;
}
%end
%ctor {
if (kCFCoreFoundationVersionNumber == 550.52) { _FOfirmwareVersion = 4.2f; }
if (kCFCoreFoundationVersionNumber == 550.38) { _FOfirmwareVersion = 4.1f; }
if (kCFCoreFoundationVersionNumber == 550.32) { _FOfirmwareVersion = 4.0f; }
if ([[NSFileManager defaultManager] fileExistsAtPath:settingsFile]) {
_FOcarrier = [NSDictionary dictionaryWithContentsOfFile:settingsFile];
}
%init;
CFNotificationCenterRef r = CFNotificationCenterGetDarwinNotifyCenter();
CFNotificationCenterAddObserver(r, NULL, &reloadPrefsNotification,
CFSTR("com.nspwn.fakeoperator/operatorChanged"), NULL, 0);
}