Androidアプリapkから広告を除こう オフラインアプリ&オンラインアプリ

非Root化のAndroid端末において広告を出ないようにアプリを利用しようとしたときのメモ

対象者

  • 自分でぐぐれる
  • adb.exeをパスに通ってる
  • apktool等のツールと知識を持ってる
  • USBデバッグがオン

環境

  • 作業側 Windows10 pro 64bit
  • 端末側 Android 6.0

オフラインのアプリの広告

オフラインアプリの広告は簡単に除ける。実は「除ける」、という表現は正確ではない。マニフェストを書き換えてアプリをオフライン状態にする、というのが正しい。
複数やり方があるが、最も簡単なやり方を紹介する
まず、Google PlayからAPK Permission Removerをダウンロードしてインストールしよう

☆手順
1.アプリを起動する
2.Open an appを起動する
3.マニフェストを編集したいアプリを選択
4.ネットワークへのアクセス等をタップし❌マークにする
5.Save&Re-Installを選択してアンインストールしてからインストールする

実験1

Grapher
フリーの数式をグラフにしてくれるアプリ
g.PNG

まず、加工なしVer
gra_b.jpg

ネットワーク関係のマニフェストを書き換える
gra.jpg

すると...
gra_a.jpg
下の方にmissing internet permission in androidmanifest.xmlって出ちゃってますねorz

実験2

次は、関数電卓 Panecalをやってみる
手順通りにやって実行すると...
p.png
正常に起動できず終了してしまいましたorz

オンラインアプリ

ここから本題
オフラインアプリはマニフェストを書き換えて強制オフライン状態にすれば容易にできました。しかも、マニフェストを編集するアプリがストアにあるので誰でも簡単に出来ます(APK Permission Removerの他にもApk Editerなどでも出来る)
しかし、オンライン状態で使用するアプリでは上記のやり方では意味のないアプリとなってしまいます

今回はQiitaに載せるという点を考えてQiitappをターゲットにします
q.PNG

☆手順
1.Google Playからapk抽出をダウンロードしてインストールしましょう。apk抽出はインストールされてるアプリをapkファイルとして抽出できるアプリ。
2.apk抽出を使用して広告を除きたいアプリを選択し抽出し作業側にコピーする
3.apkをデコンパイルする

$ apktool.bat d Qiitapp.1.1.1.apk
I: Using Apktool 2.0.0 on test.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\[USER]\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
testI: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

4../Qiitapp.1.1.1/smali/com/google/android/gms/ads内をゴニョゴニョしたsmaliファイルに置き換える(後で記述)

5.ビルドする

$ apktool.bat b Qiitapp.1.1.1 test.apk
I: Using Apktool 2.0.0
I: Checking whether sources has changed...
I: Checking whether resources has changed...
I: Building apk file...

ビルドすると./Qiitapp.1.1.1/dist内にtest.apkが出来る

6.署名

$ keytool -genkeypair -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 10950 -dname "CN=Android Debug,O=Android,C=US" -keystore debug.keystore -storepass android

すると、debug.keystoreが出来るのでこれを署名に利用

$ jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA1 -tsa http://timestamp.digicert.com -keystore debug.keystore -storepass android test.apk androiddebugkey

7.インストール

$ adb install test.apk
2407 KB/s (2206166 bytes in 0.894s)
        pkg: /data/local/tmp/test.apk
Success

apk取ってくるのもadbでもいいんだよね・・・(´・ω・`)
d.PNG
微妙に変わってます

起動して確かめる

Before
Screenshot_2017-03-06-23-55-20.jpg

↓↓↓↓↓↓

After
Screenshot_2017-03-06-23-56-41.jpg
無事広告が消えました!!v(´・ω・`)v

smaliのゴニョゴニョについて

変更点は複数箇所あるので1部を紹介

例えば、Qiitapp.1.1.1/smali/com/google/android/gms/internal/az.smali内の

    const-string v0, "https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html"

↓↓↓↓↓↓

    const-string v0, "https://googleads.g.doubleclick.ne@/mads/static/mad/sdk/native/sdk-core-v40.html"

他にもQiitapp.1.1.1/smali/com/google/android/gms/ads/内の多くを書き換えてます

他のアプリ

同様にポケモンGoのあのアプリやまとめサイトリーダーのアプリ側の広告などなど
Screenshot_20170306-233248.png

失敗するアプリもあります。起動しなかったら諦めましょう

最後に

作者様...問題がありましたらコメント欄に「削除しろよおおお」ってあれば速攻でこの記事削除して「ごめんなさい」します

210contribution

Qiitaの利用規約8.4

4 ユーザーは、本サービスの「Qiita」を利用するに際し、以下のような行為を行ってはなりません。
(1) 他者の著作権や機密情報、その他の権利を侵害する情報を掲載する行為

に明確に違反すると思います。

37contribution

広告収入というのは製作者側の正当な対価なわけですが、それを受ける権利を侵害するのですか?:worried:

27contribution

@ryo716 面白い話をありがとうございます。興味深く読ませていただきました。

他者の著作権や機密情報

Ad系の表示する技術の侵害あたりかなー smaliのURL書き換えとかしている箇所あたりで?
<再パッケージの手順まで書いてないからセーフ?(苦笑

ただ Qittaは企業サイトでクレームに弱いので、個人ブログとかで書いていただいたほうが消される恐れがなくて良いかも
(そういう意味だと apktoolsの記事とかもグレーなんですよねw

あとはQittaappという他の人のアプリでなく、自分で広告表示用のテストアプリを作っての検証記事に修正したほうが
記事の内容の焦点的にはベターかと思いますよ

139contribution

予想通りお叱りの言葉
smaliのゴニョゴニョについて全て詳しく書いてないからし他のapktool系の記事あるし大丈夫かなぁ~って思ったけどダメみたいなの

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.