npi*_*nti 10 .net c# reverse-engineering
我想看看DLL(可能是在不同的机器上编译)是否相同.要做到这一点,我正在做的是加载DLL并计算MD5,这是因为DLL在不同的机器上失败(但具有相同的源).这似乎是由于这是在编译时添加(如有人提到其他元数据在这里).
我想过对整个DLL进行反向工程并查看代码是否匹配,但是,我有两个问题:
任何提示,技巧和指示将不胜感激.
你可能是对的 - 它可能是元数据.不过,我认为这不一定是最有可能的.
DLL的不同之处可能是它们是针对不同版本的.NET或可能是MONO编译的.
即使它们是从同一个源编译的,也无法保证反编译DLL会产生相同的代码 ; 实际上,鉴于编译器的优化性质,有一个微小的,理论上(但现存的)机会,稍微不同的源可以编译到相同的可执行文件 - 通常,一个循环将被展开 - 也就是说,变成顺序的,非循环的指令 - 这样可以节省内存使用量或CPU时间.
如果程序员手动展开循环并重新编译,那么这是编译器一直在进行的优化 - presto,两个具有相同输出的不同源.
一个更好的问题是你希望通过比较两个DLL来学习.如果它仅仅是为了学习,那就太棒了并且值得称赞 - 但是,对于对此进行有意义的研究所需要的知识量非常高.通过学习一般的,更适用的C#/ .net技术,您可能会找到更好的结果.
我们确实设法找到了解决这个问题的方法...我们所做的是添加了一个预构建事件,该事件会遍历一些相关文件(我们更改的文件,例如 .CS 文件),然后计算每个文件的哈希值。每个哈希值最终都会影响DLL 的全局哈希。由于我们只有少量文件,因此发生冲突的可能性很小。
然后我们将校验和添加到 DLL 的描述中。这允许我们在不同的机器上编译 DLL,但由于它们的源代码相同,因此会产生相同的校验和。
感谢您提供的所有答案,它们非常有帮助。
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |