問題タブ [dynamic-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
web-applications - Web アプリケーション用の動的入力ジェネレーター
動的分析を使用して Web アプリケーションを分析します。次に、入力を生成できる入力ジェネレーターが必要です。
これを実現するオープンソースのツールはありますか?
Apollo などの多くの論文を読みましたが、ツールを公開していないようです。
ありがとうございました
android - Android エミュレーターの内部ストレージにファイルを書き込む
電話の内部ストレージにファイルを書き込むアプリを作成しました。実際の Android フォンでテストしたところ、動作しました。また、API 16 Google Nexus 4 を実行している Android Studio エミュレーターでもテストしました。現在、Droidbox のような動的分析ツールを自分のアプリに対して実行しようとしていますが、Droidbox を使用してエミュレーター内でアプリを実行するたびに奇妙なことが起こります。ファイルをまったく作成しないでください。それは私の電話と Android Studio の両方で機能しましたが、Droidbox エミュレーター (/android-sdk-linux/tools/ フォルダーのエミュレーターを使用します) では機能しません。私は間違いなくアクセス許可を含め、適切な Android バージョンを設定しました。Droidbox でファイルを作成できないのはなぜですか?
static-analysis - 動的レポートで静的分析レポートの同等の API を見つける方法は?
静的および動的マルウェア分析の 2 つのレポートがあります。実際には、動的レポートにはない MSVCRT の dll のいくつかの API (_p_commode、_setusermatherr など) が静的レポートに含まれています。動的レポートに同等の API があるかどうかは正確にはわかりません。そして、それらが動的レポートにないのはなぜですか?
java - Java の動的依存関係チェック ツール
Gradle プロジェクトの依存関係階層を分析して最適化するツールを探しています。私はすでにhttps://github.com/wfhartford/gradle-dependency-analyzeを見て、これは Netflix https://github.com/nebula-plugins/gradle-lint-pluginからのものです。どちらも、コンパイルされたクラスの静的分析に基づいて仕事をします。それにもかかわらず、リフレクションに基づくものは静的コード分析ツールを使用して見つけることができないため、インジェクション フレームワークは失敗し、実行中のコードが使用されている間に静的コードが使用していない依存関係の結果が分析によって得られます。
使用できるツールはありますか?単体テストの実行に基づいて、一部のコード カバレッジ ツールが行うようなことを考えています。どんなアイデアでも大歓迎です!
x86 - Pin: 指定された共有ライブラリをインストルメント化します
実行可能ファイルとそれに関連する共有ライブラリに対して簡単なインストルメンテーション タスクを実行し、実行されたすべての命令をメイン ファイルと共有ライブラリに記録しています。
ただし、Pin
必ず投げる
計装中。私は 32 ビット システムで作業しているため、約 3G のメモリ消費量に達するたびに、インストルメンテーション プロセスがクラッシュします。
このプラットフォームには非常に多くの共有ライブラリがあるため、この 32 ビット システムで作業したいと考えています。一方、実際には1つの共有ライブラリにしか興味がないため、メインの実行可能ファイルとその特別なライブラリ内で実行された命令のみを記録する方法を見つけようと考えています.
ただし、それを行うかどうか/どのように行うかはわかりません。インストルメンテーションの前の今、私の設定は次のとおりです。
ご覧のとおり、メインの実行可能ファイルを計測しているかどうかを確認していません。つまり、すべてのライブラリを計測できるはずです。
私のテスト プラットフォームは 32 ビット x86 Ubuntu 14.04 です。また、テスト対象は 32 ビット ELF バイナリ コードです。
私の質問は次のとおりです。私の状況では、メモリ例外を克服するために、関心のあるライブラリのみをインストルメント化するように構成する必要がありますか? もしそうなら、どうすればそれを行うことができますか?
memory - Intel の PinTool を使用してスタック ポインターの内容を取得する
objdump ユーティリティを使用すると、変数の相対アドレスを取得できます。たとえば、単純な C プログラムを考えてみましょう。
gcc でコンパイル:
$ gcc -g example.c -o example
ELF 情報については、dwarf フラグを指定して objdump ユーティリティを実行します。
$objdump --dwarf=info の例
出力:
私は次のようにしたい: -
- my_local などの変数のアドレスを取得したい。最初に DW_TAG_Variable、次に DW_AT_name、上から関数 -20 でベース レジスタによって指定された DW_AT_location を調べます。
質問: 実行時にベース レジスタの内容を知るにはどうすればよいですか。PinTool を使用して実装できますか。
より広い意味での質問: dwarf と Pintool からの情報が与えられたメモリ内のアドレスへの変数 my_local マップが必要です。
前もって感謝します。
c - GDB リバース デバッグを使用して関数呼び出しによる値の伝播を追跡するにはどうすればよいですか?
GDBリバースデバッグを使用して、プログラム内の関数呼び出しと変数コピーによる値の伝播を追跡する方法を見つけようとしています。私は過去に GDB をよく使用していましたが、リバース デバッグは比較的初めてです。
例を挙げて質問を組み立てるのが最も簡単だと思います。このプログラムを見てください。
プログラムをコンパイルし、リバース デバッグを使用して GDB を起動し、コンパイル済みの実行可能ファイルを実行します。printf
inにブレークポイントを設定しFnA
、プログラムの実行を開始すると、そのブレークポイントに到達します。x
ここからは、「最後に書かれたのはどこですか?」という質問に答えたいと思います。私はすることができたしwatch -l x
、その後reverse-continue
。ただし、スタック上での有効期間が始まったFnA
場所であるため、それはの最初に移動するだけです。x
私が本当に興味を持っているのは、の値がどこから来たかということですi = 5
。その時から、本当にmain
x
i = 5
x
次のように、関数パラメーターと変数のコピーを介して伝播されましたmain:i -> FnC:z -> FnB:y -> FnB:y_copy -> FnA:x
。
明らかに、GDB-fu と人間の直感を組み合わせることでこれを理解できますが、このプロセスを可能な限り自動化しようとしています。最終的には、人間の直感と GDB-fu を使用するのはかなり面倒な、より複雑なソフトウェアでこれを試してみたいと思います。
リバースデバッグを使用して GDB でこれを達成する便利な方法はありますか? GDB は、これらの値の伝播を自動的に把握して追跡することができますか?
PS: 具体的には、実際にrrで GDB を使用しています。rr は、確定的で再現可能な実行コンテキストを可能にする gdb の単なるラッパーです。rr の有無にかかわらず、gdb を使用しているかどうかに関係なく、コアの質問は同じままであると思います/願っています。
c# - アプリケーション コードとシステム ライブラリを介したデータ入力の追跡
私はセキュリティ担当者であり、これについて広範な調査を行ってきました。この時点で、次にどこへ行くべきかについてのガイダンスを探しています。
また、長文失礼しました、重要な部分を太字にしました。
私が高レベルでやろうとしていることは単純です。 あるデータをプログラムに入力し、このデータを「たどり」、データがどのように処理され、どこに到達するかを追跡しようとしています。
たとえば、ログイン資格情報を FileZilla に入力した場合、アクセスするすべてのメモリ参照を追跡し、トレースを開始して、そのデータがどこに移動したのか、どのライブラリに送信されたのかを追跡したいと考えています。ネットワークパケット。
現在、私は Windows プラットフォームに焦点を当てていますが、私の主な質問は次のようなものになると思います: Windows フォームとシステム ライブラリを理解するデバッガーをリモート コントロールするための優れた API はありますか?
これまでに見つけた主な属性は次のとおりです。
- この分析手法の名前は「Dynamic Taint Analysis」です。
- デバッガーまたはプロファイラーが必要になります
- Inspect.exe は、入力を受け取る Windows UI 要素を見つけるための便利なツールです。
- Windows 自動化フレームワーク全般が役立つ場合があります
- デバッガーの自動化は面倒なようです。IDebugClient インターフェイスはより豊富なデータを可能にしますが、IDAPro や CheatEngine などのデバッガーはより優れたメモリ分析ユーティリティを備えています
- メモリ ブレーク ポイントを配置し、入力に関連付けられている参照とレジスタを追跡する必要があります。
私が試したツールのコレクションは次のとおりです。
WinDBG (素晴らしいツール)、IDA Pro、CheatEngine、x64dbg、vdb (python デバッガー)、Intel の PIN、Valgrind などのすべてのツールで遊んだことがあります。
次に、いくつかの動的汚染分析ツールがありますが、それらは .NET コンポーネントの検出や、Inspect.exe などのユーティリティによってネイティブに提供される Windows デバッグ フレームワークが提供するその他の便利さをサポートしていません。
次に、IDebugClient インターフェイスを使用して独自の C# プログラムを作成しようとしましたが、ドキュメントが不十分であり、見つけることができた最高のプロジェクトは、このフェローからのもので、3 歳です: C# app to act like WINDBG's "step into" feature
このユースケースに適合する既存のプロジェクトにコードを提供したいと思っていますが、現時点ではどこから始めればよいかさえわかりません。
全体として、動的プログラムの分析ツールとデバッグ ツールにいくらかの愛が必要なように感じます...ちょっと立ち往生しているように感じます。この問題を解決するためのさまざまなツールやアプローチが非常に多くありますが、いずれも何らかの形で欠けています。
とにかく、どんな指示やガイダンスにも感謝します。ここまでできたら、ありがとう!!
-デイブ
c - C プログラムのサーバー側 GET 要求をシミュレートする
私は現在、コンパイルされた C プログラムを調査しています。socket
、gethostbyname
およびconnect
コード全体の複数の呼び出しにより、複数のネットワーク要求が行われることを私は知っています。さらに、私はプログラムを実行して見つけたGET
ので、それが要求を行っていることを知っています。strings
このプログラムを実行して、ネットワーク呼び出しを行わずに調査できるようにしたいと考えています。ただし、これを行うには、指定された関数だけで get リクエストをシミュレートする必要があります。
コンパイルして追加した次のコードがありますLD_PRELOAD
。
これは機能しているように見えますが、ソケットから出力して受信するものをほとんど理解できません。
私はまた、問題に対する他の解決策にもオープンです。
java - javaagent を使用して Java の実行データを取得する方法
Javaプログラムから実行ログを取得することについて何かをしています。しかし、のようなコマンドを使用してjarファイルである場合、私はこれを達成しますjava -javaagent:agent1.jar -jar MyProgram.jar
。しかし、開くのに を使用する必要のないソフトウェアがある場合java -jar
、どのように my を使用agent1.jar
してその実行データを取得できますか? たとえば、Java でゲームを作成し、ファイルを開いてゲームを開きます。これは、ログを計測して取得するためにMyGame.exe
使用できないことを意味します。javaagent:agent.jar
この問題を解決する方法はありますか、または参考になる他のツールはありますか?</p>