<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hello World!!&#187; launchctl</title>
	<atom:link href="http://bhags.org/?feed=rss2&#038;tag=launchctl" rel="self" type="application/rss+xml" />
	<link>http://bhags.org</link>
	<description>Welcome to Sinyu&#039;s  site</description>
	<lastBuildDate>Mon, 06 Nov 2017 04:17:27 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8.1</generator>
	<item>
		<title>iPhone ip address 自動更新 airplane モードをCommand lineで実行</title>
		<link>http://bhags.org/?p=606</link>
		<comments>http://bhags.org/?p=606#comments</comments>
		<pubDate>Mon, 29 Jun 2015 03:01:28 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Objective-c]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[airplane mode]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[launchctl]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=606</guid>
		<description><![CDATA[[課題] iPhoneのGlobal ip addressを自動更新 [方針] 1.network [...]]]></description>
				<content:encoded><![CDATA[<p>[課題]<br />
iPhoneのGlobal ip addressを自動更新<br />
[方針]<br />
1.network deviceを再起動し更新 (成功)<br />
2.airplane modeをprivate apiを利用し on / off　(成功)</p>
<p>[対策詳細1]<br />
Step<br />
1)iPhone Jail break<br />
2)open-ssh install<br />
3)network restartメッソドを実装<br />
4)アプリをルートアプリに昇格</p>
<p>1) iPhone Jail break<br />
- 7.1.x<br />
- iTunesがインストールされているかを確認すること</p>
<p>http://tools4hack.santalab.me/how-to-ios71-ios711-untethered-jailbreak-pangu.html</p>
<p>2)-open-sshインストール<br />
cydiaよりインストール</p>
<p>3)network refresh method<br />
3-1)ダメな方法<br />
[参考URL] http://www.sinfuliphone.com/showthread.php?t=2144<br />
network commandをインストールしrefreshする方法はwifiは更新できるが<br />
3G/4G回線は更新できなかった。<br />
3-2)成功した方法<br />
system(&#8220;/bin/launchctl  unload -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist&#8221;);<br />
system(&#8220;/bin/launchctl  load -w /System/Library/LaunchDaemons/com.apple.CommCenter.plist&#8221;);<br />
CommCenter自体をリロードすることでネットワークの更新に成功</p>
<p>4)アプリをルートアプリに昇格<br />
3)の実施にはアプリをルートアプリに昇格させる必要がある。<br />
4-1)main.mにルート権限取得コード追加<br />
//setuidとsetgidを実施<br />
int main(int argc, char * argv[]) {<br />
    @autoreleasepool {<br />
        if (!(setuid(0) == 0 &#038;&#038; setgid(0) == 0))<br />
        {<br />
            NSLog(@&#8221;Failed to gain root privileges, aborting&#8230;&#8221;);<br />
        }<br />
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));<br />
    }<br />
}<br />
4-2)iPhoneでアプリをルートに昇格(sample.app)</p>
<p>/private/var/mobile/Applications/xxxrandomstringxxxx/sample.appを<br />
/Applications/へ移行 </p>
<p>/Applications/sample.app/sample を<br />
/Applications/sample.app/sample2へ名前変更</p>
<p>エラー回避の為のDirectory 生成<br />
mkdir -p /var/db/launchd.db/com.apple.launchd</p>
<p>sydiaよりテキスト編集nanoをインストール</p>
<p>nanoで　/Applications/sample.app/sampleを新規生成<br />
下記ソースを追加</p>
<p>権限設定<br />
chown -r root.wheel /Applications/sample.app<br />
chmod 755 /Applications/sample.app/sample<br />
chmod 6775 /Applications/sample.app/sample2</p>
<p>spring boardをリスタート<br />
-端末を再起動するか、cydiaよりrespringアプリをインストールして実行<br />
上記でアプリがルート権限で実行可能になる</p>
<p>[対策詳細2]-airplaneをプログラムでon/off<br />
1)jail break<br />
2)ssh install<br />
3)private api /AppSupport.framework/RadiosPreferences.hを使用<br />
3-1)private frameworkをxcodeへ追加.frameworkの経路は下記<br />
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/PrivateFrameworks/AppSupport.framework<br />
3-2)airplane mode用下記headerを作成</p>
<p>#import <Foundation/Foundation.h><br />
@interface RadiosPreferences : NSObject {<br />
    int _applySkipCount;<br />
    BOOL _cachedAirplaneMode;<br />
    NSObject<OS_dispatch_queue> *_dispatchQueue;<br />
    BOOL _isCachedAirplaneModeValid;<br />
    struct __SCPreferences { } *_prefs;<br />
    BOOL notifyForExternalChangeOnly;<br />
}</p>
<p>@property (nonatomic) BOOL airplaneMode;<br />
@property (nonatomic) BOOL notifyForExternalChangeOnly;</p>
<p>+ (BOOL)shouldMirrorAirplaneMode;</p>
<p>- (BOOL)airplaneMode;<br />
- (void)dealloc;<br />
- (id)delegate;<br />
- (void*)getValueForKey:(id)arg1;<br />
- (id)init;<br />
- (id)initWithQueue:(id)arg1;<br />
- (void)initializeSCPrefs:(id)arg1;<br />
- (BOOL)notifyForExternalChangeOnly;<br />
- (void)notifyTarget:(unsigned int)arg1;<br />
- (void)refresh;<br />
- (oneway void)release;<br />
- (void)setAirplaneMode:(BOOL)arg1;<br />
- (void)setAirplaneModeWithoutMirroring:(BOOL)arg1;</p>
<p>- (void)setDelegate:(id)arg1;<br />
- (void)setNotifyForExternalChangeOnly:(BOOL)arg1;<br />
- (void)setValue:(void*)arg1 forKey:(id)arg2;<br />
- (void)synchronize;<br />
@end</p>
<p>3-3)on / off code<br />
    RadiosPreferences* pref  = [[RadiosPreferences alloc] init];<br />
    pref.airplaneMode = (YES/NO);<br />
    [pref synchronize];<br />
4)実行権限よentitlement追加<br />
airplaneモードメッソド実行のためにバイナリーへ下記entitlementを追加<br />
4-1)ldidインストール<br />
署名用のldidインストール<br />
git clone git://git.saurik.com/ldid.git<br />
cd ldid<br />
git submodule update &#8211;init<br />
/*<br />
make.sh内のXcodeのpathを修正<br />
*/<br />
./make.sh<br />
cp -f ./ldid　/usr/local/bin/ldid</p>
<p>4-2)アプリケーションを一度端末で起動<br />
上記で端末にアプリケーションが生成される<br />
あとは権限が適用されたバイナリに入れ替える</p>
<p>4-3)権限entitlement.xml</p>
<p><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></p>
<plist version="1.0">
<dict><br />
    <key>com.apple.SystemConfiguration.SCDynamicStore-write-access</key></p>
<true/>
    <key>com.apple.SystemConfiguration.SCPreferences-write-access</key><br />
    <array><br />
        <string>com.apple.radios.plist</string><br />
    </array><br />
</dict>
</plist>
<p>4-3)権限をバイナリへ適用<br />
cd ~/Library/Developer/Xcode/DerivedData/{sampleapp-randomsting}/Build/Products/Debug-iphoneos/sampleapp.app/<br />
ldid -S/path/to/entitlement.xml sampleapp<br />
注意！-Sの次に空白を入れないこと。でないとエラーが発生</p>
<p>4-4)バイナリsampleappをiphoneへscp移行<br />
scp sampleapp root@iphone.local.ip:~</p>
<p>4-5)iPhoneのshellで<br />
cp ~/sampleapp /private/var/mobile/Applications/{randomstring}/sampleapp.app/</p>
<p>4-6)respring<br />
再起動もしくはcydiaよりrespringアプリをダウンロードしrespring</p>
<p>以上</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=606</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
