我的C语言程序使用AES加密,通过扫描程序内存看sbox字节是否存在就可以轻松找到。 (简单搜索 63 7C 77 7B F2 6B 6F C5 是否存在)
我不想让黑客那么容易知道我的加密算法,所以我想加密sbox。
无论如何,我已经在源代码中将所有 sbox 字节设置为 0x00,在二进制可执行文件中无法检测到它,但程序运行后,又在程序内存中检测到 sbox 字节。
我认为其他地方的代码动态生成 sbox,但我只是找不到它在哪里。
那么有没有什么简单的方法可以找出哪一行或哪个源代码文件生成了特定的字节?
如果答案是否定的,我正在考虑 Visual Studio 调试。
执行完一行源代码后,暂停程序,扫描整个程序内存,看看里面是否有特定的字节。一遍又一遍地重复此操作,直到找到它。
但是我对 Visual Studio 不熟悉,所以我不确定这是否可能。
Visual Studio 允许您使用“调试/新建断点/数据断点...”菜单命令添加“数据断点”。基本上,您可以设置一个断点,一旦给定内存地址的内容发生更改,就会触发该断点。听起来像您知道哪个地址包含正在更改的数据,因此这应该可以让您找到正在更改它的代码。