【发布时间】:2016-07-28 15:35:45
【问题描述】:
作为我项目的一部分,我必须在名为校验和保护的 C 程序中插入小代码。这些守卫所做的是他们使用对指令操作码进行操作的函数(加法、异或等)计算部分代码的校验和值。因此,如果有人篡改了该代码区域中的指令(添加、修改、删除),则校验和值将发生变化,并且将检测到入侵。
这是讨论这种技术的研究论文:
https://www.cerias.purdue.edu/assets/pdf/bibtex_archive/2001-49.pdf
这里是守卫模板:
guard:
add ebp, -checksum
mov eax, client_addr
for:
cmp eax, client_end
jg end
mov ebx, dword[eax]
add ebp, ebx
add eax, 4
jmp for
end:
现在,我有两个问题。
将守卫放在程序集中会比放在源程序中更好吗?
假设我将它们放在程序集中(在适当的位置)我应该使用什么样的混淆来防止保护模板很容易被看到? (因为当我有超过 1 个守卫时,攻击者不应该轻易找出所有守卫模板并一起禁用所有守卫,因为这样会使代码没有安全性)
提前谢谢你。
【问题讨论】:
标签: security assembly obfuscation checksum