我正在使用 ollydbg 和一个十六进制编辑器。我确认一旦以任何方式编辑应用程序,它的行为就会与正常情况不同。
我的第一个想法是该文件正在检查校验和值,因此我查看了 olly 中的模块间调用,但没有看到有关校验和的任何信息。我是专门找MapFileAndCheckSum
但我试图将其推理出来,我认为必须在文件中硬编码校验和值,以便可以将其与实际校验和进行比较。所以我想知道从开发人员的角度来看,当应用程序未完成/编译时,如何将校验和值设为硬编码
这让我想到了这个问题。应用程序有哪些方法可以检测到它已被修改?
------- 编辑 ------- 附加信息 ------
我一直在做一些测试,我不得不说我对校验和值的存储位置感到困惑。
- 没有与互联网的连接。
- 应用程序仅附带一个 dll(我手动提取了安装程序文件)该 dll 文件很旧,并且在应用程序之前最后一次修改。我什至将它与没有此校验和检查且 dll 相同的应用程序的早期版本进行了比较。
- 我教过安装程序可能会在注册表中输入校验和值,因此我将 .exe 和 .dll 提取到从未使用过安装程序的单独计算机上。变化仍在检测中!
- 这绝对是一个校验和测试,因为我已将单个字节的填充从 00 更改为 20,并且检测到了更改。如果我编辑回 00 应用程序执行正常。
所以现在我想知道是否有可能在输入硬编码校验和值之前计算校验和是什么?我确实意识到在更改硬编码校验和值时实际校验和值会发生变化。我想知道在硬编码和查找匹配项时是否有任何方法可以预先确定校验和值。似乎不可能,但考虑到这种情况,我想不出任何其他方法。