Segmentation Fault

コアダンプの数だけ強くなれるよ、納期と戦うエンジニアのように。

Androidスマホ(Nexus5X)からapkファイルを取り出す

Androidスマホ(Nexus5X)からインストール済みのアプリのapkファイルを取り出してみた。

大した内容は書いてませんがお約束として下記。

[前置き]
法律で保護されたプログラムに対してリバースエンジニアリング等を行うことは法律に違反する可能性があります。
本ページで得た情報を悪用しないでください。

[実行環境]
・取り出し元 : Nexus5X(Android 7.1.2)
・取り出し先 : WindowsのPC(Windows7 + adbコマンドが使える)


取り出し対象アプリ名の確認

まずは取り出すアプリのファイル名が分からないと検索できないのでGoogle Playから確認する。
アドレスバーの'id='以降の文字列(今回だとjp.naver.line.android)が対象である。


f:id:segmentation-fault:20170701203307p:plain



apkファイルの検索

ファイル名が分かったので早速スマホをPCに接続して検索してみる。
ちなみにNexus5XのUSB端子はType-Cなのでご注意。

スマホを接続時にはUSB接続用途をファイル転送して、開発者向けオプションのUSBデバッグを有効にする。


f:id:segmentation-fault:20170701203210p:plain


f:id:segmentation-fault:20170701203218p:plain


f:id:segmentation-fault:20170701203220p:plain






スマホを接続後、コマンドプロンプトから下記コマンドで検索する。

$ adb shell pm list packages -f | findstr jp.naver.line.android


が、なにやらエラーメッセージが表示されてしまった。

f:id:segmentation-fault:20170701202324p:plain

C:\Users\work>adb shell pm list packages -f | findstr jp.naver.line.android
error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.

スマホ側をみるとUSBデバッグの許可するか?を聞かれていたのでOKをする。


f:id:segmentation-fault:20170701204255p:plain



再度、adb kill-serverを実行してから同コマンドを実行してみる。

f:id:segmentation-fault:20170701204415p:plain

C:\Users\work>adb kill-server

C:\Users\work>adb shell pm list packages -f | findstr jp.naver.line.android
package:/data/app/jp.naver.line.android-1/base.apk=jp.naver.line.android


今度は問題なく検索が完了。



apkファイルの取り出し

あとは、検索したパスをadb pullコマンドに渡して取り出せばOK。
カレントディレクトリを確認してbase.apkが存在すれば完了。

f:id:segmentation-fault:20170701204636p:plain

C:\Users\work> adb pull /data/app/jp.naver.line.android-1/base.apk