ホームページ  >  記事  >  運用・保守  >  Androidで新しいプロジェクトを作成する方法

Androidで新しいプロジェクトを作成する方法

王林
王林転載
2023-05-29 23:37:241471ブラウズ

コンテンツ

1. 便利なツールに関する簡単なチュートリアル (Insight)

何を学ぶことができますか?
#超強力な分析アシスタント ソフトウェア。

2.Android 最適化プロセス分析

何が学べるでしょうか?
1. Android の最適化プロセスを深く理解する

2. Android のソース コードを詳しく観察する
2. 大きなボスのシェルの下部にある関数を確認できます

3.Android DEX ファイル分析 分析

##何を学ぶことができますか?

1. ダウンロードできるその他の機能
2. dex ファイルを解析するプロセス

3. シェルリングとダウンロードに関するちょっとした知識

4. Android DEX クラスの分析ロードプロセス

何が学べるでしょうか?

1. クラスローディングの完全なプロセス
2. シェルリングおよび強化クラスの選択


0x01 便利なツール (Insight) の簡単なチュートリアル

このソフトウェアは c/c の解析に非常に役立ち、java ソースコードには強力な補助機能があり、後で使用しますので、簡単に紹介します。

ツールは添付ファイルにあります。アップロードとダウンロードを別々に行うだけです。

SI3US-205035-36448

登録コードはここに提供されます。

インストール、次、次。

Androidで新しいプロジェクトを作成する方法
#新しいプロジェクトの作成

新しいプロジェクトを選択します。


#単一マシン OKAndroidで新しいプロジェクトを作成する方法


Androidで新しいプロジェクトを作成する方法最初のマシンを選択


Androidで新しいプロジェクトを作成する方法[ツリーの追加] を選択します。これは、すべてのツリーを追加することを意味します。


# 読み込みが完了したら、このソフトウェアを使用して分析します。 Androidで新しいプロジェクトを作成する方法
Android 最適化プロセス分析

冗長になりたいのですが、この時点で英語の重要性はわかっています。もちろん、私の英語は上手ではありませんが、で調べることができます。辞書。

Androidで新しいプロジェクトを作成する方法

1.extractAndProcessZip

まずはこの内容については触れずに、この関数の名前を見てみましょう。 extract: 抽出し、そして、プロセス プロセス Zip、圧縮ファイル形式、apk が実際には zip 圧縮パッケージであることは誰もが知っています。

では、この関数の意味はzipを解凍する処理になります。

それでは、段階的に分析してみましょう。
Androidで新しいプロジェクトを作成する方法

#extractAndProcessZip の中間変数定義は次のとおりです。それは私たちの研究の焦点では​​ありません。


DexClassVerifyMode verifyMode = VERIFY_MODE_ALL;

この文は検証モジュールである verifyMode を定義しています。ここで初期化されるデータは VERIFY_MODE_ALL で、すべてが検証されることを意味します。 Androidで新しいプロジェクトを作成する方法
思考


ここを変更する場合、この検証は省略してもよいでしょうか。 Androidで新しいプロジェクトを作成する方法

他の値を見てみましょう。

アイデアがある場合は、この値を自分で定義できます。

DexOptimizerMode dexOptMode = OPTIMIZE_MODE_VERIFIED;


引き続き下を向いてみましょう。 Androidで新しいプロジェクトを作成する方法

dexOptCreateEmptyHeader という関数があり、その名前が示すように、dex 最適化のために空のヘッダーを作成します。


Androidで新しいプロジェクトを作成する方法


dexOffset は、後でここに戻ることができるようにファイルの位置を記録します。これは、実際には dex ファイルの読み取りの開始位置です。 Androidで新しいプロジェクトを作成する方法
次の関数を見てみましょう。

zip アーカイブを開いて、DEX エントリを見つけます。
明らかに、この部分が行っていることは、apk から dex ファイルを見つけることです。 Androidで新しいプロジェクトを作成する方法
その後、分析を進めます。


Androidで新しいプロジェクトを作成する方法

dex のオフセットを抽出する関数。


DEX データを現在のオフセットでキャッシュ ファイルに抽出します。dex ファイルのオフセットをいくつか記録します。

次に説明するのは、dex odexing のプロセスです。


Androidで新しいプロジェクトを作成する方法

#ここで検証が最適化されます。

ここで最適化プロセスを変更したり、最適化検証を削除したりすることもできます。


ここでのデータはどこから来たのか、どこで比較するのかを考えてみましょう。 ·
これらのデータは build.prop で比較されます。

2. 最適化を継続する

dvmContinueOptimization 関数について追跡してみましょう。

PS:
これからシェルリングに非常に関連する非常に重要な場所に触れます

dvmContinueOptimization を開きますfunction

Androidで新しいプロジェクトを作成する方法

最初は判断です。


Androidで新しいプロジェクトを作成する方法

#次に、dex ファイルへの書き込みがあります。

その後、読み続けてください (重要な点はこれからです)


Androidで新しいプロジェクトを作成する方法
##dvmDexFileOpenPartial これまでに他の人のシェルリング チュートリアルを見たことがある場合は、次のことを行う必要があります。よく使われるエンドポイントはこれまでダウンロードすることしか知らなかったのですが、ソースコードにこの関数が存在することが分かりました。

dvmDexFileOpenPartial 関数の呼び出しを見てみましょう

Androidで新しいプロジェクトを作成する方法
ここでは 2 回呼び出されており、1 回は独自の定義です。

最初に dvmDexFileOpenPartial のプロトタイプを見てみましょう

int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)

パラメータ 1: ロードされた DEX のベースメモリ内のファイルのアドレス (つまり、DEX.035)

パラメータ 2: ロードされた DEX ファイルのファイル長、
パラメータ 3: 出力パラメータ、DEX ファイルは DvmDex 構造に変換されます。 Dex ファイルのクラス、フィールド、メソッド、文字列情報。 Dalivk が Dex ファイルに対して操作するオブジェクトは構造体です。


Androidで新しいプロジェクトを作成する方法#最後にヘッダー情報がここに記述されます。


Androidで新しいプロジェクトを作成する方法0x03 Android DEX ファイルの解析と分析

dvmRawDexFileOpen() この関数は、理解する必要がある重要な関数です。 RawDexFile .cpp 関数内。


#最初に基本的な変数を定義します。 Androidで新しいプロジェクトを作成する方法

#ファイル形式で非常に重要なのはマジック ナンバーであることは誰もが知っています。そこで、マジック ナンバーを決定するための最初のステップである verifyMagicAndGetAdler32 を説明します。ここでの魔法はマジックナンバーです。
Androidで新しいプロジェクトを作成する方法


#時間とファイルサイズの検証です。
Androidで新しいプロジェクトを作成する方法

この関数は重要な関数であり、分析に重点を置く必要がある関数でもあります。その主な関数は、odex を生成することです。 dexに対応するファイル、いわゆるodex化です。機能を追跡して見てみましょう。
Androidで新しいプロジェクトを作成する方法


以下は dexOptGenerateCacheFileName() 関数の一部です。私たちの主なことは、それがどこに出力されるかを確認することです。

Androidで新しいプロジェクトを作成する方法

ここでは、データ ディレクトリ ALOGV("Cache file for '%s' '%s' is '%s' に生成されていることがわかります。 " , fileName, subFileName, nameBuf);

このようにフォーマットします。 Androidで新しいプロジェクトを作成する方法
つまり、odex ファイルはここで生成されています。

次に行うことは、この関数 dvmDexFileOpenFromFd() で、さらに最適化してマッピングを完了し、読み取り可能なファイルとして設定します。この機能を開きます。場所は DvmDex.cpp にあります。

#まず、この関数が呼び出される場所を見てみましょう。

Androidで新しいプロジェクトを作成する方法

この関数が呼び出される場所は、キー関数 dvmRawDexFileOpen です。この関数は、最初に dexOptGenerateCacheFileName を呼び出して odex を生成し、次に別の最適化のために dvmDexFileOpenFromFd を呼び出します。

最適化の最後のステップは dexFileParse() で、DEX を解析します。この見解は、DexFile

Androidで新しいプロジェクトを作成する方法

に簡単にまとめられています。

dvmRawDexFileOpen() メイン制御関数 - dexOptGenerateCacheFileName() は対応する odex を生成します - dvmDexFileOpenFromFd() はさらに最適化します - dexFileParse() は dex を解析します。

PS: ヒント

dexfileopenpartial が次のセクションにある場合、それを破る方法がないことがわかるかもしれません。その場合は、dexOptGenerateCacheFileNamePKcS0、dvmdexfileopenfromfd およびその他の関数を選択して次のセクションに進むことができます。セクション。

一般に、dexfileopenpartial はシェルで処理する場合に優れています。

0x04 Android Dex クラスのロード プロセス

他のソース コードは、メイン制御関数によって他の主要な機能が動作するように誘導されます。dex クラスのロード プロセスも同様です。

その主な制御関数は Dalvik_dalvik_system_DexFile_defineClassNative()です


Androidで新しいプロジェクトを作成する方法

注意が必要な関数もあります Dalvik_dalvik_system_DexFile_openDexFileNative

ここで注意する必要があるのは、ダンプできる場所が 2 か所あるということです。


Androidで新しいプロジェクトを作成する方法

引き続きメインの制御関数を見てみましょう。

メイン制御関数にそのような呼び出しがあります。
Androidで新しいプロジェクトを作成する方法

この呼び出しは Cookie を検証するためのものですが、この Cookie は復号化された dex Cookie である可能性が高いため、この Cookie をここでダンプすることもできます。

それから下を見てください。


Androidで新しいプロジェクトを作成する方法

dvmDefineClass関数、この関数はクラスのロードを確認する関数です。

Androidで新しいプロジェクトを作成する方法

#関数は独自に判断しますが、返されるのは確かに大きな頭です。この関数を追跡して見てみましょう。

Androidで新しいプロジェクトを作成する方法

Androidで新しいプロジェクトを作成する方法

#ここで最も重要なことは、動的にロードされるクラスである clazz です。

彼の値はlo​​adClassFromDex関数によって返されるため、さらに詳しく見ていきます。

Androidで新しいプロジェクトを作成する方法

#そのような構造については、こちらを参照してください。


Androidで新しいプロジェクトを作成する方法
#この構造の詳細を見てみましょう。


Androidで新しいプロジェクトを作成する方法#この構造が dex 構造とまったく同じかどうかは、これが必要なものであることを示しています。

以上がAndroidで新しいプロジェクトを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。