@matteo.pisani.91Matteo Pisani
Disassembling toys since ’91
Hitting and kicking” the bundled App of their widest European distribution company.
PREFACE
Vending Machines are objects of cult 疑いもなく、自動販売機は、その存在そのものが、「カルト」の対象です。 ハッカーのおいしい食べ物です、いつも。 当初はコインだけでオフラインで動作していましたが、その後、NFC-キー/カードモデルが普及しはじめました。 COGES」と言えば、きっと誰かの脳裏に良い時代が浮かぶことでしょう。 しかし、数年の間に状況は一変しました。
STORY
ある日、バットケイブでの調教を中断し、地元に直行して日光を浴びようと思い、大学に行って古い教授に挨拶をしました。 –
「コーヒーでも飲んできな!」と言われ、廊下を歩きながら雑談を始めました。
到着すると……私:「払おう!コインがある!」
彼:「え? 「
BLE + NFC
脳…。 “うーん・・・仮想ウォレットはクールなものだ・・・”
素晴らしい
HOT-POT
魂:「あえてそれをHack intoする!!」
素晴らしい。”
~$ ホワイトハットの内なる声:「バグバウンティ報酬がなければ肩を叩くだけ」
~$ グレーハットの内なる声:「OK、教育目的のためだけにそうしよう」
~$ ブラックハットの内なる声:「いい加減、あのヒープ、素晴らしいジュピターとヤろうじゃないか!」
~~。
その日のうちに…
Pwnie express.
ANALYSIS
言うまでもなく、私は汚いルート化した Android スマートフォン (USB Debugging Enabled) を手に取り、Play Store から対象の App をインストールして、オリジナルの *.NET Framework をダンロードした。apk を adb.
# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk
でラップトップにダンプし、apktool
# apktool d ./Argenta.apk -o ./Argenta
で解凍して、jadx
# jadx ./Argenta.apk
で Java ソース抽出を行ったのは言うまでもありませんが、まず *.apk を作成し、.apk のソースとしました。apkをデバッグ可能にするために、AndroidManifest.xmlのapplication <tag>
そして、*.apk
# apktool b ./Argenta
新しいキーを keytool
# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000
sign the *.APKを再構築した。apk を jarsigner で生成した鍵を使って署名しました
# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta
最後に、実行可能にするために zip 整列しました
# zipalign -v 4 Argenta.apk Argenta-signed.apk
そして最後に *.apk をインストールしました*.apk
# adb install ./Argenta-signed.apk
スマートフォンでアプリを実行し、パッケージ名でフィルタリングして logcat でログを見始めました
# adb logcat --pid=`adb shell pidof -s com.sitael.vending`
特に何もなかったので、ソースコードを調べ始めたところ興味深い情報ばかりがありました。
AndroidManifest.xml
ファイルをよく見てみると、RushOrm
への参照を発見しました。 携帯のRoot Explorerを起動してargenta.db
を検索してみると、見つかりました。 そこで、adb
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./
でラップトップに引っ張り出し、SQLite
用 DB ブラウザで開こうとすると、当然ながら、ありました。 3750>
REVERSE-ENGINEERING
ソースコードに戻り、RushAndroidConfig.java
で、データベース設定に使用するメソッドを確認しました。this.encryptionKey = getDeviceId(context);
に目が留まり、その定義に移動して…
ターゲットのアプリケーションは、携帯電話の IMEI (*#06#)
を SQLite データベース用の暗号化キーに使用していたことが分かりました。
Boom baby.
数秒の点検の後、。 UserWallets
テーブル
を開き、walletCredit
フィールドを編集して変更を書き込み
それから汲々とするデータベースを電話に戻し
# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
VERDICT
その間に、。 私は「ロビン・フッド」(Age Of Empiresのチートコードで1000ゴールドが手に入るという、懐かしくも露骨な言及)の気分で、対象となるアプリのデータベースをその場で素早くダンプ/リストア/改ざんするAndroidユーティリティを開発したのです。
それから私は再び大学に戻り、ついに Hack をテストしました…
CONCLUSION
ゼロクレジット アカウントから、私はできたのです。
> アプリのクレジットを膨れ上がらせる。
> 物を買う。
> 残りのクレジットを更新する。
> クレジットゼロの状態に戻る。
> 再びクレジットを膨らませる。
> やり直す。
逆転したソースをすべてマクロで検査したところ、難読化されていないクリーンなコードが大量に見つかり、ユーザーデータを保護しアプリを安全にするための大きな対策はまったく採られていないことがわかりました。 私は、現在のアーキテクチャを捨てて、より優れた安全なアーキテクチャをゼロから開発するよう、彼らに優しく提案しました。
Tags
無料アカウントを作成してカスタム読書体験をアンロックする。