no-image

THEOSで広告非表示

久しぶりすぎていろいろ忘れすぎているので今更だけど。

まずは調べたいアプリのBundleIDを調べます。調べ方は以下の記事を参考に。

というか、この記事大雑把すぎて自分で見ても意味不明だったのでしっかり書き直します。

BundleIDsはiOS11では動作しないのでBundleIDXIをインストールします。レポジトリを追加する必要があるので追加しましょう。

THEOS

THEOSは4つのパーツに分かれています。

  • Makefile
    プログラムをビルドするときの設定を記述する。
  • Tweak.xm
    Tweakのプログラムとなるもの。ソースコードを記述する。
  • プロジェクト名.plist
    Tweakの対象となるアプリケーションのBundleIDが書かれたもの。弄ることはありません。
  • control
    Cydia等に表示されるTweakの説明文を記述する。

プロジェクトの作成

まずはプロジェクトを作りましょう。

$THEOS/bin/nic.pl

でツールを呼び出します。

------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/cydget
[4.] iphone/flipswitch_switch
[5.] iphone/framework
[6.] iphone/ios7_notification_center_widget
[7.] iphone/library
[8.] iphone/notification_center_widget
[9.] iphone/preference_bundle_modern
[10.] iphone/tool
[11.] iphone/tweak
[12.] iphone/xpc_service
Choose a Template (required): 11

どんなtweakを作るかと尋ねられるので11を選択します。これ以外は難しくて全然わかりません!!

Project Name (required): ikawidget2
Package Name [com.yourcompany.ikawidget2]: work.tkgstrator
Author/Maintainer Name [Asano Kazuna]: Tkgling

プロジェクト名とパッケージネームを決めます。パッケージネームはURLを逆にしたものを使うのが普通だとか。

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:

この辺はよくわからないのでエンターキー連打で。

Makefile

ARCHS = armv7 arm64
THEOS_DEVICE_IP = 192.168.xxx.xxx(自分の脱獄済みデバイスのIPアドレス)
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = ikawidget2
Test_FILES = Tweak.xm
Test_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"

64ビットデバイス(iPad Mini 2以降)に対応させたい場合はARCHSのところをこのように書きます。

ここで試しに

make

とやってみる。

xcrun: error: SDK "iphoneos" cannot be located
==>; Error: You do not have an SDK in /Library/Developer/CommandLineTools/Platforms/iPhoneOS.platform/Developer/SDKs or /opt/theos/sdks.
make: *** [before-all] Error 1

みたいなエラーがでたときはtheosが正しくxcodeを認識できていないということなので以下のコードで修正すること。

sudo xcode-select -switch /Applications/Xcode.app

Control

適当に書いておけば問題ないです。

Package: work.tkgstrator.ikads2
Name: ikads2
Depends: mobilesubstrate
Version: 0.0.1
Architecture: iphoneos-arm
Description:  Remove ads for ikaWidget2. This tweak is beta version.
Maintainer: tkgling
Author: tkgling
Section: Tweaks

ぶっちゃけてしまうとデフォルトのままでも困りません。

Tweak.xm

本題のプログラム本体になります。

以前書いていた記事では結局何してたのかよくわからなかったので、ここでは誰でも真似できるようにやっていきたいと思います。

その前に、インストールしておくと便利な脱獄Tweakを紹介します。

  • FLEX 3
    関数を見つけるための超便利なツール。
  • FLEXible
    FLEX3をさらに直感的にしたツール。

Tweakをつくるぞ

自分が欲しいと思う機能は脱獄チェック回避か広告削除なので、今回はそれをやろうと思います。

ただ、広告非表示というのは広告によるマネタイズを真っ向から否定することなので、その仕組みでお金を稼ぐのはなんか違う気がする。

もちろん、広告は仕組みとして理解しているのでいいんだけど。

課金したら非表示にできるならいいんだけど、そうできないやつは「自分で非表示にするか」ってなるわけですね。

脱獄チェック回避

脱獄回避はFLEX3で調べると早いです。

  • Jailbreak
  • root
  • detect

みたいな名前がついた関数があればそれが脱獄チェック機能である可能性が非常に高いです。特に返り値がBool型の場合はまず間違いなくそれでしょう。

では三菱UFJ銀行のアプリの脱獄チェックを回避してみましょう。

この例の場合は「ルート化を検知したか」という関数なのでFALSEを常に返すことでチェックを回避することができます。

これをFLEX3のコードにすると上の画像のような感じになるのですが、これをTHEOSで実現しようとすると以下のようなコードになります。

%hook CMNSecurityManager
- (bool)isRootDetected
{
    return FALSE;
}
%end

たったこれだけ。まあこれくらいなら普通にFLEXでやってもいいんですけれども。FLEXの最大の長所はvoid型の関数にhookできないということなのです。

つまり、返り値を変えることしかできないわけです。

広告非表示

広告を非表示にするには以下の方法がある。

  • 属性をhiddenにする
    隠れているだけなので実は裏では動いている。
  • 広告サイズを0にする
    サイズが0なだけで通信はしているので広告をダウンロードしている。
  • インスタンスを生成させない
    これが最強。だけど使い方がよくわからない。

手っ取り早いのは属性をhiddenにすることなのでしてみましょう。

ここではJaneStyleを例にします。

%hook AppDelegate
- (bool) isShowADG
{
    return FALSE;
}
%end

この場合は広告を表示するかどうかをBool型で判定しているのでFALSEを返しておけばオッケーです。

make

make package

make

でビルドすることができる。この時オプションを何も指定しなければdegug版になる。debugはその名の通りデバッグしやすいが、その代わりプログラムが最適化されておらず実行が遅いという問題がある。

脱獄アプリをリリースしたい場合は、

make package DEGUB=0

とすればリリース版がビルドされる。最適化するのでビルドにはちょっと時間がかかるので注意。

install

make install

でMakefileで指定されたIPアドレスの端末にdebファイルがインストールされます。SSH経由なので脱獄していないデバイスでは当然できません。

ちゃんとOpenSSHをインストールしてポート22を解放しておきましょう。

…あれ、iOS8くらいからポート22って繋がらなくならなかったっけ??

と思ったらlocalhostで22がsandboxで繋げなくなったとかそんなんでしたね。外部からでは今までと同じようにポート22で繋がるみたいです、。

レポジトリを公開する

最王手のレポジトリBigBossに登録してもいいんだけどなんだかめんどくさそうなので自分でレポジトリを作ることにしました。

既にWebサーバを持っている人であればとっても簡単です。

Packages

まずはapacheなりnginxなりでブラウザからアクセスできるディレクトリを用意します。

その中に作成したdebファイルを配置して以下のコマンドを実行します。

dpkg-scanpackages -m . /dev/null > Packages
gzip Packages

これで基本的なことは全て終わってしまうっていうね。

Packagesっていうのはdebファイルをリスト形式で記述しているやつです。これをダウンロードすることでそのリポジトリにどんなアプリが登録されているかわかるわけですね。

Release

レポジトリに関する情報を書いておけるファイルです。

Origin: tkgling.mydns.jp
Label: tkgling.mydns.jp
Suite: stable
Version: 1.0
Codename: stable
Architectures: iphoneos-arm
Components: main
Description: I love Splatoon2 so much.

こんな感じで書いておけば大丈夫です。

CydiaIcon

レポジトリのアイコンを設定するにはCydiaIcon.pngっていうファイルを配置しておけばオッケーです。画像サイズは59×60推奨らしいのですが、それ以外でも動きました。

完成

脱獄アプリを3つほどリリースしてるので登録してみてね!!