我试图从C或C ++可执行文件中打开一个bash shell(在Linux中)。我尝试了两种语言,但由于系统调用所需的库,编译后的可执行文件超过4kb。
我需要使可执行文件小于或等于4Kb。我怎么能这样做?
答案 0 :(得分:2)
你剥离了你的程序吗?此示例代码使用C和C ++提供小于4K的内容:
$ cat shell.c
#include <stdlib.h>
int main() {
system("echo hello");
return 0;
}
$ gcc -o shell shell.c
$ strip -s shell
$ ./shell
hello
$ du -b shell
2836 shell
$ g++ -o shell shell.c
$ strip -s shell
$ ./shell
hello
$ du -b shell
3216 shell
当然,您可以将可执行文件缩小。将它写在asm中,不要链接任何库。
答案 1 :(得分:2)
如果你需要做的就是执行一个shell,编译
#include<unistd.h>
int main(){
static char* bash[] = {"/bin/bash", NULL};
execv(*bash, bash);
}
dietlibc为diet -Os gcc test.c
,产生2929字节的可执行文件。使用strip a.out
剥离二进制文件会产生1464个字节。这也具有静态链接的好处,适用于漏洞利用。