首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个编译的二进制文件与完全相同的汇编代码在破解二进制文件时行为不同?或者我可能遗漏了什么?

两个编译的二进制文件与完全相同的汇编代码在破解二进制文件时行为不同?或者我可能遗漏了什么?
EN

Stack Overflow用户
提问于 2020-06-18 05:18:35
回答 1查看 630关注 0票数 0

我有两个exe文件,一个是原始文件,另一个是破解文件的矢量幻象和破解文件是vmbe.zip,两个文件都有完全相同的大小。

我使用ghidra来解压缩那些二进制文件,然后通过使用option > export (O)将这些文件导出为c/c++程序的格式。

然后,我将这些文件打开到Visual中,并应用Diff扩展查找这些文件之间的差异,只需按ALT+F5就可以导航到差异。

然后,我观察到一些函数只是未能解压缩,显示了以下错误,但我只是使用Windows->函数在Ghidra中搜索这些函数,然后将这些函数逐个解压缩,然后在适当的位置将这些函数放入整个.c文件中。

代码语言:javascript
复制
/*
Unable to decompile 'FUN_004475d0'
Cause: Exception while decompiling 004475d0: process: timeout
*/

现在我有两个.c文件,一个是解压缩版本的原始exe文件,另一个是破解的exe文件,在修改了较少的变量名之后,我们很容易发现在函数FUN_0043a620的末尾,这两个文件只有一个不同之处。

原始exe解压缩的.c文件

代码语言:javascript
复制
    _bVar2 = uVar3 & 0xffffff00 | (uint)bVar2;
  }
  *in_FS_OFFSET = local_c;
  return _bVar2;
}

破解的exe解压缩的.c文件

代码语言:javascript
复制
    _bVar2 = uVar3 & 0xffffff00 | 1;
  }
  *in_FS_OFFSET = local_c;
  return _bVar2;
}

在Ghidra中,我们可以看到只有一个程序集指令在内存位置0043a687中被更改。

原始文件

代码语言:javascript
复制
        0043a687 b3  01           MOV        BL,AL

破解文件

代码语言:javascript
复制
        0043a687 b3  01           MOV        BL,0x1

现在,我更改了原始exe文件中的指令,只从option > export (O)导出二进制文件。

然后,我尝试我的版本的破解二进制文件,只需用我的破解文件替换,它就是不起作用,但当我尝试破解文件时,它工作起来很有魅力。

这个补丁看起来只是一个正确的解决方案,因为这是一个决定软件是否注册的函数,只需观察返回的值,我们就可以将它变成return 1。我们可以在分解后的FUN_0043a620文件中搜索该函数.c的用法。

例如

代码语言:javascript
复制
 if (local_65 != 0) {
    uVar5 = FUN_0043a620();
    if ((char)uVar5 != '\0') {
      pQVar7 = (QString *)FUN_0043a580((char *)&local_54,"Thank you for activating!");
      local_4._0_1_ = 5;
      pQVar8 = (QString *)FUN_0043a580((char *)&param_1,"Activation succeeded");

代码语言:javascript
复制
 uVar4 = FUN_0043a620();
  if ((char)uVar4 == '\0') {
    pQVar5 = (QString *)
             FUN_0044b910((char *)&local_14,

                          "Not activated. Click the \'Activate\' button on the first page to enable saving."
                         );

这正是我所发现的,甚至在我看破解二进制之前,我尝试过,但它没有起作用,然后我发现这个破解文件试图理解工作破解二进制和原始二进制之间的区别。

我想知道为什么我的破解版本不能工作,即使我复制了正确的修改后的汇编指令从工作破解的文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-21 09:31:10

使用十六进制编辑器(FlexHex,BeyondCompare,.)寻找这两个文件之间的差异,例如,可能还有其他的差异不是代码差异,比如全局数据中的一些变化。

为了了解其他字节是什么,您可以分析二进制文件。

  1. 静态地:在GhidraIDA中打开它,查找该数据的x-引用以及它使用的位置。很好的机会,它在某种程度上与您在代码中看到的其他更改有关。
  2. 动态:尝试在访问此位置时设置硬件断点。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62442860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档