给软件脱壳的方法主要可以分为手动脱壳和自动脱壳两种。以下是具体的方法和步骤:
手动脱壳
使用调试器
使用调试器(如OllyDbg、TRW2000、SOFTICE等)逐步执行程序。
通过单步跟踪(F8)实现向下的跳转,跳过向上的跳转。
不断向下寻找OEP(Original Entry Point),找到popad指令后,通过段间跳转跳到OEP。
分析壳的类型
使用文件分析工具(如Fi、GetTyp、peid、pe-scan)确定壳的类型和加壳工具。
根据壳的类型选择合适的脱壳工具和方法。
寻找OEP
在反汇编窗口中查找关键的跳转指令(如jmp、je、call等),这些指令通常会指向OEP。
使用调试器的断点功能,定位到这些关键指令并逐步执行,直到找到OEP。
Dump和修复
使用dump工具(如IceDump、TRW、PEditor等)将脱壳后的代码导出。
如果需要,使用PE文件编辑工具(如PEditor、ProcDump32等)修复导入表(Import Table)。
自动脱壳
使用脱壳工具
使用专门的脱壳工具(如ASPACK的UNASPACK、UPX、PEcompact、Procdump等)进行自动脱壳。
这些工具通常能够处理多种加壳格式,但可能无法处理最新版本的加壳。
运行脱壳工具
根据工具的指令运行脱壳工具,通常需要指定待脱壳的软件文件和脱壳参数。
例如,使用UPX脱壳时,可以在命令行中输入`upx -d aa.exe`。
注意事项
备份原始文件:在进行脱壳操作前,务必备份原始软件文件,以防脱壳过程中出现问题。
选择合适的工具:根据软件加壳的类型选择合适的脱壳工具,不同版本的加壳可能需要不同的脱壳方法。
更新工具:加壳工具更新后,之前的脱壳工具可能失效,需要及时更新脱壳工具。
通过以上方法,可以有效地给软件脱壳。手动脱壳需要一定的技术和经验,而自动脱壳则更为简单快捷,但可能需要面对工具失效的风险。根据具体情况选择合适的方法进行脱壳。