ただし、Habréでの検索では、このトピックに関する記事がないことが示されました。 しかし、いくつかのコードは非常に強力です:たとえば、Samsung Galaxy Tabのコードの1つでは、衛星の検索を高速化するGPSを設定できます。もう1つ-ネットワークとの通信モード(GPRS、EDGE、3G ...)モード間のジャンプでバッテリーを節約します。
しかし、ストーリーでは、コードの機能についてではなく、Android OSのコードによってアプリケーションを起動するメカニズムの研究、すべてのコード(およびすべてのコードが生成されたアプリケーション)を見つける方法について説明します。 また、コードに応答するアプリケーションを作成する方法についてもう少し説明します。
カット6枚の写真、小さなコード、多くのテキストの下で...記事の最後にある結果をすぐに曖昧にしてから技術を読むように、最もイライラする人にお願いします。
エントリー
Androidのコードについて長い間聞いていました。 最も一般的な-*#*#4636#*#*-は、電話、バッテリー、ネットワークステータスなどに関する情報です。

しかし最近、私はAutostartsプログラムをインストールし、インストールされたアプリケーションを検索しました(奇跡です!)奇妙なイベント "Secret Code Entered"を見ました。 彼はたくさんのアプリケーションに答えました! この事実は、この主題についてのより深い調査へと私を駆り立てました。 ここに私が見つけたものがあります:
{不必要な説明で大衆に負担をかけたいとは思わないが、尊敬されるコミュニティのメンバーになった場合、コメントの不明瞭なセクションをより詳細に噛むことを厳soleに誓う。}
パート1 Androidイベント
ご存知のように、すべてのAndroidアプリケーションにはマニフェストが含まれています。 これは、OSのどのターゲットバージョン、アプリケーションの動作に必要な許可機能などに関する情報を含む特別に生成されたXMLファイルです。 このマニフェストの最も興味深い部分は、BroadcastReceiversを説明するセクションです。 これらは、特定のイベントに応答するクラスです。 これらのイベントは数多くあります。たとえば、発信呼び出しが行われ(android.intent.action.NEW_OUTGOING_CALL)、フライトモードの状態が変更されました(android.intent.action.ACTION_AIRPLANE_MODE_CHANGED)...公式リストはAndroid Webサイトで確認できます。
ただし、リストは完全ではありません。 各アプリケーションは独自のイベントを作成できます。 これにより、アプリケーションが何に対応できるのかを理解しようとすると、ドキュメントに混乱が生じます。
この混乱の中で、非常に興味深いイベントが正常に隠されました:android.provider.Telephony.SECRET_CODE
Androidで通常のダイヤラーのソースコードを開くとわかるように、ダイヤラーで*#*#で始まり#*#*で終わるものを入力すると、メッセージが検索され、この特定のコードを聴いているBroadcastReceverに送信されます#および#*#*)
パート2 コードに対応します。
次に、このイベントの発生に反応するためにアプリケーションに必要なものを見てみましょう。
<receiver android:name=".receivers.DebugReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SECRET_CODE" />
<data android:scheme="android_secret_code" android:host="727" />
</intent-filter>
ここで:
<receiver android:name = "。receivers.DebugReceiver">-BroadcastReceiverセクションの始まりと、このイベントが発生したときに呼び出すReceiverの指示。
<action android:name = "android.provider.Telephony.SECRET_CODE" />-実際には、レシーバーが反応するイベント、コードセット。
<data android:scheme = "android_secret_code" android:host = "727" />-ここが最も興味深い場所です。 データブロックは、イベントの追加パラメーターを担当し、シークレットコードイベントが必要です。 ここのandroid:hostフィールドは、睡眠の美しさを眠りから覚醒させるコードを意味します。
つまり Receiver(「.receivers.DebugReceiver」)を開始するには、このブロックのマニフェストからアプリケーション(少し後で)、ダイヤラーで*#*#727#*#*をダイヤルする必要があります。
ご覧のとおり、Androidアプリケーションに隠し機能を追加するのは非常に簡単です。
レシーバーで何をすべきか、私は黙っています、すでにあなた自身の道があります、私は個人的にデバッグアクティビティと呼びます。
パート3。 パルチザンを探しています
次に、コードに応答するレシーバーの検索に移りましょう。 最初の考え(および最初の実装)は次のコードでした:
for(int i=0;i<10000;i++)
{
Intent intent = new Intent("android.provider.Telephony.SECRET_CODE",
Uri.parse("android_secret_code://"+ i.toString()));
ComponentName cn = intent.resolveActivity(pm);
....
}
コードを正確に覚えていませんが、より良い解決策が見つかったため、不要なコードとして上書きされました。 このソリューションは、コードの大部分が位置する範囲である0から10000までのすべてのコードを通過します。 しかし、すべてではありません。
より詳細な検索を促し、新しいソリューションにつながったのは、この「すべてではない」ことでした。
1)PackageManagerを使用して、インストールされているすべてのアプリケーションのリストを取得します。
List<android.content.pm.PackageInfo> pil = pm.getInstalledPackages(PackageManager.GET_DISABLED_COMPONENTS);
2)各パッケージからマニフェストを引き出します:
AssetManager am = context.createPackageContext(p.packageName, 0).getAssets();
xml = assets.openXmlResourceParser("AndroidManifest.xml");
3)マニフェストの分析と必要なレシーバー、IntentFilters、アクションの検索を備えたシンプルな魔法。
4)利益。
この方法には1つの欠点しかありません。ChainsDDSuperUserアプリケーションで見られました。 実際、このアプリケーションには、次のような曲線マニフェストがあります。
<receiver android:name=".receivers.DebugReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SECRET_CODE" />
<data android:scheme="android_secret_code"/>
</intent-filter>
ご覧のとおり、応答するコードを示すものではなく、コードを入力するとReceiverが呼び出されます。 このプログラムを逆コンパイルすることにより、これは誤って行われ、入力されたすべてのコードのログを保持したいという欲求に従っていないと確信しました。 Receiver自体では、コードが指定された値と等しいかどうかのチェックが行われ、コードが指定された値と等しくない場合は何も起こりません:(つまり、このReceiverは、コードが入力されるたびに起動されます。
最後の部分。 ほとんどの患者に。
彼は結果のプレゼンテーションのために最後の部分を去った。
これらすべての調査の結果は素晴らしい(私はこの言葉を恐れていません)プログラムであり、その類似物は市場で発見されませんでした: 秘密のコード
秘密コードを検索する上記の機会に加えて、プログラムでは次のこともできます。
-見つかったコードを実行する
-コードに関する他のユーザーのコメント/コメントを読んでください。 これは、FactoryFormatを恐れる人々がコードが実行される前に安全であることを確認できるようにするためであり、無謀な実験者-これまたはそのコードが何をするかを記述します。 私は、Samsung Galaxy Tab 7で利用可能なすべてのコードを個人的に起動し、「少なくともいくつかの情報を表示するすべてのコードをコメントアウトしました。
-コードリストの視覚化を改善するために、コードにコードを割り当てます。
スナック6 ScreenShotsの場合:
主な活動:

コード検索アクティビティ:

完了した検索コード:

コードリスト:

アクティビティコード:

コード指定に使用できるアイコンの一部は次のとおりです。

SreenShotsのPSには3つのコードしかありません それらはエミュレータで作成されました。 Galaxy Tabには100個以上あります。
BlackSwanの記事を書きました 。 招待してくれてありがとうkrovatti !
QRは次のとおりです。
