IOLI 0x00

第一个IOLI crackme,也是最简单的一个。

$ ./crackme0x00
IOLI Crackme Level 0x00
Password: 1234
Invalid Password!

首先检查一下口令是否就是存在于文件内的字符串。在这个例子中,无需进行任何反汇编操作,只需要使用rabin2 -z搜索二进制文件内的字符串。

$ rabin2 -z ./crackme0x00
[Strings]
nth paddr      vaddr      len size section type  string
―――――――――――――――――――――――――――――――――――――――――――――――――――――――
0   0x00000568 0x08048568 24  25   .rodata ascii IOLI Crackme Level 0x00\n
1   0x00000581 0x08048581 10  11   .rodata ascii Password: 
2   0x0000058f 0x0804858f 6   7    .rodata ascii 250382
3   0x00000596 0x08048596 18  19   .rodata ascii Invalid Password!\n
4   0x000005a9 0x080485a9 15  16   .rodata ascii Password OK :)\n

现在我们知道这些都是些什么节区了,这正是程序运行时所显示的标头信息。

nth paddr      vaddr      len size section type  string
―――――――――――――――――――――――――――――――――――――――――――――――――――――――
0   0x00000568 0x08048568 24  25   .rodata ascii IOLI Crackme Level 0x00\n

从这里面可以获得口令的一些线索和提示:

1   0x00000581 0x08048581 10  11   .rodata ascii Password:

当输入错误口令时会产生如下错误信息。

3   0x00000596 0x08048596 18  19   .rodata ascii Invalid Password!\n

这个则是口令正确时产生的提示信息。

4   0x000005a9 0x080485a9 15  16   .rodata ascii Password OK :)\n

那么,底下这串数字又是什么,它是一个字符串,但运行程序时还并没有见到它。

2   0x0000058f 0x0804858f 6   7    .rodata ascii 250382

让我们试一下:

$ ./crackme0x00
IOLI Crackme Level 0x00
Password: 250382
Password OK :)

至此我们知道250328就是该口令,完成crackme。

最后更新于

这有帮助吗?