問題タブ [disassembly]
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.
python - .pyo python ファイルのリバース エンジニアリング
.py ソース ファイルに変換できる 2 つの .pyo python ファイルがありますが、decompyle の検証で示唆されているように、完全にはコンパイルされません。
したがって、ソース コードを見ると、config.pyo には配列内の変数が含まれているだけであることがわかります。
ADMIN_USERIDS = [116901、141、349244、39、1159488]
これらの ID の 1 つを変更するために、元の .pyo と逆アセンブリ、または必要なものをすべて取得したいと思います。
または....
model.pyo では、ソースは
if (productsDeveloperId != self.getUserId()):
私がやりたいのは、!= を 16 進編集して == にすることだけです。Windows exe プログラムでは簡単ですが、適切な python 逆アセンブラーがどこにも見つかりません。
どんな提案も歓迎します...私はバイトコードを読むのが初めてで、Pythonも初めてです。
.net - マネージコードを使用してプログラムでアセンブリのIL命令を検査することは可能ですか?
タイトルを参照してください。Reflection.Emitは、既存のアセンブリをロードしてそのILを検査するためではなく、新しい動的アセンブリを作成することを目的としているようです。
pointers - 命令からのオペランドの取得
次の x86 アセンブリ手順が与えられます。
実行時にオフセット (2 番目のオペランド) を取得するにはどうすればよいですか? これがシナリオです: プログラム (実行時にプロセスに挿入される) は、オフセットをいくつかの独自のものに置き換えます。その結果、次のようになります。
このプログラムを使用すると、プラグインを作成してロードできますが、置換アドレスは公開されません。では、上記の命令が存在するアドレスから、オフセット X と Y を見つけるにはどうすればよいでしょうか?
ruby - Rubyで、外部プロセスからメモリ値を読み取るにはどうすればよいですか?
したがって、私がやりたいのは、別のプロセスの仮想メモリ内の既知のメモリアドレスからいくつかの値を読み取るRubyプログラムを作成することだけです。メモリ内で実行中のプロセスのx86アセンブリを16進数で編集するという私の調査と基本的な知識を通じて、必要なメモリ内の値のベースアドレスとオフセットを見つけました。私はそれらを変更したくありません。読みたいだけです。私は、メモリエディタの開発者に、この言語の要約にアプローチし、Windowsプラットフォームを想定する方法を尋ねました。彼は、OpenProcess、CreateProcess、ReadProcessMemory、およびWriteProcessMemoryのWin32API呼び出しが、CまたはC++のいずれかを使用する方法であると私に言いました。Win32APIクラスを使用し、その2つのインスタンスをマッピングするだけでよいと思います。ユーザーがすでにプロセスを実行しているかどうかに応じて、OpenProcessまたはCreateProcessのいずれかに1つ。別のインスタンスがReadProcessMemoryにマップされます。実行中のプロセスのリストを取得するための関数を見つける必要があるので、すでに実行中の場合、どの実行中のプロセスが必要かがわかります。
これをすべてまとめるには多少の作業が必要ですが、コーディングするのにそれほど悪くはないと思います。私は高水準言語(とにかくCよりも高水準)からこの低水準で作業したことがないので、これは私にとってプログラミングの新しい領域にすぎません。私はこれにアプローチする方法を考えています。たくさんのWin32API呼び出しを使用することもできますが、それは、システムに依存する一連の文字列と配列のパックとアンパックを処理する必要があることを意味します。私が読んでいるプロセスは複数のプラットフォームビルドを持つ実行可能ファイル(メモリアドレスがシステムごとに変わることはわかっています。Rubyプログラムが現在のプラットフォーム環境を一致するメモリマッピングに一致させることができるように、すべてのメモリマッピングを含むフラットファイルを作成するというアイデアです。
私が知っている限りでは、私が見つけていないこれらすべてを処理するRubygemがすでに存在している可能性があります。また、ビルドごとに実行可能ファイルを編集して、読み取りたいメモリ値がプロセスによって書き込まれるたびに、新しい値のコピーを共有メモリ内のスペースに書き込むようにすることもできます。 Rubyは、その共有メモリアドレスへの内部ポインタであるクラスのインスタンスを作成し、値が更新されて再ロードする必要があることをRubyプログラムに何らかの形で通知します。基本的には割り込みベースのシステムがいいのですが、これらの値を読み取る目的は中央サーバーからブロードキャストされたスコアボードに送信することだけなので、一定の時間間隔で更新を送信するポーリングベースのシステムに固執することができます。また、Rubyを完全に放棄して、CまたはC ++に移行することもできますが、それらについてはほとんどわかりません。私は実際にはC++よりも多くのx86を知っており、システムに依存しないANSI CまではCしか知らず、これまで共有システムライブラリを扱ったことがありません。
それで、すでにこれを行っている宝石またはあまり知られていないモジュールが利用可能ですか?そうでない場合は、これを実現する方法に関する追加情報があれば便利です。簡単に言えば、これをすべて行うにはどうすればよいでしょうか。
よろしくお願いします、Grg
PS:また、これらのWin32API呼び出しがkernel32.dllライブラリを対象とする必要があることを確認するとよいでしょう。
code-generation - x86 命令エンコーディング テーブル
アセンブラを書き直しています。それと同時に、逆アセンブリの実装にも興味があります。シンプルでコンパクトにしたいのですが、そうしている間に活用できるコンセプトがあります。
オペコードから残りの x86 命令エンコーディングを判別することができます (プレフィックス バイトも少し必要になる場合があります)。多くの人がそれを行うための表を書いていることを私は知っています。
ニーモニックではなく、命令のエンコードには興味があります。実際に難しい問題だからです。私が知る必要がある各オペコード番号について:
- この命令には modrm が含まれていますか?
- この命令には即値フィールドがいくつありますか?
- 即時に使用するエンコーディングは何ですか?
- フィールド内の即値は命令ポインタ - 相対アドレスですか?
- modrm はオペランドとレジスタ フィールドにどのような種類のレジスタを使用しますか?
sandpile.org には、私が必要とするものはいくらかありますが、解析が容易ではない形式になっています。
これらのテーブルを自分で作成して検証する前に、この質問を書くことにしました。この種のテーブルがどこかに存在することを知っていますか? 解析にあまり労力を必要としない形式で。
ここに、最初のオペランドのテーブルがあります。この形式は、テーブルを含むテキスト ファイルからテーブルを直接解析できるようなものです。一部の CISC およびセグメンテーション関連の指示は省略しました。
2 バイト命令の場合、そのようなテーブルが 4 つ必要になる可能性があります。3 バイト命令の場合、さらに 2 つのテーブルが必要になります。FPU 命令には 8 つのテーブルが必要ですが、これは幸いにも非常に単純です。その後、x86命令のかなり大きな部分が隠蔽されます。テーブルが 1 つまたは 2 つあれば問題ありませんが。
さらに、いくつかの命令グループでは、命令タイプを認識するためにいくつかの小さな配列が必要になる場合があります。
c# - .NET DLL ファイルから PDB を生成しますか?
DLL ファイル (C# .NET コード) から PDB を生成できるものが必要ですが、それを行うための無料のプログラムはありますか?
embedded - PIC逆アセンブラが必要
PIC16F877Aのhexファイルを分解したい。良い逆アセンブラはありますか?分解後、再度コンパイルすることは可能ですか?私が世話をしなければならないことは何ですか?
disassembly - どの値がどこにあるかを追跡する逆アセンブラー
そのため、最近、C++ コードの逆アセンブリを調べており、次のように各レジスタの内容を手動で追跡する必要があります。
等々。コメントは、C++ クラスのさまざまなフィールド (sink、table、baseCol、starts など) のオフセットを調べて、手作業で追加したものです。
実行するのは簡単ですが、退屈で時間がかかります。プログラムが実行するのに最適なことです。gdb は、構造体内のさまざまなフィールドのオフセットを認識しているようです: &((Table *)0x1200)->starts を実行すると、正しいアドレスが通知されます。だから、この情報は周りにあります。
この情報を使用してコードに注釈を付けることができる逆アセンブラーはありますか?
それがなければ、私は自分で書くことができました。gdb はどこでオフセットを取得しますか?
assemblies - 実行可能ファイルの assemblyIdentity を変更するには?
.exe ファイルの作成に使用したツールを非表示にしたい。私は違法なことはしていません。自分の知的財産がコピーされるのを防ぎたいだけです。テキスト エディターで exe ファイルを開くと、次のセクションが表示されます。
名前を次のように変更しようとしました。
name="Microsoft.Windows.SomeOtherName"
これにより、ファイルを実行しようとすると、次のメッセージが表示されました。「このアプリケーションは、サイド バイ サイド構成が正しくないため、開始できませんでした。」
どうすればこれを解決できますか?
assembly - 組立指示書
同じ.exeファイルを分解するたびに、同じ命令が同じアドレスにあるのはなぜですか?そして、それは何のアドレスですか(RAM?HDD?仮想?)?