在复习RC4时遇到的一个有意思的小众ELF加密库。看着玩玩。
ELFCrypt
源码仓库
https://github.com/droberson/ELFcrypt
这个Github主的头像好阴间
用处
利用RC4加密函数,使得只有输入正确的密码才能解密二进制程序,从而执行。
源码分析
核心在于
1 | void ELFcrypt(const char *in, const char *out, const unsigned char *key); |
获取in
,out
后
1 | program = mmap(0, filesize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); |
将会mmap
未加密程序,然后
1 | crypted = get_elf_section(program, ".crypted"); |
获取.crypted
待加密段
然后尝试加密
1 | /* Encrypt .crypted section using 'key' */ |
然后写回
1 | *((int *)(program + 0x09)) = crypted->sh_offset; |
当然.crypted
段也必须在待加密程序编译时提前声明。在想要加密的函数前加上
1 | #define CRYPTED __attribute__((section(".crypted"))) |
然后编译。
里面的RC4算法也是很一般的操作。
实际使用
现在来看是没法用的,里面有些设定很死,必须默认入口地址就是0x4000000,导致现在基本上默认基于PIE的程序,或者基址不在这里的程序一跑就会SIGSEGV。
- 本文作者: Taardis
- 本文链接: https://taardisaa.github.io/2022/03/10/ELFCrypt/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!