hacktricks/reversing/reversing-tools
2023-07-07 23:42:27 +00:00
..
blobrunner.md Translated to Japanese 2023-07-07 23:42:27 +00:00
README.md Translated to Japanese 2023-07-07 23:42:27 +00:00

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Wasmデコンパイラ/ Watコンパイラ

オンライン:

ソフトウェア:

.Netデコンパイラ

https://github.com/icsharpcode/ILSpy Visual Studio Code用のILSpyプラグインどのOSでも使用できますVSCodeから直接インストールできます。gitをダウンロードする必要はありません。ExtensionsをクリックしてILSpyを検索します)。 デコンパイル変更再コンパイルが必要な場合は、https://github.com/0xd4d/dnSpy/releasesを使用できます(関数内の何かを変更するには、右クリック -> Modify Methodをクリックします)。 https://www.jetbrains.com/es-es/decompiler/も試してみることができます。

DNSpyログ

DNSpyが情報をファイルに記録するために、次の.Netの行を使用できます

using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");

DNSpy デバッグ

DNSpyを使用してコードをデバッグするには、次の手順を実行する必要があります。

まず、デバッグに関連する アセンブリ属性を変更します:

From:

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]

/hive/hacktricks/reversing/reversing-tools/README.md

Reversing Tools

This section provides an overview of various tools that can be used for reverse engineering and analyzing software. These tools are essential for understanding the inner workings of a program and identifying vulnerabilities or weaknesses.

Disassemblers

Disassemblers are tools that convert machine code into assembly code, allowing you to analyze and understand the low-level instructions of a program. Some popular disassemblers include:

Debuggers

Debuggers are tools that allow you to analyze and manipulate the execution of a program. They provide features such as breakpoints, stepping through code, and inspecting memory. Some popular debuggers include:

Decompilers

Decompilers are tools that convert compiled machine code back into a high-level programming language. They can be useful for understanding the logic and structure of a program. Some popular decompilers include:

Binary Analysis Frameworks

Binary analysis frameworks provide a set of tools and libraries for analyzing binary files. They often include features such as static and dynamic analysis, vulnerability detection, and exploit development. Some popular binary analysis frameworks include:

Sandboxes

Sandboxes are isolated environments that allow you to execute and analyze potentially malicious software safely. They provide a controlled environment for observing the behavior of a program without risking damage to your system. Some popular sandboxes include:

Other Tools

In addition to the above, there are many other tools available for reverse engineering and analyzing software. Some notable mentions include:

Remember, the choice of tools depends on the specific task at hand and personal preference. It's important to experiment with different tools and find the ones that work best for you.

[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations |
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]

そして、コンパイルをクリックします:

次に、新しいファイルを ファイル >> モジュールを保存... に保存します:

これは必要です。なぜなら、これを行わないと、実行時にコードにいくつかの最適化が適用され、デバッグ中にブレークポイントがヒットしないか、一部の変数が存在しない可能性があるからです。

次に、.NetアプリケーションがIISによって実行されている場合、次のコマンドで再起動できます:

iisreset /noforce

次に、デバッグを開始するためには、すべての開いているファイルを閉じ、デバッグタブプロセスにアタッチを選択する必要があります。

次に、w3wp.exeを選択してIISサーバーにアタッチし、アタッチをクリックします。

プロセスのデバッグが開始されたので、停止してすべてのモジュールをロードします。まず、デバッグメニューのBreak Allをクリックし、次にデバッグメニューのWindowsからModulesをクリックします。

Modulesの中の任意のモジュールをクリックし、Open All Modulesを選択します。

Assembly Explorerの中の任意のモジュールを右クリックし、Sort Assembliesをクリックします。

Java decompiler

https://github.com/skylot/jadx https://github.com/java-decompiler/jd-gui/releases

Debugging DLLs

IDAを使用する

  • rundll32をロードする64ビットはC:\Windows\System32\rundll32.exe、32ビットはC:\Windows\SysWOW64\rundll32.exe
  • Windbgデバッガを選択する
  • "ライブラリのロード/アンロード時に中断"を選択する

  • 実行のパラメータを設定し、DLLのパスと呼び出したい関数を指定します。

その後、デバッグを開始すると、各DLLがロードされるたびに実行が停止します。rundll32がDLLをロードすると、実行が停止します。

しかし、ロードされたDLLのコードにアクセスする方法はわかりません。

x64dbg/x32dbgを使用する

  • rundll32をロードする64ビットはC:\Windows\System32\rundll32.exe、32ビットはC:\Windows\SysWOW64\rundll32.exe
  • コマンドラインを変更する( File --> Change Command Line と、dllのパスと呼び出したい関数を設定します。例"C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\14.ridii_2.dll",DLLMain
  • Options --> Settings を変更し、"DLL Entry"を選択します。
  • それから実行を開始し、デバッガは各dllメインで停止します。いずれかの時点で、自分のdllのdll Entryで停止します。そこから、ブレークポイントを設定したい場所を検索します。

win64dbgで実行が何らかの理由で停止された場合、win64dbgウィンドウの上部にあるコードがどこにあるかが表示されます。

その後、デバッグしたいdllで実行が停止した場所を確認できます。

ARM & MIPS

{% embed url="https://github.com/nongiach/arm_now" %}

シェルコード

blobrunnerを使用してシェルコードをデバッグする

Blobrunnerは、メモリ内のスペースにシェルコードを割り当て、シェルコードが割り当てられたメモリアドレスを示し、実行を停止します。 その後、プロセスにデバッガIdaまたはx64dbgアタッチし、指定されたメモリアドレスにブレークポイントを設定し、実行を再開します。これにより、シェルコードをデバッグできます。

リリースのGitHubページには、コンパイルされたリリースが含まれるzipファイルがありますhttps://github.com/OALabs/BlobRunner/releases/tag/v0.0.5 以下のリンクに、Blobrunnerのわずかに変更されたバージョンがあります。コンパイルするには、Visual Studio CodeでC/C++プロジェクトを作成し、コードをコピーして貼り付け、ビルドします。

{% page-ref page="blobrunner.md" %}

jmp2itを使用してシェルコードをデバッグする

jmp2it は、blobrunnerと非常に似ています。シェルコードをメモリ内のスペースに割り当て永遠のループを開始します。その後、プロセスにデバッガをアタッチし、再生を開始して2〜5秒待ち、停止を押すと、永遠のループの中にいます。永遠のループの次の命令にジャンプし、最終的にシェルコードを実行します。

リリースページからjmp2itのコンパイル済みバージョンをダウンロードできます

Cutterを使用してシェルコードをデバッグする

Cutterは、radareのGUIです。Cutterを使用すると、シェルコードをエミュレートして動的に検査できます。

Cutterでは、「ファイルを開く」と「シェルコードを開く」の2つのオプションがあります。私の場合、シェルコードをファイルとして開いた場合は正しく逆コンパイルされましたが、シェルコードとして開いた場合は逆コンパイルされませんでした。

特定の場所でエミュレーションを開始するには、そこにブレークポイントを設定し、おそらくCutterが自動的にそこからエミュレーションを開始します。

たとえば、ヘックスダンプ内でスタックを表示できます。

シェルコードの難読化を解除し、実行される関数を取得する

scdbgを試してみるべきです。 これは、シェルコードが使用している関数や、シェルコードがメモリ内で自己復号化しているかどうかなどを教えてくれます。

scdbg.exe -f shellcode # Get info
scdbg.exe -f shellcode -r #show analysis report at end of run
scdbg.exe -f shellcode -i -r #enable interactive hooks (file and network) and show analysis report at end of run
scdbg.exe -f shellcode -d #Dump decoded shellcode
scdbg.exe -f shellcode /findsc #Find offset where starts
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset

scDbgには、グラフィカルなランチャーもあります。ここで、必要なオプションを選択してシェルコードを実行することができます。

Create Dumpオプションは、シェルコードがメモリ内で動的に変更された場合に、最終的なシェルコードをダンプします(デコードされたシェルコードをダウンロードするのに便利です)。start offsetは、特定のオフセットでシェルコードを開始するのに役立ちます。Debug Shellオプションは、scDbgターミナルを使用してシェルコードをデバッグするのに便利ですただし、前述のオプションのいずれかを使用する方が、Idaまたはx64dbgを使用できるため、より良いです

CyberChefを使用した逆アセンブル

シェルコードファイルを入力としてアップロードし、次のレシピを使用して逆アセンブルします:https://gchq.github.io/CyberChef/#recipe=To_Hex('Space',0)Disassemble_x86('32','Full%20x86%20architecture',16,0,true,true)

Movfuscator

この難読化ツールは、すべての命令をmovに変更します(本当にクールですね)。また、実行フローを変更するために割り込みも使用します。詳細については、以下を参照してください:

運が良ければ、demovfuscatorがバイナリを復号化します。いくつかの依存関係があります。

apt-get install libcapstone-dev
apt-get install libz3-dev

そして、keystoneをインストールします(apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install

もしCTFをプレイしている場合、フラグを見つけるためのこの回避策は非常に役立つでしょうhttps://dustri.org/b/defeating-the-recons-movfuscator-crackme.html

Delphi

Delphiでコンパイルされたバイナリには、https://github.com/crypto2011/IDRを使用できます。

コース

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥