可执行文件中通用字符串的含义?

跷跷板

看起来有些相似的长字母数字字符串通常出现在Mach-O 64位可执行文件和ELF 64位LSB可执行文件以及其他非字母数字符号中:

cat /bin/bash | grep -c "AWAVAUATSH"

有181个结果,并且

cat /usr/bin/gzip | grep -c "AWAVAUATSH"

有9个结果。

在此处输入图片说明

这些弦是什么?

受雇于俄罗斯

有趣的问题。由于我不知道答案,因此我采取了以下步骤找出答案:

字符串在文件中的何处出现?

strings -otx /bin/gzip | grep AWAVAUATUSH
   35e0 AWAVAUATUSH
   69a0 AWAVAUATUSH
   7920 AWAVAUATUSH
   8900 AWAVAUATUSH
   92a0 AWAVAUATUSH

那是哪一部分?

readelf -WS /bin/gzip

There are 28 section headers, starting at offset 0x16860:

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  [ 1] .interp           PROGBITS        0000000000400238 000238 00001c 00   A  0   0  1
  [ 2] .note.ABI-tag     NOTE            0000000000400254 000254 000020 00   A  0   0  4
  [ 3] .note.gnu.build-id NOTE            0000000000400274 000274 000024 00   A  0   0  4
  [ 4] .gnu.hash         GNU_HASH        0000000000400298 000298 000038 00   A  5   0  8
  [ 5] .dynsym           DYNSYM          00000000004002d0 0002d0 000870 18   A  6   1  8
  [ 6] .dynstr           STRTAB          0000000000400b40 000b40 000360 00   A  0   0  1
  [ 7] .gnu.version      VERSYM          0000000000400ea0 000ea0 0000b4 02   A  5   0  2
  [ 8] .gnu.version_r    VERNEED         0000000000400f58 000f58 000080 00   A  6   1  8
  [ 9] .rela.dyn         RELA            0000000000400fd8 000fd8 000090 18   A  5   0  8
  [10] .rela.plt         RELA            0000000000401068 001068 0007e0 18   A  5  12  8
  [11] .init             PROGBITS        0000000000401848 001848 00001a 00  AX  0   0  4
  [12] .plt              PROGBITS        0000000000401870 001870 000550 10  AX  0   0 16
  [13] .text             PROGBITS        0000000000401dc0 001dc0 00f1ba 00  AX  0   0 16
  [14] .fini             PROGBITS        0000000000410f7c 010f7c 000009 00  AX  0   0  4
... etc.

从上面的输出中,我们看到的所有实例AWAVAUATUSH都在.text部分中(该部分覆盖[0x1dc0, 0x10f7a)了文件的偏移量。

由于是.text,我们希望在那里找到可执行指令。我们感兴趣的地址是0x401dc0.text地址)+ 0x35e0AWAVAUATUSH文件中的0x1dc0偏移量)- 文件中的偏移量.text)== 0x4035e0

首先,让我们检查一下上述算法是否正确:

gdb -q /bin/gzip

(gdb) x/s 0x4035e0
0x4035e0:       "AWAVAUATUSH\203\354HdH\213\004%("

是的。接下来,那里的指示是什么?

(gdb) x/20i 0x4035e0
   0x4035e0:    push   %r15
   0x4035e2:    push   %r14
   0x4035e4:    push   %r13
   0x4035e6:    push   %r12
   0x4035e8:    push   %rbp
   0x4035e9:    push   %rbx
   0x4035ea:    sub    $0x48,%rsp
   0x4035ee:    mov    %fs:0x28,%rax
   0x4035f7:    mov    %rax,0x38(%rsp)
   0x4035fc:    xor    %eax,%eax
   0x4035fe:    mov    0x213363(%rip),%rax        # 0x616968
   0x403605:    mov    %rdi,(%rsp)
   0x403609:    mov    %rax,0x212cf0(%rip)        # 0x616300
   0x403610:    cmpb   $0x7a,(%rax)
   0x403613:    je     0x403730
   0x403619:    mov    $0x616300,%ebx
   0x40361e:    mov    (%rsp),%rdi
   0x403622:    callq  0x4019f0 <strlen@plt>
   0x403627:    cmp    $0x20,%eax
   0x40362a:    mov    %rax,0x8(%rsp)

这些确实看起来像普通的可执行指令。什么是操作码push %r15这张表确实表明了0x41这些操作码恰好拼写同样,被编码为只是发生spell 等等。0x57push %r15AWASCIIpush %r140x410x56AV

PS我的gzip版本已被完全剥离,这就是为什么GDB在上述反汇编中未显示任何符号的原因。如果我改用非剥离版本,则会看到:

strings -o -tx gzip | grep AWAVAUATUSH | head -1
   6be0 AWAVAUATUSH

readelf -WS gzip | grep text
  [13] .text             PROGBITS        0000000000401b00 001b00 00d102 00  AX  0   0 16

因此字符串仍然在.text

gdb -q ./gzip
(gdb) p/a 0x0000000000401b00 + 0x6be0 - 0x001b00
$1 = 0x406be0 <inflate_dynamic>

(gdb) disas/r 0x406be0
Dump of assembler code for function inflate_dynamic:
   0x0000000000406be0 <+0>:     41 57   push   %r15
   0x0000000000406be2 <+2>:     41 56   push   %r14
   0x0000000000406be4 <+4>:     41 55   push   %r13
   0x0000000000406be6 <+6>:     41 54   push   %r12
   0x0000000000406be8 <+8>:     55      push   %rbp
   0x0000000000406be9 <+9>:     53      push   %rbx
   0x0000000000406bea <+10>:    48 81 ec 38 05 00 00    sub    $0x538,%rsp
...

现在,您可以清楚地看到ASCII 0x4157415641554154...操作码顺序。

PPS最初的问题是关于AWAVAUATSH,它确实出现在我的Mach-Obash和中gzip,但没有出现在Linux中。相反,AWAVAUATUSH没有出现在我的Mach-O二进制文件中。

答案是一样的。AWAVAUATSH序列是相同的AWAVAUATUSH,但具有push %rbp删去。

PPPS这是一些其他具有相同性质的“有趣”字串:

strings /bin/bash | grep '^A.A.A.' | sort | uniq -c | sort -nr | head
     44 AWAVAUATUSH
     27 AVAUATUSH
     16 AWAVAUA
     15 AVAUATUH
     14 AWAVAUI
     14 AWAVAUATUH
     12 AWAVAUATI
      8 AWAVAUE1
      8 AVAUATI
      6 AWAVAUATU

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在.COM可执行文件中以相反顺序打印字符串?

来自分类Dev

释放驻留在可执行文件中的字符串的内存

来自分类Dev

错误13:在grub中使用字符串文字启动简单内核时,可执行文件无效或不受支持

来自分类Dev

将字符串作为标准输入传递给可执行文件

来自分类Dev

在我的PATH中使用特定字符串查找可执行文件

来自分类Dev

在编译的可执行文件中加密常量字符串(例如密码)

来自分类Dev

在已编译的可执行文件中加密常量字符串(例如,密码)

来自分类Dev

如何在可执行文件中使用grep字符串

来自分类Dev

Prolog可执行文件以代码形式编写字符串

来自分类Dev

如何从 PowerShell 将字符串和数组的混合传递给可执行文件?

来自分类Dev

是否可以在不影响文件权限的情况下替换属于另一个用户的可执行文件中的字符串?

来自分类Dev

阻止可执行文件和内置程序将以-开头的字符串参数解释为开关?

来自分类Dev

在可执行文件中“隐藏”文件 (C++)

来自分类Dev

函数,别名和可执行文件中的连字符是否存在问题?

来自分类Dev

用C中的Makefile获取可执行文件

来自分类Dev

在VisualStudio中打开我自己的可执行文件

来自分类Dev

可执行文件库中的strace'open'调用

来自分类Dev

检查命令是否在PATH /可执行文件中

来自分类Dev

在C#可执行文件中构建.sln

来自分类Dev

在Cabal中定义未安装的可执行文件

来自分类Dev

从`coffee`可执行文件中调用函数

来自分类Dev

YAML中的Ruby可执行文件

来自分类Dev

如何在jar中访问可执行文件

来自分类Dev

测试Unix中是否存在可执行文件

来自分类Dev

通过Cabal中的可执行文件分析库

来自分类Dev

计算可执行文件中的函数调用次数

来自分类Dev

在Cython中制作可执行文件

来自分类Dev

使可执行文件在Linux中运行而无提示

来自分类Dev

在dockerfile中运行可执行文件

Related 相关文章

  1. 1

    如何在.COM可执行文件中以相反顺序打印字符串?

  2. 2

    释放驻留在可执行文件中的字符串的内存

  3. 3

    错误13:在grub中使用字符串文字启动简单内核时,可执行文件无效或不受支持

  4. 4

    将字符串作为标准输入传递给可执行文件

  5. 5

    在我的PATH中使用特定字符串查找可执行文件

  6. 6

    在编译的可执行文件中加密常量字符串(例如密码)

  7. 7

    在已编译的可执行文件中加密常量字符串(例如,密码)

  8. 8

    如何在可执行文件中使用grep字符串

  9. 9

    Prolog可执行文件以代码形式编写字符串

  10. 10

    如何从 PowerShell 将字符串和数组的混合传递给可执行文件?

  11. 11

    是否可以在不影响文件权限的情况下替换属于另一个用户的可执行文件中的字符串?

  12. 12

    阻止可执行文件和内置程序将以-开头的字符串参数解释为开关?

  13. 13

    在可执行文件中“隐藏”文件 (C++)

  14. 14

    函数,别名和可执行文件中的连字符是否存在问题?

  15. 15

    用C中的Makefile获取可执行文件

  16. 16

    在VisualStudio中打开我自己的可执行文件

  17. 17

    可执行文件库中的strace'open'调用

  18. 18

    检查命令是否在PATH /可执行文件中

  19. 19

    在C#可执行文件中构建.sln

  20. 20

    在Cabal中定义未安装的可执行文件

  21. 21

    从`coffee`可执行文件中调用函数

  22. 22

    YAML中的Ruby可执行文件

  23. 23

    如何在jar中访问可执行文件

  24. 24

    测试Unix中是否存在可执行文件

  25. 25

    通过Cabal中的可执行文件分析库

  26. 26

    计算可执行文件中的函数调用次数

  27. 27

    在Cython中制作可执行文件

  28. 28

    使可执行文件在Linux中运行而无提示

  29. 29

    在dockerfile中运行可执行文件

热门标签

归档