file
实用程序显示以下信息:mybinary: ERROR: ELF 64-bit LSB executable, x86-64, invalid version (SYSV), dynamically linked (uses shared libs)error reading (Invalid argument)
我得到了GDB中的以下错误:
gdb ./mybinary
mybinary: not in executable format: File format not recognized
和objdump中的类似错误:
objdump -S -l -C -F -t -w ./mybinary
objdump: ./mybinary: File format not recognized
readelf在输出末尾显示此内容:二进制文件?
编辑:gdb和objdump显示这些错误消息,因为二进制文件的elf标头故意被破坏了。仍然不知道如何修复elf标头或调试此文件。
#1 楼
我无法在此处运行crackme,但确实在其上运行了“字符串”:$ strings crackme
/lib64/ld-linux-x86-64.so.2
libc.so.6
srand
puts
time
clock
stdin
calloc
malloc
system
getline
strcmp
__libc_start_main
__gmon_start__
GLIBC_2.2.5
%z
%r
%j
AWAVAUE1
ATE1
[]A\A]A^A_
t7"Hc
[]A\A]A^A_
$&463847345GeF387
pkill -f gdb > /dev/null 2>&1
pkill -f ddt > /dev/null 2>&1
pkill -f ddd > /dev/null 2>&1
Axj54?_
Password check failed!
Congratulations, password check successful!
;*3$"
GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.dynamic
.got
.got.plt
.data
.bss
.comment
我有几点建议:
上面的“密码检查失败!”和“恭喜,密码检查成功!”消息,您将找到一个“ Axj54?_”字符串。您应该尝试使用它作为Crackme的解决方案。
由于有对“ strcmp”的引用,您可以尝试使用LD_PRELOAD技巧将strcmp()替换为自己的函数。这是一个示例代码,该代码将打印要比较的字符串并强制它们相等:
将此文件另存为“ mystrcmp.c”: />
编译为:
#include <stdio.h>
int strcmp ( const char * str1, const char * str2 ) {
printf("strcmp intercepted: str1=%s, str2=%s\n", str1, str2);
return 0;
}
并运行crackme,例如:
$ gcc -shared -ldl mystrcmp.c -o mystrcmp.so
它应接受任何有效答案,但也应使用截获的参数之一向您显示真实答案。
评论
如果crackme足够复杂,足以更改可执行文件并杀死调试器(请参阅pkill字符串),但又愚蠢到足以将密码存储为纯字符串,我会感到惊讶。但是,尝试LD_PRELOAD是一个好主意。已投票。
–贡特拉姆·布洛姆(Guntram Blohm)
15年6月29日在9:47
谢谢你的建议。如果输入的长度> = 7,则strcmp会将用户输入与“ Axj54?_”进行比较。尽管这不是正确的密码,但strcmp和硬编码字符串可能只是出于混淆。
–lunfdxar
15年6月29日在11:13
#2 楼
可能是您的GNU调试器(gdb
)不支持x86_64体系结构。,因此请尝试在x86_64版本下使用它,或尝试使用旨在替代它的LLDB调试器(
lldb
)。 请参见:gdb到lldb命令映射页面以获取更多信息。
评论
使用十六进制编辑器检查文件。它实际上是二进制文件还是其他文件,例如设置了Executable标志的bash脚本? sh_entsize数字实际上包含一个文本片段:/ lib64 / l –但不足以确定整个文件是什么。二进制文件是使用GCC编译的C程序。编译后可能已更改。
您可以自由地将二进制文件发布到公共服务器上,以供其他人查看吗?
...是的...您找不到其他不需要登录/注册的服务器吗?无论我在哪里单击,都会弹出媒体播放器“更新” /在线赌场/等的弹出窗口。按钮“ DATEI HERUNTERLADEN”并没有真正实现应有的功能。