• 北京理工大学信息安全与对抗竞赛crackme02分析


    不知道为什么 ,最近睡眠不好,晚上睡不着,早上醒得早。看吧,今天早上又被鸟吵醒了。

    醒了,看着无事来破解下这个,在测试过程中发现,这个crackme有个搞笑的地方。

    就是注册码只要是1234,无论你输入或者不输入用户名,都会提示成功(当然有例外,这也是本题的所在),到官方一提交,夷,错了,我勒个去,居然没看题目就做了。

    原来是要求用户名必须是2012,得,你牛。

    看我怎么搞定你!

    当然,首先还是找到按钮事件。

     1 00401004   .  55            push    ebp
     2 00401005   .  8BEC          mov     ebp, esp
     3 00401007   .  81EC 10000000 sub     esp, 10
     4 0040100D   >  6A FF         push    -1
     5 0040100F   .  6A 08         push    8
     6 00401011   .  68 11000116   push    16010011
     7 00401016   .  68 01000152   push    52010001
     8 0040101B   .  E8 D7010000   call    004011F7                         ;  获取注册码
     9 00401020   .  83C4 10       add     esp, 10
    10 00401023   .  8945 FC       mov     dword ptr [ebp-4], eax
    11 00401026   .  68 04000080   push    80000004
    12 0040102B   .  6A 00         push    0
    13 0040102D   .  8B45 FC       mov     eax, dword ptr [ebp-4]
    14 00401030   .  85C0          test    eax, eax                         ;  注册码输入是否为空
    15 00401032   .  75 05         jnz     short 00401039
    16 00401034   .  B8 509B4600   mov     eax, 00469B50
    17 00401039   >  50            push    eax
    18 0040103A   .  68 01000000   push    1
    19 0040103F   .  BB 60124000   mov     ebx, 00401260
    20 00401044   .  E8 A8010000   call    004011F1                         ;  eax为注册码的十六进制形式
    21 00401049   .  83C4 10       add     esp, 10
    22 0040104C   .  8945 F8       mov     dword ptr [ebp-8], eax           ;  注册码放入XXX
    23 0040104F   .  8B5D FC       mov     ebx, dword ptr [ebp-4]
    24 00401052   .  85DB          test    ebx, ebx
    25 00401054   .  74 09         je      short 0040105F
    26 00401056   .  53            push    ebx
    27 00401057   .  E8 8F010000   call    004011EB
    28 0040105C   .  83C4 04       add     esp, 4
    29 0040105F   >  E8 AF000000   call    00401113                         ;  关键call,其实就是读取用户名的值
    30 00401064   .  3945 F8       cmp     dword ptr [ebp-8], eax           ;  注册码与XXXXX进行比较
    31 00401067   .  0F85 40000000 jnz     004010AD                         ;  关键跳
    32 0040106D   .  68 04000080   push    80000004

    来看看关键call中的一部分。

    1 0040118F  |.  8945 FC       mov     dword ptr [ebp-4], eax
    2 00401192  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
    3 00401195  |.  E9 00000000   jmp     0040119A
    4 0040119A  |>  8BE5          mov     esp, ebp

    如果你仔细看,你会觉得真他妈脑残。

    就像看a=b;   b=a;一样。而且还jmp到下一句。

    反正总的来说,关键call就是把用户名,也就是2012放入堆栈中,等着对比就可以了。

  • 相关阅读:
    Android内存管理篇
    Android内存管理篇
    Java:ServiceLoader未加载服务提供实现类
    Java:SPI机制
    利用向量积(叉积)计算三角形的面积和多边形的面积
    VMware虚拟机安装WinXP出现错误output error file to the following location A:GHOSTERR.TXT
    @media与css先后顺序产生的优先级问题
    css 始终显示滚动条,内容超出显示有滑块的滚动条,内容没有超出显示空的滚动条
    css 内容溢出显示垂直滚动条,内容不超出就不显示滚动条
    css 一行或多行文字溢出以...的形式隐藏
  • 原文地址:https://www.cnblogs.com/tk091/p/2509401.html
Copyright © 2020-2023  润新知