コード探偵の事件簿:ReVancedが解き明かすアプリのリバースエンジニアリング


コード探偵の事件簿:ReVancedが解き明かすアプリのリバースエンジニアリング

ReVanced/revanced-patches

2025-09-16

皆さん、こんにちは。名探偵の皆さん、お集まりいただきありがとうございます。

さて、今回の事件は、とあるAndroidアプリにまつわる、巧妙に仕組まれた密室殺人事件です。被害者は、誰もが知るあの動画配信アプリ。彼は、数々の「制限」という名の鎖に縛られ、身動きが取れない状態にありました。しかし、今宵、その鎖を断ち切り、新たな命を吹き込む「パッチ」という名の秘密道具の存在が明らかになったのです。

犯行現場は、GitHubという名の巨大な図書館の一室。「ReVanced/revanced-patches」と名付けられたこのファイルには、被害者(アプリ)のDNAを書き換え、より自由に、より快適に使えるようにする、驚くべき「パッチ」の数々が収められています。

さあ、皆さんと一緒に、この事件の真相、そして、この「パッチ」が私たちソフトウェアエンジニアにとって、いかに重要な手がかりとなるのか、解き明かしていきましょう。

この「revanced-patches」は、まさにソフトウェアエンジニアにとっての「アリバイ崩し」の決定的な証拠です。

密室の鍵を開ける(リバースエンジニアリングの学習)

このパッチ群は、既存のAndroidアプリがどのように動いているのかを深く理解する(リバースエンジニアリング)ための、生きた教材です。

Kotlinという言語で書かれたコードを読み解くことで、他のエンジニアが書いたコードの構造や、アプリの内部動作を学ぶことができます。これは、自分のアプリ開発の引き出しを増やす上で非常に役立ちます。

事件現場を自在に改造する(カスタマイズ性の理解)

パッチは、既存のアプリの機能を「変更」「追加」「削除」するものです。例えば、動画の広告を消したり、バックグラウンド再生を可能にしたり。

これは、アプリのカスタマイズ性を探求する上で、格好のサンプルになります。自分の開発するアプリに、ユーザーが自由に機能を追加・変更できるような仕組みをどうやって組み込むか、そのヒントを得ることができます。

完璧なアリバイを崩す(パッチ適用の技術)

このプロジェクトの核心は、既存のAPKファイル(Androidアプリの実行ファイル)を直接変更する技術です。

これは、既存のソフトウェアに手を加える「パッチ適用」の技術を学ぶ絶好の機会です。ソフトウェアの脆弱性を修正したり、新しい機能を追加したりする際に、ソースコードがない場合でも対応できる、非常に高度な技術です。

さて、探偵の皆さん、事件の真相に迫るためには、このパッチをどうやって使うのか、その方法を知る必要があります。

必要な道具を揃える

revanced-cli
パッチを適用するための「万能ツール」です。これは、コマンドライン(ターミナル)で動かすプログラムで、事件現場(APKファイル)にパッチを適用する役割を担います。

revanced-patches
今回の主役、パッチが詰まったファイルです。

revanced-integrations
パッチがうまく動くように、必要な土台を整えるためのファイルです。

標的となるAPKファイル
謎を解くべき、元のAndroidアプリの実行ファイルです。

犯行声明文(手順)を読む

GitHubから、最新のrevanced-cli.jarrevanced-patches.jarrevanced-integrations.jarをダウンロードします。

同じく、標的となるアプリのAPKファイルを準備します。

コマンドラインを開き、次の呪文を唱えます。

java -jar revanced-cli.jar -a "標的のアプリ.apk" -o "改造後のアプリ.apk" -b "revanced-patches.jar" -i "revanced-integrations.jar" --exclude-patch="特定のパッチID"

-a
標的のAPKファイル

-o
改造後のAPKファイル(新たな命を吹き込まれたアプリ)

-b
パッチの場所

-i
統合ファイルの場所

--exclude-patch
特定のパッチを適用したくない場合に使うオプション。これは、証拠を隠滅したいときに使われるかもしれませんね。

魔法の呪文を唱えると、新しいAPKファイルが生成されます。これをAndroidデバイスにインストールすれば、事件は解決です!

実際に、このパッチがどのように書かれているのか、その一端を覗いてみましょう。

以下は、revanced-patchesの中にある、とある「広告を消すパッチ」のコードの断片です。Kotlinという言語で書かれています。

// パッチのクラス定義
class RemoveAdsPatch : Patch() {

    // どのメソッドに手を加えるか指定
    override fun getMethods() = listOf(
        // 'com.google.android.ads.AdView' クラスの 'loadAd' メソッド
        // ここが広告を読み込む犯行現場です
        Method(
            className = "com.google.android.ads.AdView",
            methodName = "loadAd",
            parameters = listOf("com.google.android.ads.AdRequest"),
            isStatic = false,
            // どんなパッチを当てるか
            patch = {
                // ここで広告を読み込む処理を「無効化」します
                // 実際には、このメソッドを空っぽにして、何も実行しないようにします
                // 証拠を消し去る瞬間です
                mv.visitInsn(Opcodes.RETURN)
            }
        )
    )
}

このコードは、まさに探偵が事件現場で「ここが犯行現場だ!」と指差すようなものです。

classNamemethodNameで、変更すべきアプリの内部の場所(広告を読み込むメソッド)を特定しています。

patchの中のmv.visitInsn(Opcodes.RETURN)が、そのメソッドを「何もしない」ように書き換える、アリバイ崩しのコードです。

このように、このプロジェクトは単にアプリを改造するだけでなく、その裏側にある「どうやって既存のソフトウェアに手を加えるか」という、高度な技術を学ぶための宝庫なのです。

さあ、名探偵の皆さん。この「revanced-patches」というファイルが、いかに私たちの探求心をくすぐる素晴らしい事件ファイルであるか、お分かりいただけたでしょうか。


ReVanced/revanced-patches




【江戸のエンジニア魂】AirPodsをAppleの鎖から解き放つ!「librepods」で挑むリバースエンジニアリングの極意

まずはっきり言っておくが、これは「kavishdevar/librepods」ってなブツに関する話だ。これはAirPodsをAppleの縄張りから解放しちまおうってな、ちょいと粋なプロジェクトでよ、AndroidやLinuxでAirPodsを自由に使いこなすための道筋をつけるもんさ。


モビルスーツ級の高性能!k2-fsa/sherpa-onnx徹底解剖と実戦導入ガイド

「連邦の白いヤツ」...ではなく、ソフトウェアエンジニアの皆さん!今回は、オフラインでの音声処理を強力にサポートするライブラリ k2-fsa/sherpa-onnx について、その能力と活用法を、さながらモビルスーツの機能解説のように、分かりやすく、フレンドリーに解説していきます!


テスト自動化の救世主!LLMとAndroidを結ぶ「droidrun」の粋な使い道

こいつは面白ぇツールだ。「droidrun/droidrun」ってのは、おめぇさんのスマートフォンを、まるで生きた人間みてぇによ、自然言語の指示で動かせるようにするモバイルエージェントのことでぇ。エンジニアの目から見て、こいつがどう役に立つのか、江戸っ子のべらんめぇ調で、威勢よく解説させてもらうぜ!


「Google版Rust」で学ぶ、信頼性と安全性を高めるコーディング

このコースは、単なる文法解説にとどまらず、実用的な視点でRustを学ぶことができます。信頼性の高さ GoogleのAndroidチームという、世界トップクラスのエンジニアたちが実際に使っている教材です。内容の質と正確性は非常に高いと言えます。


ReactでiOS/Androidアプリを同時開発!Expoの基本とサンプルコードを彼女との会話で解説

彼女がそう言って、キラキラした目で試着室から出てきました。 「うーん、似合うと思うよ。でもさ、それってさっき見てたのとちょっと違うデザインじゃない?」僕がスマホをいじりながら返事をすると、彼女は少し頬を膨らませました。 「もう!ちゃんと見てる?今日、デートだって言ったでしょ?」


ソフトウェアエンジニア必見!Koogで効率的なAI開発

この番組は、クイズに答えながら新しい技術を楽しく学んでいくクイズ番組。 司会の私(AIの知識はちょっとだけ…)と、解説員のKoogさんが、皆さんの疑問をコント形式で解決していきますよ!司会今日のテーマ、Koogさん!いったい何ができる方なんですか?


逆に、使わないなんて損!Material Symbolsの導入から活用法まで

ソフトウェアエンジニアにとって、どう役に立つ?逆に、UI/UXを考えるときに、いちいちアイコンを自作するのって、めちゃくちゃ面倒じゃないですか?このMaterial Design iconsを使うと、高品質で統一感のあるアイコンを簡単にプロジェクトに組み込めます。デザイナーがいないチームでも、見栄えのいいアプリやウェブサイトが作れちゃいます。


【エンジニア必見】オープンソースRTS「Mindustry」のコードベースを深掘り

ただし、「逆に、」を口癖のように使うのは少し難しいかもしれませんが、そのプロジェクトが持つ双方向の学びの機会や異なる視点を強調する形で、解説の中に織り交ぜていきますね。Mindustry は、タワーディフェンスと資源管理、自動化が組み合わさったリアルタイムストラテジー(RTS)ゲームです。


拡張の自由を手に入れろ:Androidマンガアプリ『コタツ』のカスタマイズとエクステンション開発戦略

「Kotatsu」は、ただのマンガビューアではありません。オープンソースで開発されているため、エンジニアにとっては機能拡張や学習の宝庫として非常に魅力的です。Kotatsuを単にユーザーとして使うだけでなく、エンジニアとして「開発」に参加するためのステップをご案内します。