思路
首先这是破解题,并且题目标题是0protection,那可能意思是没有加壳。
My Writeup
使用winhex打开二进制文件:
反复查看也只有这个123456789比较像了
别人的writeup
首先确认是否是zip文件而不是混杂了其他数据的文件:
$file ch1.zip
ch1.zip: Zip archive data, at least v2.0 to extract
通过file命令判断文件为zip文件,现在开始解压
关于linux中的file命令
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
-b 列出辨识结果时,不显示文件名称
-c 详细显示指令执行过程,便于排错或分析程序执行的情形
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称
-L 直接显示符号连接所指向的文件的类型
-m<魔法数字文件> 指定魔法数字文件
-v 显示版本信息
-z 尝试去解读压缩文件的内容(只支持gzip压缩文件)
根据file命令对文件类型的辨识,确认为压缩文件,现在对压缩文件进行解压,得到ch1.bin文件:
$unzip ch1.zip
Archive:ch1.zip
inflating:ch1.bin
再对该二进制文件进行判断确实文件类型:
$file ch1.bin
ch1.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.9, not stripped
文件为二进制类型,没有被污染。
接下来使用r2工具获取该文件的一些信息:
$ rabin2 -I ch1.bin
arch x86
binsz 7339
bintype elf
bits 32
canary false
class ELF32
crypto false
endian little
havecode true
intrp /lib/ld-linux.so.2
lang c
linenum true
lsyms true
machine Intel 80386
maxopsz 16
minopsz 1
nx true
os linux
pcalign 0
pic false
relocs true
relro partial
rpath NONE
static false
stripped false
subsys linux
va true
rabin2是Radare2平台下的工具,kali中默认安装。
rabin2 可以获取包括ELF, PE, Mach-O, Java CLASS文件的区段、头信息、导入导出表、字符串相关、入口点等等,并且支持几种格式的输出文件。使用man rabin2 可以查看rabin2的使用帮助文档。
工具具体用法参见:https://www.jianshu.com/p/4c3e503442c4
在没有获得比较有价值信息的情况下,尝试运行二进制文件:
(这里我在本地操作时,需要多文件进行提权)
$chomd a+x ch1.bin
提示我们需要密码,在输入密码后程序会进行校验。可以通过逆向查看到正确的密码:
$ rabin2 -z ch1.bin
000 0x00000810 0x08048810 10 11 (.rodata) ascii %s : "%s"\n
001 0x0000081b 0x0804881b 17 18 (.rodata) ascii Allocating memory
002 0x0000082d 0x0804882d 19 20 (.rodata) ascii Reallocating memory
003 0x00000841 0x08048841 9 10 (.rodata) ascii 123456789
004 0x0000084c 0x0804884c 60 61 (.rodata) ascii ############################################################
005 0x0000088c 0x0804888c 60 61 (.rodata) ascii ## Bienvennue dans ce challenge de cracking ##
006 0x000008cc 0x080488cc 61 62 (.rodata) ascii ############################################################\n
007 0x0000090c 0x0804890c 34 35 (.rodata) ascii Veuillez entrer le mot de passe :
008 0x00000930 0x08048930 60 61 (.rodata) ascii Bien joue, vous pouvez valider l'epreuve avec le pass : %s!\n
009 0x00000970 0x08048970 32 33 (.rodata) ascii Dommage, essaye encore une fois.
发现特殊的字符串123456789,bingo!