我正在尝试将调试器附加到第 3 方程序以进行一些逆向工程。该程序正在保存非普通 zip 文件的 zip 文件,它可以很好地打开它们,但是当我尝试使用 7zip 或 CSharpZipLib 等软件时出现错误。我想附加一个调试器,看看程序是如何解压的。此外,每个 zip 文件中的“畸形”也不相同。有些没有修改就可以解压,有些像我的链接问题一样有格式错误的标题,有些似乎没问题,但 CSharpZipLib 无法解压缩它(但窗口的内置解压缩工作正常)。
我知道它在解压缩时调用了 java 中的某些东西,因为ProcessExplorer
我可以看到很多rt.jar
来自 exe 的调用,而它正在将解压缩的版本写入临时文件夹(我需要自己做,因为我需要解压缩 105,987 zip文件,并且通过程序的 UI 执行此操作并从临时文件夹中获取解压缩的文件将花费不合理的时间)。
从这个 SO question我发现了如何在程序没有从 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)
我确实在路径下安装了“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 解压缩程序?