2. Android のソース コードを詳しく観察する
2. 大きなボスのシェルの下部にある関数を確認できます
3. シェルリングとダウンロードに関するちょっとした知識
4. Android DEX クラスの分析ロードプロセス
0x01 便利なツール (Insight) の簡単なチュートリアル
ツールは添付ファイルにあります。アップロードとダウンロードを別々に行うだけです。
SI3US-205035-36448
登録コードはここに提供されます。
インストール、次、次。
#新しいプロジェクトの作成
#単一マシン OK
最初のマシンを選択
[ツリーの追加] を選択します。これは、すべてのツリーを追加することを意味します。
# 読み込みが完了したら、このソフトウェアを使用して分析します。
Android 最適化プロセス分析
冗長になりたいのですが、この時点で英語の重要性はわかっています。もちろん、私の英語は上手ではありませんが、で調べることができます。辞書。
では、この関数の意味はzipを解凍する処理になります。
それでは、段階的に分析してみましょう。
DexClassVerifyMode verifyMode = VERIFY_MODE_ALL;
ここを変更する場合、この検証は省略してもよいでしょうか。
アイデアがある場合は、この値を自分で定義できます。 DexOptimizerMode dexOptMode = OPTIMIZE_MODE_VERIFIED;
引き続き下を向いてみましょう。
dexOffset は、後でここに戻ることができるようにファイルの位置を記録します。これは、実際には dex ファイルの読み取りの開始位置です。
次の関数を見てみましょう。
zip アーカイブを開いて、DEX エントリを見つけます。
明らかに、この部分が行っていることは、apk から dex ファイルを見つけることです。
その後、分析を進めます。
DEX データを現在のオフセットでキャッシュ ファイルに抽出します。dex ファイルのオフセットをいくつか記録します。
次に説明するのは、dex odexing のプロセスです。
ここでのデータはどこから来たのか、どこで比較するのかを考えてみましょう。 ·
これらのデータは build.prop で比較されます。
PS:
これからシェルリングに非常に関連する非常に重要な場所に触れます
##dvmDexFileOpenPartial これまでに他の人のシェルリング チュートリアルを見たことがある場合は、次のことを行う必要があります。よく使われるエンドポイントはこれまでダウンロードすることしか知らなかったのですが、ソースコードにこの関数が存在することが分かりました。
dvmDexFileOpenPartial 関数の呼び出しを見てみましょう
ここでは 2 回呼び出されており、1 回は独自の定義です。
最初に dvmDexFileOpenPartial のプロトタイプを見てみましょう
int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)
パラメータ 1: ロードされた DEX のベースメモリ内のファイルのアドレス (つまり、DEX.035) パラメータ 2: ロードされた DEX ファイルのファイル長、
パラメータ 3: 出力パラメータ、DEX ファイルは DvmDex 構造に変換されます。 Dex ファイルのクラス、フィールド、メソッド、文字列情報。 Dalivk が Dex ファイルに対して操作するオブジェクトは構造体です。
#最後にヘッダー情報がここに記述されます。
0x03 Android DEX ファイルの解析と分析
#最初に基本的な変数を定義します。
#ファイル形式で非常に重要なのはマジック ナンバーであることは誰もが知っています。そこで、マジック ナンバーを決定するための最初のステップである verifyMagicAndGetAdler32 を説明します。ここでの魔法はマジックナンバーです。
#時間とファイルサイズの検証です。
この関数は重要な関数であり、分析に重点を置く必要がある関数でもあります。その主な関数は、odex を生成することです。 dexに対応するファイル、いわゆるodex化です。機能を追跡して見てみましょう。
以下は dexOptGenerateCacheFileName() 関数の一部です。私たちの主なことは、それがどこに出力されるかを確認することです。
このようにフォーマットします。
つまり、odex ファイルはここで生成されています。
次に行うことは、この関数 dvmDexFileOpenFromFd() で、さらに最適化してマッピングを完了し、読み取り可能なファイルとして設定します。この機能を開きます。場所は DvmDex.cpp にあります。
この関数が呼び出される場所は、キー関数 dvmRawDexFileOpen です。この関数は、最初に dexOptGenerateCacheFileName を呼び出して odex を生成し、次に別の最適化のために dvmDexFileOpenFromFd を呼び出します。
最適化の最後のステップは dexFileParse() で、DEX を解析します。この見解は、DexFile
dvmRawDexFileOpen() メイン制御関数 - dexOptGenerateCacheFileName() は対応する odex を生成します - dvmDexFileOpenFromFd() はさらに最適化します - dexFileParse() は dex を解析します。
dexfileopenpartial が次のセクションにある場合、それを破る方法がないことがわかるかもしれません。その場合は、dexOptGenerateCacheFileNamePKcS0、dvmdexfileopenfromfd およびその他の関数を選択して次のセクションに進むことができます。セクション。
一般に、dexfileopenpartial はシェルで処理する場合に優れています。
他のソース コードは、メイン制御関数によって他の主要な機能が動作するように誘導されます。dex クラスのロード プロセスも同様です。
その主な制御関数は Dalvik_dalvik_system_DexFile_defineClassNative()です
注意が必要な関数もあります Dalvik_dalvik_system_DexFile_openDexFileNative
ここで注意する必要があるのは、ダンプできる場所が 2 か所あるということです。
引き続きメインの制御関数を見てみましょう。
メイン制御関数にそのような呼び出しがあります。
この呼び出しは Cookie を検証するためのものですが、この Cookie は復号化された dex Cookie である可能性が高いため、この Cookie をここでダンプすることもできます。
それから下を見てください。
dvmDefineClass関数、この関数はクラスのロードを確認する関数です。
#関数は独自に判断しますが、返されるのは確かに大きな頭です。この関数を追跡して見てみましょう。
#この構造の詳細を見てみましょう。
#この構造が dex 構造とまったく同じかどうかは、これが必要なものであることを示しています。
以上がAndroidで新しいプロジェクトを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。