标签: reverse-engineering

为什么真假如此之大?

在发现几个常用命令(例如read)实际上是 Bash 内置命令(并且在提示符下运行它们时,我实际上正在运行一个两行的 shell 脚本,它只是转发到内置命令),我想看看是否相同对于true和是真的false

好吧,它们绝对是二进制文件。

sh-4.2$ which true
/usr/bin/true
sh-4.2$ which false
/usr/bin/false
sh-4.2$ file /usr/bin/true
/usr/bin/true: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=2697339d3c19235
06e10af65aa3120b12295277e, stripped
sh-4.2$ file /usr/bin/false
/usr/bin/false: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b160fa513fcc13
537d7293f05e40444fe5843640, stripped
sh-4.2$
Run Code Online (Sandbox Code Playgroud)

然而,我发现最令人惊讶的是它们的大小。我希望他们只是每一字节数,因为true基本上是exit 0falseexit 1

sh-4.2$ true …
Run Code Online (Sandbox Code Playgroud)

linux reverse-engineering

98
推荐指数
3
解决办法
2万
查看次数

了解 Linux 二进制文件在做什么

我最近有一项任务是理解二进制 Linux 程序。但是,该程序是二进制形式的。

我使用了命令file,stringsobjdump对它在做什么以及它调用了什么函数有一个初步的了解。

似乎二进制文件是用调试信息编译的。我还能学到什么?

linux reverse-engineering

62
推荐指数
1
解决办法
3万
查看次数

是否可以使用正在运行的内核的 /sys 获取设备树的信息?

通常对于 arm 系统,设备树向内核 (Linux) 提供硬件信息。这些设备树作为编译并加载到内核的 dts(设备树源)文件存在。问题是我无权访问这样的dts文件,甚至无法访问dtb文件。

我可以访问/sys/proc在机器上,我想问一下这是否允许我“猜测正确的值”以在 dts 中使用?

如果这个问题的答案还取决于是否首先使用了设备树接口(即 adtb被创建并提供给内核),而不是一些更多的黑客攻击,那么潜在的答案也可以突出另一个方面“我们只是从 vanilla 转移并修补内核以解决我们内核的设备信息问题“-解决方案?

linux arm linux-kernel device-tree reverse-engineering

37
推荐指数
2
解决办法
6万
查看次数

将可执行文件转换回 C 源代码

不幸的是我丢失了我的源代码,我只有在 linux 中用 gcc 制作的输出文件,我现在无法访问我的电脑。有什么方法可以将输出文件转换为源文件(在 linux 下的 c 中)?

c source-code reverse-engineering

15
推荐指数
2
解决办法
10万
查看次数

我需要修改一个脚本,但它充满了胡言乱语

我需要修改一个脚本,它是我下载的程序的一部分。但是,当我尝试使用 vim 查看脚本时,它充满了随机放置的符号、数字和字母。我能做些什么来阅读这个脚本吗?这是脚本的一部分:

ELF          >    @     @        J         @ 8  @         @       @ @     @ @     À      À                           @      @                                          @       @     TB     TB                   XB     XBa     XBa     \      ˜†                   €B     €Ba     €Ba     à      à                         @     @                            Påtd   „(     „(A     „(A     ´      ´             Qåtd                                                  /lib64/ld-linux-x86-64.so.2          GNU                   %   8   )   #   7              $          .   '      "          ,                            1          *   6      5   3      /   2   %   -   0                                                        

   !             (   +                     4      &                               ±                                       A             !                    ®       *                       9                       ×             ñ       «             P …
Run Code Online (Sandbox Code Playgroud)

linux scripting bash process reverse-engineering

7
推荐指数
1
解决办法
1573
查看次数

如何从进程中隐藏 TracerPID?

我猜想Linux 上的 SQL Server 正在检查/proc/self/statusTracerPID如果不是,则停止运行0。我想测试一下。玩玩,这是 strace,

... lots of stuff
openat(AT_FDCWD, "/proc/self/status", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(5, "Name:\tsqlservr\nUmask:\t0022\nState"..., 1024) = 1024
close(5)                                = 0
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
getpid()                                = 28046
gettid()                                = 28046
tgkill(28046, 28046, SIGABRT)           = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=28046, si_uid=999} ---
gettid()                                = 28046
write(2, "Dump collecting thread …
Run Code Online (Sandbox Code Playgroud)

sqlserver proc strace ltrace reverse-engineering

5
推荐指数
1
解决办法
3021
查看次数

objdump 如何反汇编 elf 二进制文件

我有一个快速的问题。我使用以下代码从 ac 代码生成了一个 ELF 二进制文件:

gcc -o simple simple.c
Run Code Online (Sandbox Code Playgroud)

然后我为那个 ELF 二进制文件做 objdump:

objdump --disassemble-all simple
Run Code Online (Sandbox Code Playgroud)

我已经检查了我的目录ls -a,那里没有 .o 文件。我的问题仍然是如何objdump向我展示完整的反汇编代码?是否objdump在二进制文件中进行静态分析以覆盖所有代码?

elf reverse-engineering

3
推荐指数
1
解决办法
3万
查看次数

奇怪的 Linux 二进制文件

我有一个可执行文件,它不能像往常/预期的那样很好地进行反汇编或反编译。

fileldd给出与通常不同的输出:

$ file exe_file
exe_file: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), statically linked, stripped

$ ldd exe_file
    not a dynamic executable
Run Code Online (Sandbox Code Playgroud)

strings 还提示某些事情已关闭:

$strings exe_file
UPX!
.....
PROT_EXEC|PROT_WRITE failed.
$Info: This file is packed with the UPX executable packer http://upx.sf.net $
$Id: UPX 3.91 Copyright (C) 1996-2013 the UPX Team. All Rights Reserved. $
Run Code Online (Sandbox Code Playgroud)

还:

$ ls -la exe_file
-rwxr-xr-x 1 root root 59896 Jan 22 15:26 exe_file
Run Code Online (Sandbox Code Playgroud)

怎么了?

linux reverse-engineering

3
推荐指数
1
解决办法
1118
查看次数