我了解静态和动态链接之间的区别,但是否可以使用 IDA Pro、Ollydbg 或任何其他反向工具来确定可执行文件是动态链接还是静态链接?
动态 v. 静态链接
逆向工程
动态链接
2021-07-02 08:04:55
1个回答
动态链接和静态链接之间没有明显区别,因为总是可以在同一个二进制文件中动态链接某些库,而静态链接其他库。
例如,一个应用程序我 被黑了 最近的反向部分(在这种情况下是 android,但只是对大型二进制文件的一个瘦 Java 包装器)将 20 多个开源库编译到二进制文件中,但仍然动态链接 libc 和一些其他标准库。
所以一个更好的问题是“(如何)我可以确定一个应用程序是否使用了动态库,如果使用了,是哪些?”
在 Linux 上,ldd程序会告诉你这个:
$ ldd /bin/ls
linux-vdso.so.1 => (0x00007ffd14798000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f40fd591000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f40fd389000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f40fcfc4000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f40fcd86000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f40fcb82000)
/lib64/ld-linux-x86-64.so.2 (0x00007f40fd7b4000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f40fc97d000
在 Windows 上,使用Dependency Walker:
