在新版本的二进制文件中查找相似代码的方法

逆向工程 艾达 dll 反汇编者
2021-07-12 02:19:10

得到了这样一个任务的手中。有两个dll。由于向我解释了第二个文件 (new.dll),这是第一个文件 (old.dll) 的新版本。这两个文件都是为 x64 编译的。我需要在 new.dll 中找到一些函数变成了 old.dll。以下是其中一项功能的示例。请表达您对我查找新版本代码的方法的看法:我首先使用 rdare2 查找 old.dll 中的所有函数(超过 4 万个),创建带有签名的文件并将其设置在新文件中。最后,什么也没找到。我的结论是这些变化不仅仅是表面上的。接下来,我决定搜索如下:

  1. 我对功能代码的片段进行了搜索。我在调用函数之前先看序言,然后在 new.dll 中查找这个字节序列。
  2. 我尝试查找出现在函数中的常量、字符串和其他幻数,并在 new.dll 中查找它们。
  3. 我分析了所有调用所需函数的函数,并尝试在 new.dll 中找到一组类似的调用函数。
  4. 我尝试确定直到第一个(顶部)调用函数的顺序,并在新文件中找到类似的调用顺序。
  5. 我分析了从所需函数调用的所有函数,并尝试在 new.dll 中找到一组类似的调用函数
  6. 在这里,我承认以上所有内容都没有帮助我。接下来我想,既然有这样的调用是调用qword ptr [rax+18h](分析的函数中有8个),那么这些大概就是对对象的方法的调用了。您可能会找到一个 vftable 并了解这些方法属于哪个类,并且已经创建了一组类。在我的函数中调用的方法。接下来,在 new.dll 中搜索来自相应类的方法序列被调用的位置。
  7. 您可以尝试在我的函数中找到对象的创建位置以及它的来源。接下来,在 new.dll 中查找类似的跟踪。不确定是否可以在不调试此 dll 的情况下应用此方法。目前还不清楚如何运行dll,因为只有三个导出函数: DllGetLCID PPMain DllEntryPoint

列出的搜索方法中哪些是乌托邦,哪些不是?也许有更多经过验证的选择?

0个回答
没有发现任何回复~