binary
指定dynamic linker以使用高版本GCC
今天有人问怎么在没有root的不可更新老旧Linux环境里使用高版本GCC,主要困难在于GCC对glibc版本有一定要求。假设使用现成的GCC二进制包,解压到本地后执行gcc,报错:/lib64/libc.so.6: version `GLIBC_2.14' not found,即系统glibc的libc.so.6中缺乏更高版本的符号(参考info '(ld) VERSION')。使用新符号通常表示API有更新,不过很多时候旧版本的库也能用,可能有两个原因:一是编译机器的库版本可能较新,soname版本号较高,编译出来的可执行文件也会有较高的版本要求;二是源文件因保守指定了较高的版本号,实际上旧版本也能用。
比如最近ncurses主版本号更新到6,/usr/lib/libncursesw.so.5变成了/usr/lib/libncursesw.so.6,导致很多可执行文件没法用了:
ELF Hacks
我喜欢基于代码片段的学习,之前学习过一些binutils和其他处理ELF的工具的奇技淫巧,了解到很多概念,比如weak symbol、common section、RPATH、把资源文件嵌入ELF等,昨天创建了一个项目https://github.com/MaskRay/ElfHacks整理了很多自包含的例子。
…BCTF 2015 CamlMaze命题报告及CTF题目镜像准备方法
题目
BCTF 2015中的题目,名为CamlMaze。向解出此题的217、PPP、Gallopsled、Dragon Sector表达祝贺。
描述:
Caml has found a foggy maze. Please direct him to find the gold.
The source code of Caml Featherweight may be helpful.
本题是字节码逆向题,供选手下载的user.tgz包含camlfwrun(字节码解释器)、bytecode(字节码,是一段客户端程序,用我的Caml Featherweight编译生成)、camlfwod(用ocamlrun执行的字节码查看器,名字来源于objdump)。和Caml Featherweight相比,camlfwrun经过了少许修改,在解释前会向服务端创建socket,是为了适配交互式逆向/pwn类CTF题目,静态编译,已被strip -s。
名字中的Caml源于Categorical Abstract Machine Language,一个ML语言的方言。
…