mikiyan1978’s 脱獄情報日記

脱獄に関する情報を発信します

単体theosでmake時の自動インストール

こんばんは、mikiyan1978です。 かなりお久しぶりのことと存じます。 仕事が超多忙なのと、ホームオーディオ、カーオーディオにハマってしまい脱獄そっちのけになっていました、、、

さて今回は、単体theosでコンパイル、ビルドしたdebをそのままインストールさせる方法です。 通常ならばMakefile

THEOS_DEVICE_IP = 127.0.0.1

と記述する事でインストール出来るのですが、ここ最近、この記述をしているのにも関わらず、下のようなエラーが出て困っていたので対処しました。 その対処法についてになります。

まずTerminalよりrootログインします。 次にcdにて/var/rootに移動します。

cd /var/root

そして下記コマンドを実行します。ここで注意ですが、途中でパスフレーズを要求されますが何も入力しないで下さい。今回は自動インストールさせる事が目的ですので、パスフレーズを設定してしまうと本末転倒になります。未入力のままenter keyを押して進んで下さい。

ssh-keygen && cd .ssh && cat id_rsa.pub >> authorized_keys

すると/var/rootに ./sshという隠しフォルダが作成されます。更にその中に3つのファイルが作成されていると思います。 このファイルはSSH秘密鍵,公開鍵のキーペアを作成するコマンドです。 id_rsa秘密鍵) id_rsa.pub (公開鍵) authorized_keys authorized_keysというファイルは本来、接続先のサーバーに作成配置するものですが、今回は単体theosでのインストールになります。つまり、接続先は自身となります。したがって、同じ配下に作成する必要があります。 ここまでで完了となりますが、このままコンパイルすると このようなメッセージが表示されます。これは初回SSH接続時に表示されます。 次のように、yesと打ち込みます。 これでインストールが実行されるはずです。 因みに、yesと回答する事で known_hosts というファイルが作成されます。 sshでは、2回目のログインからホスト認証が自動的に行われます。この認証では、ホスト鍵が利用されます。sshのknown_hosts とは、サーバのホスト鍵(host key)の1つのホスト公開鍵を登録するファイルです。 はじめてログインするホストのホスト鍵は、ユーザは通常は持っていないため、known_hostsに追加するか、sshコマンドによって確認されます。2回目以降のログインについては、known_hostsにホスト鍵が登録されているため、sshコマンドによって、自動的にホスト認証が実施されます。 以上で次からのコンパイルでは自動インストールされるようになります。 この./sshフォルダは別の場所へバックアップしておく事で、誤って消してしまった時などに、このディレクトリへ再度コピーするだけで済みます。

自作メソッドの作成方法

こんばんは、mikiyan1978です。
今回は自作メソッドの作成方法を紹介します。
Tweak作成などで同じ処理を何度も書くのは面倒ですよね。短いものならまだしも、長くなるとコピペするにしても、後々確認する場合なんかにそこまでたどり着くのが困難になります。そこで長い処理は短く簡略化したくなります。

例としてRespringすると特定の設定画面で復帰する事ができるCepheiのHBRespringControllerをメソッド化してみましょう。

通常なら

[HBRespringController respringAndReturnTo:[NSURL URLWithString:@"prefs:root=LINEhooker"]];

と言った書き方をします。まあこれはこれで短いしそこまで面倒ではありませんが、、、笑

まずHBRespring.hというヘッダーファイルを作成します。ヘッダー名は分かりやすい名前で大丈夫です。中身は

#import <Cephei/HBRespringController.h>

@interface HBRespring : NSObject
+ (void)hbrespring:(NSString *)prefName;
@end

そしてHBRespring.mという実装ファイルを作成します。中身は

#import "HBRespring.h"

@implementation HBRespring

//prefNameが@"prefs:root=xxxxx"に置き換えてくれます。
+ (void)hbrespring:(NSString *)prefName {
	[HBRespringController respringAndReturnTo:[NSURL URLWithString:prefName]];
}

@end

これでひとまず完成です。使い方ですが、私の場合ですとRespringしたあとLINEhooker画面で開きたいなぁ、と言った場合は

#import "HBRespring.h"//インポート文は必要

NSString *HBRstr = @"prefs:root=LINEhooker";

//使いたい場所で下のように書くだけ
[HBRespring hbrespring:HBRstr];

因みに@"prefs:root=LINEhooker"
この部分ですが、LINEhookerがLINE hookerといった空白が含まれる場合の書き方は
LINE%20hooker
このように空白部分を%20で置き換えてあげる事で回避できます。

質問がありましたら下記よりお願いします。
LINE
友だち追加

Twitter

iOSデバイスにZ Shellを導入する方法

皆さん、お久しぶりです。mikiyan1978です。
今回は脱獄済みiOSバイスZ Shellを導入する方法を紹介します。

まずCydiaよりZ Shellをインストールします。
f:id:mikiyan1978:20201010203244p:plain

インストールが終わりましたらFilzaなどで
/etc/master.passwd
このファイルを開きます。そして下記の部分二ヶ所を
bashという文字列をzshという文字列に書き換えます。
f:id:mikiyan1978:20201010204305p:plain

次に/etc/passwdファイルも同様に二ヶ所書き換えます。
この2つのファイルは重要ファイルとなります。書き換え場所に少しでも迷ったらすぐにやめてください。

次に/etcディレクトリに.zshrcというファイルを作成します。
f:id:mikiyan1978:20201010204906p:plain

そのファイルに次のように書き込みます。

export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games:/usr/libexec'

alias ls="ls -Fb --color=auto -T 0"

unsetopt PROMPT_SP

autoload -U compinit
compinit

autoload -Uz colors
colors

次に
/var/root
/var/mobile
この二ヶ所のディレクトリに先ほど作成した.zshrcファイルのシンボリックリンクを作成します。

以上が基本的なZ Shell導入方法です。

質問がありましたら下記よりお願いします。
LINE
友だち追加

Twitter

簡単なTweak作成方法

どうもmikiyan1978です。
今回は初心者向けの簡単なTweakを作っていきましょう。
Respringから復帰したその5秒後にRespringするかどうかを示すアラートを表示させるTweakです。

よく脱獄系のブログで見られる%hookを使った方法では無く独自のやり方で作成します。

theos構築などは割愛します。

早速Tweakプロジェクトを作成します。名前は
springalert
としましょう。
そしてTweak.xmに

#import <objc/runtime.h>

@interface FBSystemService : NSObject
+ (id)sharedInstance;
- (void)exitAndRelaunch:(BOOL)arg1;
@end

%ctor {
	%init;
	[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidFinishLaunchingNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notification) {
	dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

	UIAlertController *alert = [UIAlertController 
		alertControllerWithTitle:@"Respringアラート" 
		message:@"Respringしますか?" 
		preferredStyle:UIAlertControllerStyleAlert];

	[alert addAction:[UIAlertAction 
		actionWithTitle:@"はい"
		style:UIAlertActionStyleDefault 
		handler:^(UIAlertAction *action) {
			[[objc_getClass("FBSystemService") sharedInstance] exitAndRelaunch:YES];
		}]];

	[alert  addAction:[UIAlertAction 
		actionWithTitle:@"いいえ"
		style:UIAlertActionStyleCancel 
		handler:nil]];

	[[[UIApplication sharedApplication] keyWindow].rootViewController 
		presentViewController:alert 
		animated:YES 
		completion:nil];
	});
}];
}

このように書きます。難しい事は抜きにしましょう。

次にMakefileには

ARCHS = arm64 arm64e
#下記は使用するSDKと最低動作iOSバージョンです
#必要に応じて書き換え/コメントアウト解除してください。
#TARGET = iphone:clang:latest:10.0
INSTALL_TARGET_PROCESSES = SpringBoard

include $(THEOS)/makefiles/common.mk

TWEAK_NAME = springalert
$(TWEAK_NAME)_FILES = $(wildcard *.xm)
$(TWEAK_NAME)_FRAMEWORKS = UIKit

include $(THEOS_MAKE_PATH)/tweak.mk

編集は以上です。あとはmake packageしてください。

質問がありましたら下記よりお願いします。
LINE
友だち追加

Twitter

Libraryの作成方法

こんばんは、mikiyan1978です。
今回はLibraryの作成方法について紹介します。
Tweak開発において、例えば同じ実装コードをその都度いちいち全て書くのは面倒くさいですよね?
そこで今回は簡単な例として、Respring専用のLibraryを作成する方法について書きたいと思います。

まずtheosにてTweakプロジェクトを作成します。
プロジェクト名は分かりやすくlibrespとしましょう。
次にlibresp.hというファイルを新規作成します。
中身は

#import <notify.h>

@interface FBSystemService : NSObject
+(id)sharedInstance;
-(void)exitAndRelaunch:(BOOL)arg1;
@end

このように書きます。これは脱獄依存のRespringコードではなくiOS純正コードです。


Tweak.xmには

#import "libresp.h"

static void respring(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
	[[%c(FBSystemService) sharedInstance] exitAndRelaunch:YES];
}

%ctor {
	CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), 
	NULL, respring, 
	CFSTR("com.libresp.respring"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
}

このように書きます。

次にMakefile

after-stage::
	cp .theos/obj/debug/libresp.dylib $(THEOS)/vendor/lib
	mkdir -p $(THEOS_STAGING_DIR)/$(THEOS)/vendor/include/libresp
	cp libresp.h $(THEOS_STAGING_DIR)/$(THEOS)/vendor/include/libresp

これを追加します。

後はコンパイル、インストールして完了です。

次にこの作成したLibraryの使い方を説明します。
実装したいプロジェクトのcontrolファイルのDepends項目にこのLibraryのBundle IDを追加します。Bundle IDはこのLibraryのcontrolファイルで確認できます。リポジトリにLibraryを公開してあるのが条件です。Libraryを使用したTweakなどを公開せず自分自身だけで使う場合は必要ありません。

次にMakefileに下記を追加します。

$(TWEAK_NAME)_LIBRARIES = resp
#$(TWEAK_NAME)の部分はプロジェクトに合わせて変更してください。

次に実装ファイルやヘッダーファイルに下記を追加します。

#include <libresp/libresp.h>

以上で追加記述は完了です。後はRespringさせたい場所にて下記コードを書くだけです。

notify_post("com.libresp.respring");

注意ですが今回の記事で自身で作成したLibraryをコンパイル、インストールした後にそのLibraryを使う場合はファイルなどの追加はMakefileにて全て完結しますが、リポジトリなどに公開し他の方が使うなどの場合、
/Library/Mobile Substrate/DynamicLibrariesにあるlibresp.dylibファイルを
/var/theos/libにコピーする必要があるので、その旨を説明しておく必要があります。
本来、theos構築は人それぞれであり、インストール時にいきなりtheosフォルダーへ配置されるのは後々その人のtheosによるコンパイルへの悪影響や不具合にも繋がるので、Libraryのヘッダーファイルやdylibファイルはユーザーがインストール後に手動で配置させるのがいいですね。

質問がありましたら下記よりお願いします。
LINE
友だち追加

Twitter

A12対応の単体theos構築方法

どうも、mikiyan1978です。
今回はA12対応(arm64e)の単体theos構築方法です。早速参りましょう。

必要なパッケージ
Theos Installer 2 (unc0ver and checkra1n)
これは私のリポジトリにあります。

Theos Installer 2 (unc0ver and checkra1n)をインストール出来ましたら、次のコマンドをrootで実行します。

theosinstaller 10.3

完了しましたら_Prefixをダウンロードして
/var/theos/include
このフォルダーに配置します。解凍すると_Prefixフォルダーの中に更に_Prefixフォルダーがある場合は、それを配置して下さい。
また、既に存在していたらこの作業は必要ありません。

次に
/var/theos/makefiles/package/deb.mk
このファイルを開き下記の画像の部分を
gzipに書き換えます。


ひとまず構築自体はこれで完了です。
Tweak作成につきましては、こちらを参考にして下さい。

質問がありましたら下のLINE追加ボタンより追加して下さい。またはTwitterにてお願いします。
友だち追加