リバース エンジニアリングを行うために、サードパーティ プログラムにデバッガを接続しようとしています。このプログラムは、通常の zip ファイルではないzip ファイルを保存しています。問題なく開くことができますが、7zip や CSharpZipLib などのソフトウェアを使用しようとするとエラーが発生します。デバッガーをアタッチして、プログラムがどのように解凍されているかを確認します。また、「奇形」はすべての zip ファイルで同じではありません。変更なしで問題なく解凍できるものもあれば、リンクされた質問のようにヘッダーの形式が正しくないものもあれば、問題ないように見えるものもありますが、CSharpZipLib は解凍に失敗します (ただし、ウィンドウの組み込みの解凍は正常に動作します)。
解凍時にJavaで何かを呼び出していることを知っています.exeからのProcessExplorer
呼び出しが非常に多く見られるrt.jar
ため、解凍されたバージョンを一時フォルダーに書き込んでいます(105,987 zipを解凍する必要があるため、自分で行う必要がありますファイルと、プログラムの UI を介してそれを実行し、一時フォルダーから解凍されたファイルを取得するには、不当な時間がかかります)。
このSOの質問から、JVMで開始されたデバッガー引数がない場合にプログラムをデバッグする方法を見つけました。VisualVMをダウンロードし、プログラムをアタッチしてプロファイリングできますが、VisualVM 内から関数呼び出しのトレースを取得する方法が見つかりません。
jsadebugdソリューションも試しましたが、プログラムを起動しようとすると次のエラーが発生します。
C:\>"c:\Program Files\Java\jdk1.6.0_34\bin\jsadebugd.exe" 8824
Attaching to process ID 8824 and starting RMI services, please wait...
Error attaching to process or starting server: sun.jvm.hotspot.debugger.DebuggerException: Windbg Error: ReadVirtual failed!
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess0(Native Method)
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readBytesFromProcess(WindbgDebuggerLocal.java:485)
at sun.jvm.hotspot.debugger.DebuggerBase.readBytes(DebuggerBase.java:219)
at sun.jvm.hotspot.debugger.DebuggerBase.readCInteger(DebuggerBase.java:375)
at sun.jvm.hotspot.debugger.DebuggerBase.readAddressValue(DebuggerBase.java:454)
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.readAddress(WindbgDebuggerLocal.java:316)
at sun.jvm.hotspot.debugger.windbg.WindbgAddress.getAddressAt(WindbgAddress.java:72)
at sun.jvm.hotspot.HotSpotTypeDataBase.readVMTypes(HotSpotTypeDataBase.java:126)
at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:85)
at sun.jvm.hotspot.HotSpotAgent.setupVM(HotSpotAgent.java:388)
at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:315)
at sun.jvm.hotspot.HotSpotAgent.startServer(HotSpotAgent.java:221)
at sun.jvm.hotspot.DebugServer.run(DebugServer.java:107)
at sun.jvm.hotspot.DebugServer.main(DebugServer.java:46)
at sun.jvm.hotspot.jdi.SADebugServer.main(SADebugServer.java:63)
パスの下に「Debugging Tools For Windows」がインストールされていますC:\Program Files\Debugging Tools for Windows (x64)
。windbg.exe
との下にもC:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64
ありC:\Program Files (x86)\Windows Kits\8.0\Debuggers\x86
ます。複数のコピーが私の問題である可能性がありますか?もしそうなら、どうすれば修正できますか?
このexeが何をしているかを監視して、zip解凍ルーチンを模倣できるようにするにはどうすればよいですか?