1.遇到的问题无法运行:
很显然这里的elf存在3种不同的架构
┌──(kali㉿kali)-[~/Desktop]
└─$ ./TCPL
riscv64-binfmt-P: Could not open '/lib/ld-linux-riscv64-lp64d.so.1': No such file or directory
┌──(kali㉿kali)-[~/Desktop]
└─$ ./main
qemu: uncaught target signal 4 (Illegal instruction) - core dumped
zsh: illegal hardware instruction ./main
┌──(kali㉿kali)-[~/Desktop]
└─$ ./a70805912bd845fb92cb4e98bb0531dd
ppc64le-binfmt-P: Could not open '/lib64/ld64.so.2': No such file or directory
这是3个elf的区别:
┌──(kali㉿kali)-[~/Desktop]
└─$ file ./TCPL
./TCPL: ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=97853ab52c6dc9a68d68295c7ec62cc790905b3d, for GNU/Linux 4.15.0, not stripped
┌──(kali㉿kali)-[~/Desktop]
└─$ file ./main
./main: ELF 64-bit LSB executable, LoongArch, version 1 (GNU/Linux), statically linked, BuildID[sha1]=d5e0c55633e219eba65de1d09a45173c22668739, for GNU/Linux 5.19.0, with debug_info, not stripped
┌──(kali㉿kali)-[~/Desktop]
└─$ file ./a70805912bd845fb92cb4e98bb0531dd
./a70805912bd845fb92cb4e98bb0531dd: ELF 64-bit LSB executable, 64-bit PowerPC or cisco 7500, OpenPOWER ELF V2 ABI, version 1 (SYSV), dynamically linked, interpreter /lib64/ld64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=16c70fb580abf275b8c636b1829dd621179c23e3, stripped
得出结构是缺少对应架构的libc!
所以直接去安装一手就可以解决了!
2.开始修复
- riscv64架构的elf
先更新:
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt update
安装:
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt install gcc-riscv64-linux-gnu
# 由于安装后并未将libc文件加入环境变量所以需要手动复制一下!
┌──(kali㉿kali)-[~/Desktop]
└─$sudo cp /usr/riscv64-linux-gnu/lib/* /lib/
┌──(kali㉿kali)-[~/Desktop]
└─$ ./TCPL
FLAG{PLCT_An4_r1SCv_x1huann1}
Please replace 1 with the following picture.
***
* *
* *
* *
***
- powerpc64le架构的elf
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt install gcc-powerpc64le-linux-gnu
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo cp /usr/powerpc64le-linux-gnu/lib/* /lib/
┌──(kali㉿kali)-[~/Desktop]
└─$ ./a70805912bd845fb92cb4e98bb0531dd
ppc64le-binfmt-P: Could not open '/lib64/ld64.so.2': Too many levels of symbolic links
# 还是无法运行因为这个是64位的
┌──(kali㉿kali)-[~/Desktop]
└─$ file ./a70805912bd845fb92cb4e98bb0531dd
./a70805912bd845fb92cb4e98bb0531dd: ELF 64-bit LSB executable, 64-bit PowerPC or cisco 7500, OpenPOWER ELF V2 ABI, version 1 (SYSV), dynamically linked, interpreter /lib64/ld64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=16c70fb580abf275b8c636b1829dd621179c23e3, stripped
发现他的so的位置是/lib64/ld64.so.2,再去看看刚刚安装的powerpc64le-linux-gnu是否有/lib64/ld64.so.2
其实他用的就是/lib/ld64.so.2的文件,所以直接手动创建一手链接:
┌──(kali㉿kali)-[/usr/lib]
└─$ sudo ln -s /lib/ld64.so.2 /lib64/ld64.so.2
成功!
┌──(kali㉿kali)-[~/Desktop]
└─$ ./a70805912bd845fb92cb4e98bb0531dd
8ceeca8e9d7c85fb0d869032
Bingo!
- LoongArch架构的elf
不知道缺少什么,所以直接安装一遍qemu-user qemu-system
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt-get install qemu-user qemu-system
┌──(kali㉿kali)-[~/Desktop]
└─$ ./main
XYCTF{7e5165f1-385d-4fe9-1f2664d833a648a4}
发现成功!
4.又遇到问题
也可以继续安装一遍,就可以运行了,但是之前可以运行的又出问题了:
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt-get install qemu-user qemu-system
┌──(kali㉿kali)-[~/Desktop]
└─$ ./main
XYCTF{7e5165f1-385d-4fe9-1f2664d833a648a4}
┌──(kali㉿kali)-[~/Desktop]
└─$ file ./TCPL
./TCPL: ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv64-lp64d.so.1, BuildID[sha1]=97853ab52c6dc9a68d68295c7ec62cc790905b3d, for GNU/Linux 4.15.0, not stripped
又重新试了一遍发现是之前添加的:
sudo cp /usr/powerpc64le-linux-gnu/lib/* /lib/
和
sudo cp /usr/riscv64-linux-gnu/lib/* /lib/
被覆盖了需要重新再复制一遍!
5.总结:
先尝试安装:
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo apt-get install qemu-user qemu-system
如果不可以运行就去下载对应的gcc编译器它会将libc文件也下载下来,再将libc文件复制到目标目录就可以运行了!
下载好的编译器都在这个目录:/usr/