【问题标题】:I need to know how to increase string size in assembly?我需要知道如何在汇编中增加字符串大小?
【发布时间】:2020-08-14 17:53:22
【问题描述】:

.rodata:00014844 aFpebfmj1fre5fm DCB "FpebFmJ1FRe5FmTbGRDnGQ==",0

我使用十六进制编辑器添加字节但不起作用。

【问题讨论】:

  • 你真的不能那样做。
  • @500-InternalServerError 为什么不能做?
  • 如果在您希望扩展的变量之后紧跟有其他内容,则必须重新定位该变量以及之后的所有其他内容,并修复对这些位置的所有引用。

标签: assembly reverse-engineering ida


【解决方案1】:

要增加字符串文字的大小,您必须先为额外的字节腾出空间。

要为额外的字节腾出空间,您必须移动位于更高地址的所有内容(在所有部分中)。

要移动位于更高地址的所有内容,您不能只移动字节 - 您还必须将包含地址的每条指令更改为被移动的数据。

要将包含地址的每条指令更改为移动的数据,您有两种选择:

  • 从原始源代码重新编译/重新组装/重新链接整个内容。

  • 花费数年时间试图找到并修复每一条指令,然后在因为你在某个地方遗漏了一条指令而不起作用时放弃。

【讨论】:

    【解决方案2】:

    这取决于你的目标。你问了正确的问题,但问题听起来是错误的。您不需要直接增加此字符串的大小。您想强制代码读取另一个更长的字符串。

    方法:

    1. 从源代码重建代码(但我猜你的目标是专有的)
    2. 更改所有代码引用(有时是数据引用)中字符串的地址。

    第二种方法需要为字符串找到一个新地址,你可以选择:

    1. 在rodata 部分找到未使用的字符串/数据。例如。程序终止时的异常消息(实际上,如果程序崩溃,您不需要说明原因 - 如果您是该程序的作者,则异常,但在这种情况下您有来源)
    2. 在节/段的末尾找到大小对齐。一些编译器默认在所有数据之后留下可用空间。例如。您的程序rodata 的总大小为0x5780,但编译器将段大小设置为0x6000 以进行对齐。在这种情况下,您有 0x6000 - 0x5780 字节。
    3. 将新的段/节附加到文件中。有几个工具,在阅读 ELF/PE/mach-o 描述后,您将能够自己制作。

    这些事情需要很多时间,但不是几年。如果您具备基本的装配知识 - 需要数周和数月的时间来学习细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2015-03-15
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      相关资源
      最近更新 更多