NISIS 安装程序使用bizp2,lzma或者zlib——我不知道是否有其他算法——来压缩数据。
在安装过程中的某个时刻,必须将其中一种算法应用于某些数据缓冲区。当然,该数据是从磁盘读取的——包含在安装程序中——。
如何调试 NISIS 安装程序以了解安装程序文件的位置?我必须寻找什么?
注意:我可以使用 OllyDbg 或 IDAPro。
NISIS 安装程序使用bizp2,lzma或者zlib——我不知道是否有其他算法——来压缩数据。
在安装过程中的某个时刻,必须将其中一种算法应用于某些数据缓冲区。当然,该数据是从磁盘读取的——包含在安装程序中——。
如何调试 NISIS 安装程序以了解安装程序文件的位置?我必须寻找什么?
注意:我可以使用 OllyDbg 或 IDAPro。
快速谷歌产出提取/反编译 NSIS
作为查找嵌入资源的更一般的答案,请尝试使用ExeInfo及其“Rip”功能,该功能会扫描 exe 中的各种文件类型标头(PE、JPG、AVI....),然后允许将找到的资源撕掉。
对于 NSIS 安装程序,您可以简单地使用 7-zip 或 UniExtract - http://legroom.net/software/uniextract来提取 NSIS 安装程序中的所有文件
好吧,在不拒绝 Igor Skochinsky 的回答的情况下,我想发布更多关于如何找到压缩数据在哪里的事实。
彼得·坎科夫斯基写道:
NSIS 作者找到了使用标记的快速解决方案。简单到你会说:“我怎么没想到?!”
请记住,exe 文件中的数据按 512 或 4096 字节对齐。所以你不需要扫描整个 exe 来寻找标记,你只需要读取 512 字节的块并在它们的开头寻找标记。在伪代码中:
BYTE buff[512];
while(not end of file) {
ReadFile( 512 bytes into buff)
if(*(long*)buff == marker) {
// Marker found!
}
// else read another 512-byte chunk in the loop
}
我相信这是最简单的方法;它也比其他带有标记的方法更快。
所以你可以看到 NSIS 安装程序有某种标记。因此,只需查找ReadFileAPI 调用,按照程序流程进行操作,直到循环再次开始,在循环重复之前观察最后一次跳转,必须进行比较。
你有标记。
如果您想阅读更多内容,可以访问这篇非常有用的文章:自解压可执行文件,感谢 Peter 提供了一个很好的清晰解释。