我想知道是否有一种方法可以可靠地加密、加密或隐藏m68k (或 assembly in general)中的数字。
I.e: 01=09, 32=1F或者其他不一致的东西。
谢谢!
发布于 2015-12-30 13:33:00
只有这样,我才能在不浪费任何额外周期的情况下,滥用68k地址总线只有24位的事实(至少在一些最早的模型上是这样)。您可以在每一个长字地址之后缩进随机的8位整数。
dc.l ($30<<24)|$FF1234.l
jsr ($EA<<24)|DisplayText
lea ($1F<<24)|MainPalette,a2
clr.b ($1F<<24)|$FF890D.l这不会影响68k处理器在最轻微的高8位被忽略,但任何人试图使用国际开发协会Pro将发疯,因为国际开发协会Pro使用完全32位的寻址!这意味着,只要高8位不是0或0xFF (分别用于ROM和RAM ),它现在就无法找到任何引用的数据、子例程或RAM地址。当然,任何足够聪明的人,这并不是什么大问题,但这需要更多的手工工作。
您可以尝试的其他加密形式,是使用图灵完整指令集,减少使用的指令,并使程序流程更难理解。然而,它可能会使用更多的CPU时间和ROM空间,这可能不是理想的。尽管如此,如果你想看的话,我只做了些动作。
发布于 2015-12-24 02:07:47
简短回答:不。
更长的答案:在大多数CPU中没有一个很好的方法来处理这个问题。这样做的CPU有一个用于IO的硬件加密块,因此从盒子外部引用的数据是加密的。实际上,你可以对某些类型的密码加密数据进行一定的数学运算。例如,您可以在IDEA中添加两个加密的值,并得到一个加密的输出,即添加,但这不是很有用。
我能想到的最接近的事情是将一些偏移值设置到68k寄存器中的几个,然后围绕它建立一个简单的Fi脂l网络。这将允许您对数据进行操作。它只是一些ROR和XOR掩码,但它会使您能够获取数据进出,但您需要浪费周期,以便您可以去混淆数据。
如果您在FPGA上有一个软核,我已经看到在寄存器级使用了使用PRESENT的隔离密钥进行加密。达特茅斯的熊操作系统与硬件集成,使您在进程级别的隔离。如果你需要线索的话,那可能是个很好的开始。祝好运。
https://stackoverflow.com/questions/34427319
复制相似问题