|
カテゴリ:IS11LG
以下のURLでodexからdexを作り、apkへインストールする手順を参考にする
http://yasuhide.blog.jp/archives/5506120.html > java -jar baksmali-1.4.1.jar -a 15 -o out -d framework -x StationMobile.odex > java -jar smali-1.4.1.jar --api-level 15 -o classes.dex out > copy StationMobile.apk StationMobile.apk.orig > jar uvf StationMobile.apk classes.dex あたらしく作られた StationMobile.apk が dex 込みのファイル これをインストールしようとすると以下のエラーになった。 Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] ・・・if the parser did not find any certificates in the .apk. APK-Multi-Tool で decompile → compile system apk → sign した。 すると今度は、以下のインストールエラーとなった。 Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE] sharedUserIdを設定しているアプリをインストールする場合、 同じ証明書で署名してないと、INSTALL_FAILED_SHARED_USER_INCOMPATIBLEで インストールに失敗するらしい。 http://gamestudio.sblo.jp/article/46491869.html コンパイルしたソースをみるとマニフェストファイルに記載があった。 PERMISSIONにandroid.uid.systemが指定されている。 そういうアプリだった。マニフェストファイル中の android:sharedUserId="android.uid.system" これがあると、システムアプリとして署名をしなければならない。 システムアプリにするには、特定の証明書が必要になる。 幸いなことにcyanogenModは、1.6からずっと同じ証明書をつかっている。 証明書のファイル、platform.x509.pem platform.pk8 をダウンロードして継続する > java -jar signapk.jar platform.x509.pem platform.pk8 unsignedStationMobile.apk signed-StationMobile.apk あれっ!エラーとなった。実は、apkの中に既に認証ファイルが入ったままだった。 7zで直接開いて削除して再度実行する。 再度、インストールしてみる >adb install signed-StationMobile.apk Failure [INSTALL_FAILED_INVALID_INSTALL_LOCATION] これは、/system/app にいれろというメッセージ。 /system/appに直接入れてランチャーから動かす するとloadLibraryあたりでエラー(logcatでみていく) ソースのloadlibraryloader.smailのloadLibraryをみていく。 const-string v0, "BML" invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V const-string v0, "SDVAccess" const-string v0, "pxproxy" const-string v0, "pxdtv" この中のlibBML.so, libSDVAccess.so,libpxproxy.so, libpxdtv.so が 呼び出している共有ライブラリ("SDVAccess"は、コード上呼び出しされていない)。 これらを/system/libへ入れて再度実行。 すると以下のエラーメッセージが発生。 : java.lang.UnsatisfiedLinkError: Native method not found: jp.pixela.StationMobile.mw.Core.GetRecordingState:()I : at jp.pixela.StationMobile.mw.Core.GetRecordingState(Native Method) JNI経由でネイティブメソッドが見つからないというエラーメッセージ。 androidだとlddコマンドが使えないので、「arm-eabi-readelf -d "共有ライブラリ名"」で 上記の共有ライブラリから呼び出している次の共有ライブラリを調べる スクリプトを作り、依存しているsoを再帰的に検索する。 [findso.sh] --------------------------------------------------------------------------------------- #!/bin/bash for a in `arm-eabi-readelf -d $1 | grep NEEDED | sed -e 's/\[//g' -e 's/\]//g' | awk '{print $5}'` do echo $a for b in `arm-eabi-readelf -d $a | grep NEEDED | sed -e 's/\[//g' -e 's/\]//g' | awk '{print $5}'` do echo $b for c in `arm-eabi-readelf -d $a | grep NEEDED | sed -e 's/\[//g' -e 's/\]//g' | awk '{print $5}'` do echo $c arm-eabi-readelf -d $a | grep NEEDED | sed -e 's/\[//g' -e 's/\]//g' | awk '{print $5}' done done done --------------------------------------------------------------------------------------- % findso.sh libpxdtv.so | sort | uniq % findso.sh libBML.so | sort | uniq % findso.sh libpxproxy.so | sort | uniq やることが、共有ライブラリのHackingになってきた・・・[続く] お気に入りの記事を「いいね!」で応援しよう
最終更新日
2015年05月21日 09時23分44秒
コメント(0) | コメントを書く
[IS11LG] カテゴリの最新記事
|