飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 8598|回复: 30

[原创] pptppt的那個crackme的詳細分析

[复制链接]
  • TA的每日心情
    无聊
    2020-4-10 17:02
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-5-17 17:05:51 | 显示全部楼层 |阅读模式
    https://www.chinapyg.com/viewthr ... &extra=page%3D1



    .text:00401010 var_14          = dword ptr -14h   // 用於存儲真碼
    .text:00401010 var_10          = dword ptr -10h   // 用於存儲假碼
    .text:00401010 var_C           = dword ptr -0Ch   // 用於存儲當前取的是用戶名的第幾位
    .text:00401010 var_8           = dword ptr -8     // 用於存儲用戶名長度
    .text:00401010 Buffer          = dword ptr -4    // 用於存儲用戶名
    .text:00401010
    .text:00401010                 push    ebp             ; 保留堆疊地址
    .text:00401011                 mov     ebp, esp        ; 保留堆疊地址
    .text:00401013                 sub     esp, 54h        ; 保留堆疊中的54h個字節空間
    .text:00401016                 push    ebx             ; 保存寄存器
    .text:00401017                 push    esi             ; 保存寄存器
    .text:00401018                 push    edi             ; 保存寄存器
    .text:00401019                 mov     [ebp+var_10], 0 ; 初始化變數
    .text:00401020                 mov     [ebp+var_14], 0 ; 初始化變數
    .text:00401027                 push    offset aThisCrackmeIsM ; "This Crackme is made by pptppt\n"
    .text:0040102C                 call    _printf         ; 輸出提示
    .text:00401031                 add     esp, 4
    .text:00401034                 push    offset aIFIUZ   ; "请输入你的用户?
    .text:00401039                 call    _printf         ; 輸出提示
    .text:0040103E                 add     esp, 4
    .text:00401041                 mov     eax, [ebp+Buffer] ; eax保存用戶名
    .text:00401044                 push    eax             ; Buffer
    .text:00401045                 call    _gets
    .text:0040104A                 add     esp, 4
    .text:0040104D                 mov     ecx, [ebp+Buffer]
    .text:00401050                 push    ecx             ; Str
    .text:00401051                 call    _strlen         ; 計算用戶名長度
    .text:00401056                 add     esp, 4
    .text:00401059                 mov     [ebp+var_8], eax ; call    _strlen返回值eax
    .text:0040105C                 cmp     [ebp+var_8], 5  ; 輸入的用戶名位數是否大於5
    .text:00401060                 jg      short loc_401076 ; 判斷
    .text:00401062                 push    offset aSGZ     ; "提醒:用户?
    .text:00401067                 call    _printf         ; 小於等於五位就提示
    .text:0040106C                 add     esp, 4
    .text:0040106F                 call    sub_40DB10
    .text:00401074                 jmp     short loc_4010EB ; 恢復寄存器
    .text:00401076 ; ---------------------------------------------------------------------------
    .text:00401076
    .text:00401076 loc_401076:                             ; CODE XREF: _main_0+50j
    .text:00401076                 lea     edx, [ebp+var_10] ; 保留了40個字節的空間用於存儲假碼
    .text:00401079                 push    edx
    .text:0040107A                 push    offset Format   ; "%d"
    .text:0040107F                 call    _scanf          ; 輸入註冊碼
    .text:00401084                 add     esp, 8
    .text:00401087                 mov     [ebp+var_C], 0  ; 初始化變數為0
    .text:0040108E                 jmp     short loc_401099
    .text:00401090 ; ---------------------------------------------------------------------------
    .text:00401090
    .text:00401090 loc_401090:                             ; CODE XREF: _main_0+B0j
    .text:00401090                 mov     eax, [ebp+var_C]
    .text:00401093                 add     eax, 1
    .text:00401096                 mov     [ebp+var_C], eax
    .text:00401099
    .text:00401099 loc_401099:                             ; CODE XREF: _main_0+7Ej
    .text:00401099                 mov     ecx, [ebp+var_C]
    .text:0040109C                 cmp     ecx, [ebp+var_8] ; 比較用戶名是否取完
    .text:0040109F                 jge     short loc_4010C2 ; 取完就跳
    .text:004010A1                 mov     edx, [ebp+Buffer] ; 取用戶名
    .text:004010A4                 add     edx, [ebp+var_C]
    .text:004010A7                 movsx   eax, byte ptr [edx]
    .text:004010AA                 mov     ecx, [ebp+var_C] ; ecx保存變數
    .text:004010AD                 add     ecx, 1          ; 初始化是第一位
    .text:004010B0                 imul    eax, ecx        ; eax保存用戶名的第幾位,ecx保存為取的是第幾位用戶名
    .text:004010B3                 mov     edx, [ebp+var_14] ; edx保存剛才的計算結果
    .text:004010B6                 lea     eax, [edx+eax+100h] ; edx保存剛才的計算結果+eax保存上個迴圈的結算結果

    +100h
    .text:004010BD                 mov     [ebp+var_14], eax ; 本次迴圈的結果保存在eax
    .text:004010C0                 jmp     short loc_401090 ; 繼續迴圈下一次
    .text:004010C2 ; ---------------------------------------------------------------------------
    .text:004010C2
    .text:004010C2 loc_4010C2:                             ; CODE XREF: _main_0+8Fj
    .text:004010C2                 mov     ecx, [ebp+var_14] ; 將真碼送入ecx
    .text:004010C5                 cmp     ecx, [ebp+var_10] ; ebp+var_10保存假碼,ecx保存真碼
    .text:004010C8                 jnz     short loc_4010D9 ; 不相等就跳去提示註冊錯誤
    .text:004010CA                 push    offset aZVSJ    ; "恭喜注册成功!\n"
    .text:004010CF                 call    _printf         ; 輸出註冊成功
    .text:004010D4                 add     esp, 4
    .text:004010D7                 jmp     short loc_4010E6
    .text:004010D9 ; ---------------------------------------------------------------------------
    .text:004010D9
    .text:004010D9 loc_4010D9:                             ; CODE XREF: _main_0+B8j
    .text:004010D9                 push    offset aZ       ; "抱歉兄弟加油!\n"
    .text:004010DE                 call    _printf         ; 輸出註冊錯誤
    .text:004010E3                 add     esp, 4
    .text:004010E6
    .text:004010E6 loc_4010E6:                             ; CODE XREF: _main_0+C7j
    .text:004010E6                 call    sub_40DB10
    .text:004010EB
    .text:004010EB loc_4010EB:                             ; CODE XREF: _main_0+64j
    .text:004010EB                 pop     edi             ; 恢復寄存器
    .text:004010EC                 pop     esi
    .text:004010ED                 pop     ebx
    .text:004010EE                 mov     esp, ebp
    .text:004010F0                 pop     ebp
    .text:004010F1                 retn


    都分析成這樣了,還原基本不難,不過我依然不懂編程,哪位教教???pm我啊
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-4-10 17:02
  • 签到天数: 5 天

    [LV.2]偶尔看看I

     楼主| 发表于 2009-5-17 17:07:17 | 显示全部楼层
    沙發是我的,你別跟我搶。。。。。。。。。。。。。。
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2015-10-29 08:08
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2009-5-17 17:08:41 | 显示全部楼层
    膜拜。。。。真详细啊。。。学习下。。哈哈
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-5-17 17:10:01 | 显示全部楼层
    PM下
    太详细了/:good
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-5-31 13:17
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-5-17 18:44:37 | 显示全部楼层
    /:001 看大牛的提示,好象使用IDA这么个摸门法.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-5-17 23:16:44 | 显示全部楼层
    膜拜下冷血书生,学习了/:good
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-5-18 00:25:02 | 显示全部楼层
    本想说“完全不懂,膜拜”等字样 :loveliness: ,还是正经点,友情顶贴/:good
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-4-1 09:59
  • 签到天数: 76 天

    [LV.6]常住居民II

    发表于 2009-5-18 10:12:08 | 显示全部楼层
    /:L 偶只分析了注册流程,大概明白了
    大牛们的分析就是详细呀,膜拜一下

    [ 本帖最后由 theend 于 2009-5-18 10:17 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-12-2 16:47
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    发表于 2009-5-19 09:50:55 | 显示全部楼层
    早闻冷血书生的大名啊,还有繁体字啊,台湾的还 是香港的,好牛!
    爆破算不算完成啊!ppt大侠请指教!

    [ 本帖最后由 柯梦南 于 2009-5-20 15:58 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-5-20 00:46:44 | 显示全部楼层
    他和我是老乡,广州的/:017
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表