问候.我现在一直在研究Literate Programming,我确实喜欢它背后的想法:你基本上写了一些关于你的代码的文章并写下了尽可能多的设计决策,代码可能围绕模块,内部工作原理由设计决策,潜在扩展产生的模块,假设和结论,所有这些都可以使用tex以一种很好的方式写下来.当然,第一点:它是文档.它必须保持最新,但这不应该那么糟糕,因为你的改变应该有理由,你可以写下来.
但是,文学编程如何在更大程度上扩展?总体而言,文学编程仍然只是文本.当然,非常人类可读的文本,但仍然是文本,因此,很难遵循大型系统.例如,我重新编写了我的编译器的大部分内容以使用>>和一些魔法来将编译步骤链接在一起,因为一些"x.register_follower(y); y.register_follower(z); y.register_follower(a); ... "变得非常笨拙,并将其改为x >> y >> z >> a使它变得更好,尽管这也是它的突破点.
那么,Literate Programming如何扩展到更大的系统?有人试图这样做吗?
我的想法是使用LP来指定使用事件流相互通信的组件,并使用graphviz的子集将所有这些组合在一起.这将是LP的一个相当自然的扩展,因为您可以从网络中提取文档 - 数据流图 - 并且也可以从中生成代码.你怎么看呢?
- Tetha.
我的问题非常简单:你是一个可执行文件,输出"访问被授予"或"访问被拒绝",邪恶的人试图理解你的算法或修补你的内脏,以使你一直说"访问授权".
在介绍之后,你可能会非常想知道我在做什么.一旦它出来,他会破解暗黑破坏神3吗?我可以安抚你的担忧,我不是那些破解者之一.我的目标是破解.
Crackmes可以在 - 例如 - www.crackmes.de上找到.Crackme是一个小的可执行文件(大多数时候)包含一些算法来验证串行和输出"访问被授予"或"访问被拒绝",具体取决于序列.目标是始终使此可执行输出"已授予访问权限".允许使用的方法可能受到作者的限制 - 无需修补,无需反汇编 - 或涉及使用二进制,objdump和十六进制编辑器可以执行的任何操作.破解裂缝是乐趣的一部分,然而,作为一名程序员,我想知道如何创建困难的裂缝.
基本上,我认为crackme包含两个主要部分:一定的串行验证和周围的代码.
简单地使用汇编来进行串行验证是很有可能的,例如,我有一个想法是将串行作为模拟微处理器的输入,该微处理器必须以特定状态结束才能使串行接受.另一方面,人们可能会变得更便宜并且更多地了解加密方法以确保这一部分的安全性.因此,使攻击者试图修补可执行文件足够困难并不难.
但是,更难以保护二进制文件.让我们假设一个完全安全的串行验证,不能以某种方式逆转(当然我知道它可以颠倒,毫无疑问,你从你尝试破解的二进制文件中删除部分,并在它接受之前抛出随机序列).我们如何防止攻击者只是覆盖二进制文件中的跳转以使我们的二进制文件接受任何内容?
我一直在搜索这个主题,但大多数结果都是二进制安全性,自我验证二进制文件等等,最终会出现在试图阻止使用受损二进制文件攻击操作系统的文章中.通过签署某些二进制文件并使用内核验证这些签名.
我的想法目前包括:
您是否能够想出更多方法来惹恼可能的攻击者?(当然,你不能永远地把他带走,有些时候,所有的检查都会被打破,除非你设法通过在程序本身中为程序嵌入正确的校验和来打破校验和生成器,呵呵)