我正在开发一个iPhone应用程序,并且非常想确定设备是否正在漫游,以便我可以智能地避免在用户家庭网络之外花费昂贵的连接.
我写的应用程序是用于越狱手机,但如果可能的话,我更愿意使用标准的SDK.
这是我已经找到的:
1. Apple SDK: 在Apple文档中,我在Apple的SCNetworkReachability API中找到了承诺.通过API,您可以访问WIFI或手机网络,当前是否建立了网络连接等.但是,搜索SCNetworkReachability API参考pdf以获取"漫游"或"漫游"两者均为nil.他们的示例代码也是如此.
2.越狱iPhone FS的Grep: 首选项 - >常规 - >网络选项卡是用户可以打开或关闭漫游的地方.查看plist文件("/Applications/Preferences/Network.plist"),我能够找到以下引用:
PostNotification = "com.apple.commcenter.InternationalRoamingEDGE.changed";
cell = PSSwitchCell;
default = 1;
defaults = "com.apple.commcenter";
key = InternationalRoamingEDGE;
label = "EDGE_ROAMING_TOGGLE";
requiredCapabilities = (
telephony
);
Run Code Online (Sandbox Code Playgroud)
这当然是一个领先者,因为看起来我可以注册用户更改了InternationalRoaming设置的通知.尽管如此,我不确定如何将其变成他们实际上正在漫游的知识.
3.检查SpringBoard的类转储源: 我使用class-dump转储了SpringBoard的类.我无法找到任何"漫游"或"漫游"的引用
4.显然我开始在SO检查这个: 找不到任何相关的东西.
进一步的步骤:有人在这里有任何建议吗?我知道这是可能的.但苹果显然很难找到它.我非常怀疑,如果不使用私有框架,这是可能的.(例如CoreTelephony).由于这是一个越狱的应用程序,我可能会使用SpringBoard中的注入代码来屏幕抓取运营商名称,但我真的更愿意不去那条路线.任何建议都非常感谢.谢谢.
如何将"对象"添加到现有应用程序?
例如,EasyRefresh for Chrome调整,在iOS Chrome应用程序中启用了一个新按钮,就像许多其他调整一样.
我怎么可以添加一个简单UIButton的,例如,Twitter应用程序?
是否有任何GitHub项目可以帮助我理解它是如何完成的?
图像来源:ModMyI
谢谢.
如何在应用程序运行时修改应用程序中的各个汇编指令?
我有一个Mobile Substrate调整,我正在为现有的应用程序编写.在tweak的构造函数(MSInitialize)中,我需要能够在应用程序的代码中重写单个指令.我的意思是,我希望修改应用程序的地址空间中的多个位置,但在每个实例中,只需要修改一条指令.我已经为应用程序禁用了ASLR,并且知道要修补的指令的确切内存地址,并且我有新指令的十六进制字节(作为char [],但这是不重要的,并且必要时可以更改).我只需要弄清楚如何进行更改.
我知道iOS使用数据执行保护(DEP)来指定可执行内存页面也不可写,反之亦然,但我知道可以在越狱设备上绕过它.我也知道iDevices使用的ARM处理器有一个指令缓存,需要更新以反映更改.但是,我甚至不知道从哪里开始这样做.
所以,为了回答肯定会被问到的问题,我没有尝试过任何事情.这不是因为我很懒; 相反,这是因为我完全不知道如何实现这一目标.任何帮助都将非常感激.
如果它有帮助,我的最终目标是在移动基板调整中使用它来挂钩App Store应用程序.以前,为了修改这个应用程序,必须先破解它来解密应用程序,以便修补二进制文件.我想做到这一点,所以人们不必破解应用程序,因为这可能导致盗版,我强烈反对.我不能正常使用Mobile Substrate,因为所有的工作都是用C++完成的,而不是Objective-C,并且应用程序被剥离,没有任何符号可供使用MSHookFunction.
这是一个非常简单的Objective-C控制台应用程序:
#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
NSLog(@"Hello world!");
[pool drain];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我gcc main.m -o main -ObjC -framework Foundation -framework CoreLocation在Mac上编译它.
我的Mac上也安装了iOS SDK.如何修改此命令以在我的计算机上编译相同的代码,以便在(越狱)iOS设备上使用?
然后,我可以通过ssh传输可执行文件并使用它进行签名ldid.
我正在开发一个针对越狱iOS设备的应用程序.它有助于自动执行某些任务.我需要在/ private/var/mobile/Library中创建一个简单的文本文件(实际上是.lua文件).显然,调试器会抛出访问被拒绝的异常.该应用程序现在被命名为"CreateFile",用于测试.
我尝试了以下步骤来获得root访问权限:
打开原始可执行文件并使用以下脚本替换其内容:
#!/bin/bash
dir=$(dirname "$0")
exec "${dir}"/CreateFile "$@"
Run Code Online (Sandbox Code Playgroud)
在iOS上直接启动根应用程序失败.因此,我们使用启动根可执行文件的脚本替换应用程序的主可执行文件.
在终端中,导航到应用包.
chmod 0775原始可执行文件和chmod 6775复制的可执行文件.使用此方法,我可以成功将应用程序安装到/ Applications文件夹并启动它,但是我希望我仍然没有root权限,因为只要应用程序尝试写入操作,它就会崩溃.
如果有人能对这种情况有所了解,我将非常感激!
编辑:
在@creker的建议下做了一些额外的测试.当我尝试在应用程序的文档中创建允许目录中的文件时,它创建就好了,没有任何问题.因此,我确信文件创建不会导致崩溃,并且它只是无法访问的文件夹路径.
同样在@creker的建议下,我尝试将应用程序安装到/ Applications而没有任何启动脚本.应用程序以这种方式打开时崩溃.如果我在安装后将应用程序可执行文件chmod到775,则应用程序将打开但在尝试创建文件时仍会崩溃.
我查看了崩溃记者的系统日志.这是崩溃线:
System.UnauthorizedAccessException: Access to the path "/private/var/mobile/Library/test.txt" is denied
Run Code Online (Sandbox Code Playgroud)
仍然希望解决这个问题,欢迎任何想法!
我的应用程序使用以下方法来检测iOS 4和5中的漫游.
NSString *carrierPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.carrier.plist";
NSString *operatorPListSymLinkPath = @"/var/mobile/Library/Preferences/com.apple.operator.plist";
NSFileManager *fm = [NSFileManager defaultManager];
NSError *error = nil;
NSString *carrierPListPath = [fm destinationOfSymbolicLinkAtPath:carrierPListSymLinkPath error:&error];
NSString *operatorPListPath = [fm destinationOfSymbolicLinkAtPath:operatorPListSymLinkPath error:&error];
return (![operatorPListPath isEqualToString:carrierPListPath]);
Run Code Online (Sandbox Code Playgroud)
但是这个代码总是在iOS6上返回false(即使我不漫游,它总是返回false),我认为它可能是由Apple更改的plist文件位置,任何人都面临同样的问题,任何人都可以帮助我吗?
谢谢.
我需要运行以下代码来关闭我的iPhone屏幕.
在iOS6上:
void (*BKSDisplayServicesSetScreenBlanked)(BOOL blanked) = (void (*)(BOOL blanked))dlsym(RTLD_DEFAULT, "BKSDisplayServicesSetScreenBlanked");
Run Code Online (Sandbox Code Playgroud)
然后使用:
BKSDisplayServicesSetScreenBlanked(1); // 1 to dim, 0 to undim
Run Code Online (Sandbox Code Playgroud)
它不起作用.有人告诉我,我需要com.apple.backboard.client权利才能在我的iphone上运行.我不知道如何设置这些权利.我已经看到了几种设置权利的方法,但它们对我来说非常困惑,就像这一样.
是的,您需要对权利进行编码签名.但是,不,它不必与越狱手机上的Apple证书.您可以通过下载ldid可执行文件伪造代码签名,然后执行
Run Code Online (Sandbox Code Playgroud)cd MyAppName.app ldid -Sentitlements.xml MyAppName假设您的应用程序名为MyAppName,并且您创建了权利文件entitlements.xml.我相信这个权利文件对你有用,如果你伪造用ldid代码签名的话.
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0">
<dict>
<key>com.apple.backboard.client</key>
<true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
即使使用上述方法,我在哪里放置上述权利文件?
我正试图在我的越狱iphone上开发iphone应用程序,我似乎无法让这个过程失效,因为无论何时我部署我的应用程序,将所有文件权限设置为777,并且重新启动,当我尝试将应用程序立即关闭时发动它.此外,它没有iphone模拟器中的自动光泽xcode显示,那么是什么给出了?
我通过keychain访问生成了证书,并为REQUIREPROVISIONING和ALLOWPROVISIONING添加了两个密钥(两个值都没有),然后在xcode中设置了相应的证书,但是当我尝试在手机上运行时,应用程序仍然立即关闭.
是什么赋予了?
我有这个越狱的iPhone 3G与iOS版本4.2.1(最新支持的版本).当我将它连接到Xcode 4.2时,Xcode开始复制调试符号.它会在进程结束时停止复制,并显示以下错误:
Xcode has encountered an unexpected error (0xC002)
No such file or directory, at ‘/SourceCache/DTDeviceKit/DTDeviceKit-867/DTDeviceKit/DTDeviceKit_Utilities.m:864’
Run Code Online (Sandbox Code Playgroud)
有没有人遇到类似的事情?
我知道我应该尝试恢复手机,但我要求以防万一有人能想出一个不涉及恢复它的解决方案.
在mactechnews.de的这篇文章中,一个人报告了同样的问题 - 到目前为止没有解决方案.
我正在对我没有源代码的iOS应用程序进行审核.为了获得对环境的更多控制,我在越狱的iPad上运行应用程序.
我希望能够监控应用程序正在进行的API调用...理想情况下,我想找到类似Rohitab的基于MS Windows的API监视器,而不是iOS.
我做了一些研究,发现KennyTM的一个名为" Subjective-C " 的项目似乎可以做我需要的.我实际上一直在使用cycript脚本,以及Google代码站点上提供的libsubjc.dylib.
但是,我一直无法弄清楚如何正确地让它开始记录应用程序的调用.这是由 Subjective-C(libsubjc)的作者编写的cycript脚本的链接.我也粘贴了下面的脚本.
/*
libsubjc.cy ... Use libsubjc in cycript.
Copyright (C) 2009 KennyTM~ <kennytm@gmail.com>
[...GPL3...]
*/
dlopen("libsubjc.dylib", 10);
if (!dlfun) {
function dlfun(fn, encoding, altname) { var f = new Functor(dlsym(RTLD_DEFAULT, fn), encoding); if (f) this[altname || fn] = f; return f; }
}
dlfun("SubjC_start", "v");
dlfun("SubjC_end", "v");
dlfun("SubjC_set_file", "v^{sFILE=}");
dlfun("SubjC_set_maximum_depth", "vI");
dlfun("SubjC_set_print_arguments", "vB");
dlfun("SubjC_set_print_return_value", "vB");
dlfun("SubjC_set_print_timestamp", "vB");
SubjC_Deny = 0, SubjC_Allow …Run Code Online (Sandbox Code Playgroud)