打印

一个简单的crackme**记录

[复制链接]
96|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
你画我瞎|  楼主 | 2018-10-5 07:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AC, ck, AI, AD, TE
这个crackme还算是比较简单的,没有壳,只有一个简单的linux终端输入界面,输入正确密码即出现成功的提示。

首先用root用户打开一个终端。

    objdump -x crackme

可以看出一些信息:start address 0x08048370,GLIBC_2.0 ,调用了C库 libc.so.6

再进一步的查看程序信息

    objdump -t crackme > crackmeinfo.txt

接着反汇编

    objdump -d crackme > crackmefree.txt

产生的crackmefree.txt 文件并没有像在windows上那样顺眼,没有什么提示

所以改用edb,这个跟OD的风格很像。

F9运行,在输入密码“12345678”后,F8单步跟进,发现在0x804845e下断比较好,所以重新run

   0x804845e <main+14>:        call   0x804835c <printf@plt>   ;"Linux CrackMe (Level:2) by cyrex"

   0x8048463 <main+19>:        add    $0x10,%esp

   0x8048466 <main+22>:        add    $0xfffffff4,%esp

   0x8048469 <main+25>:        push   $0x8048660

   0x804846e <main+30>:        call   0x804835c <printf@plt>  ;"TODO: You have to get the valid Password"

   0x8048473 <main+35>:        add    $0x10,%esp

   0x8048476 <main+38>:        add    $0xfffffff4,%esp

   0x8048479 <main+41>:        push   $0x8048690

   0x804847e <main+46>:        call   0x804835c <printf@plt>  ;"Enter Password:"

   0x8048483 <main+51>:        add    $0x10,%esp

   0x8048486 <main+54>:        add    $0xfffffff8,%esp

   0x8048489 <main+57>:        lea    -0x20(%ebp),%eax

   0x804848c <main+60>:        push   %eax

   0x804848d <main+61>:        push   $0x80486a1

   0x8048492 <main+66>:        call   0x804832c <scanf@plt>    ;输入错误的密码12345678

   0x8048497 <main+71>:        add    $0x10,%esp

   0x804849a <main+74>:        add    $0xfffffff8,%esp

   0x804849d <main+77>:        push   $0x80486a4

   0x80484a2 <main+82>:        lea    -0x20(%ebp),%eax

   0x80484a5 <main+85>:        push   %eax

   0x80484a6 <main+86>:        call   0x804831c <strcmp@plt>   ;跟进去step into



**************************************

;"step into:

................

mov ecx, dword ptr [esp+4]

mov edx, dword ptr [esp+8]

mov al, byte ptr [ecx]

cmp al, byte ptr [edx]

jnz 0xb75e97c7

inc ecx

inc edx            ;edx里出现了"47ghf6fh37fbgbgj",显然这就是password了

test al, al

jnz 0xb75e97b8

xor eax, eax

ret

mov eax, 1       ;因为输入"12345678",所以eax=0xffffffff

mov ecx, -1

cmovb eax, ecx

ret     ;返回eax=0xffffffff



**************************************

   ;call 0x804831c 返回eax=0xffffffff



   0x80484ab <main+91>:        add    $0x10,%esp

   0x80484ae <main+94>:        mov    %eax,%eax

   0x80484b0 <main+96>:        test   %eax,%eax    ;判断password是否正确

   0x80484b2 <main+98>:        jne    0x80484c6 <main+118>

   0x80484b4 <main+100>:        add    $0xfffffff4,%esp

   0x80484b7 <main+103>:        push   $0x80486c0

   0x80484bc <main+108>:        call   0x804835c <printf@plt>  ;打印"Good, You're ready to begin linux reversing"

   0x80484c1 <main+113>:        add    $0x10,%esp

   0x80484c4 <main+116>:        jmp    0x80484d6 <main+134>

   0x80484c6 <main+118>:        add    $0xfffffff4,%esp

   0x80484c9 <main+121>:        push   $0x8048700

   0x80484ce <main+126>:        call   0x804835c <printf@plt>  ;打印"Ohhhh, your skills are bad try again later"

   0x80484d3 <main+131>:        add    $0x10,%esp

   0x80484d6 <main+134>:        xor    %eax,%eax

   0x80484d8 <main+136>:        jmp    0x80484e0 <main+144>

   0x80484da <main+138>:        lea    0x0(%esi),%esi

   0x80484e0 <main+144>:        leave  

   0x80484e1 <main+145>:        ret   



**************************************

一轮调试,初步得出"47ghf6fh37fbgbgj"就是密码了。所以,直接 ./crackme ,输入"47ghf6fh37fbgbgj",呵呵,good,追踪成功。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

395

主题

395

帖子

0

粉丝