コード探偵の事件簿: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を自由に使いこなすための道筋をつけるもんさ。


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

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


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

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


ソフトウェアエンジニア必見:Ghidraで紐解くプログラムの秘密

ソフトウェアエンジニアリングの観点から、NationalSecurityAgency/ghidra、通称Ghidraがどのように役立つのか、導入方法、サンプルコードの例などを分かりやすく解説しますね。新しい服を買うとき、サイズ感や素材、着回しなどをじっくり考えるように、ソフトウェアを深く理解したいときにも、Ghidraは強力なパートナーになります。


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

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


KitchenOwl入門:Dockerで始める自己ホスト型買い物リスト&レシピ管理

こんにちは!TomBurschさんのKitchenOwl、気になりますよね。自炊派のエンジニアにとって、これはかなり「使える」ツールになりそうです。ここでは、ソフトウェアエンジニアの視点からKitchenOwlがどのように役立つのか、そして実際にどうやって導入して使うのかを、サンプルコードを交えながらわかりやすく解説していきますね。


さよならエミュレータ!WSABuildsで実現する高性能なAndroidテスト環境の構築

でもご安心を。この MustardChef/WSABuilds は、皆さんの開発環境を劇的に快適にする、とっても実用的なツールなんです。ソフトウェアエンジニアの視点から、その魅力と活用法を分かりやすく、フレンドリーにご案内しますね!MustardChef/WSABuilds(以下、WSABuilds)は、Windows上でAndroidアプリを動作させるための公式機能である Windows Subsystem for Android (WSA) の「拡張版」と考えると分かりやすいです。


リバースエンジニアリングでAIを活用:gpt4freeを使った複数モデルのテスト入門

ご質問ありがとうございます!このリポジトリ、xtekky/gpt4free、は非常に興味深いプロジェクトですね。ソフトウェアエンジニアの視点から、これがどのように役立つのか、導入方法、そしてサンプルコードの例を、分かりやすく丁寧にご説明しますね。フレンドリーな解説を心がけます!


ソフトウェアエンジニアが解説!Fluent System Iconsでガンダムを動かすコントローラー開発

ガンダムのプラモデルをコントに見立てて、Microsoft Fluent System Iconsをソフトウェアエンジニアリングの観点からどう活用するか、楽しく解説しますね!まず、「Microsoft Fluent System Icons」は、Microsoftが提供している、モダンで親しみやすいアイコンのコレクションです。スマホアプリやウェブサイトなどでよく見かける、矢印や設定マークのようなシンプルな絵文字のことだと思ってください。デザインが一貫していて、見た目もスッキリしているのが特徴です。