飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4426|回复: 11

[原创] 上次发错了,这个才是不明码比较的。高手飘过。

[复制链接]
  • TA的每日心情
    擦汗
    2019-5-7 09:43
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2009-3-2 12:58:16 | 显示全部楼层 |阅读模式
    上次发错了,这个才是不明码比较的。高手飘过。

    chap203.rar

    3.27 KB, 下载次数: 14, 下载积分: 飘云币 -2 枚

    售价: 1 枚飘云币  [记录]

    评分

    参与人数 1威望 +40 飘云币 +40 收起 理由
    Luckly + 40 + 40 鼓励奖!~

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-3 18:02:49 | 显示全部楼层
    怎么好像在破解区有这个呢?~
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2019-5-7 09:43
  • 签到天数: 28 天

    [LV.4]偶尔看看III

     楼主| 发表于 2009-3-3 21:49:14 | 显示全部楼层
    有人能破吗?没人能破我就贴出答案来
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-3 22:21:56 | 显示全部楼层
    这个IDA 真是太棒了... 和看vc一模一样//

    signed int __stdcall DialogFunc(HWND a1, UINT a2, WPARAM a3, LPARAM a4)
    {
      UINT ST14_4_0; // ST14_4@0
      signed int result; // eax@2
      int v6; // eax@9
      LRESULT v7; // eax@11
      int v8; // esi@11
      signed int v9; // ecx@13
      signed int v10; // eax@14
      signed int v11; // esi@15

      if ( a2 == 273 )
      {
        if ( a3 == 1 )
        {
          v6 = SendDlgItemMessageA(a1, 3, 0xEu, 0, 0);
          dword_4021AF = v6;
          if ( !v6 || v6 > 8 || (v8 = v6, v7 = SendDlgItemMessageA(a1, 4, 0xEu, 0, 0), !v7) || v8 != v7 )
            goto LABEL_26;
          SendDlgItemMessageA(a1, 3, 0xDu, 8u, (LPARAM)byte_402160);
          SendDlgItemMessageA(a1, 4, 0xDu, 0x10u, (LPARAM)&unk_402179);
          v9 = -1;
          while ( 1 )
          {
            ++v9;
            v10 = byte_402160[v9];
            if ( !v10 )
              break;
            v11 = -1;
            if ( v10 < 65 || (unsigned int)v10 > 0x7A )
              goto LABEL_26;
            if ( v10 >= 90 )
              v10 -= 32;
            do
              ++v11;
            while ( v10 != byte_402017[v11] );
            *(int *)((char *)&dword_402194 + v9) = byte_40203C[v11];
          }
          if ( sub_401244(&unk_402179, &dword_402194, dword_4021AF) == 1 )
          {
            MessageBoxA(
              0,
              "Congratulations! Please send your keygen (working one) to duelist@beer.com!",
              "Duelist's Crackme #4",
              0x2000u);
            result = 1;
          }
          else
          {
    LABEL_26:
            MessageBoxA(
              0,
              "Your registration info is invalid... Note that most of the special chars may raise registration problems!",
              "Duelist's Crackme #4",
              0x2000u);
            result = 0;
          }
        }
        else
        {
          if ( a3 == 2 )
            goto LABEL_25;
          result = 0;
        }
      }
      else
      {
        if ( a2 != 272 )
        {
          if ( a2 != 16 )
            return 0;
    LABEL_25:
          ExitProcess(ST14_4_0);
        }
        result = 1;
      }
      return result;
    }
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-3 22:24:37 | 显示全部楼层
    分析有奖励... 大家加油哦.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-4 11:10:31 | 显示全部楼层
    这样算明码了吧!/:014

    [ 本帖最后由 xingyue 于 2009-3-4 11:13 编辑 ]
    QQ截图未命名.gif
    QQ截图未命名.gif

    评分

    参与人数 1飘云币 +40 收起 理由
    Luckly + 40 有图...好看...

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-4 13:51:08 | 显示全部楼层
    算法分析:
    1.用户名只能是字母或数字
    2.如果是小写字母,先转换成大写字母
    3.先在00402017处开始查找第一个字母并计数,查到的话到0040203C开始处取得相应位置上的密码。
       然后循环处理用户名就可以。
    加密字典(原): A1LSK2DJF4HGP3QWO5EIR6UTYZ8MXN7CBV9
    加密字典(密): SU7CSJKF09NCSDO9SDF09SDRLVK7809S4NF
    算法应该是最简单的凯撒算法(好像叫这个)

    破解过程:
    1.出错对话框,暂停,找到相应的抛messagebox的地方。
    2.试了几次发现下面好像消息分发处理,下条件断点,分别为dword ptr[ebp+c]==111和dword ptr[ebp+c]==110,也没去细查啥意思,:(

    1. 004010F2   . /EB 25         jmp     short chap203.00401119
    2. 004010F4 > > |817D 0C 11010>cmp     dword ptr [ebp+C], 111
    3. 004010FB   . |0F84 FA000000 je      chap203.004011FB
    4. 00401101   . |817D 0C 10010>cmp     dword ptr [ebp+C], 110
    5. 00401108 > . |74 16         je      short chap203.00401120
    6. 0040110A   . |837D 0C 10    cmp     dword ptr [ebp+C], 10
    7. 0040110E   . |0F84 F7000000 je      chap203.0040120B
    8. 00401114   . |B8 00000000   mov     eax, 0
    9. 00401119   > \5F            pop     edi
    复制代码
    3.点击按纽,断下,单步,中间会利用SendDlgItemMessageA方法, WM_GETTEXTLENGTH消息获取用户名和密码的长度,不=的话则报错。
      相=的时候,再利用WM_GETTEXT获取用户名和密码,然后对用户名作上面的加密处理得到真密码,然后和用户输入的密码进行比较,然后显示
      成功或失败对话框。
    chap203_crack.gif

    [ 本帖最后由 tavor 于 2009-3-4 14:00 编辑 ]

    评分

    参与人数 1飘云币 +40 收起 理由
    Luckly + 40 不错.

    查看全部评分

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-4 14:35:42 | 显示全部楼层
    原帖由 Luckly 于 2009-3-3 22:21 发表
    这个IDA 真是太棒了... 和看vc一模一样//

    signed int __stdcall DialogFunc(HWND a1, UINT a2, WPARAM a3, LPARAM a4)
    {
      UINT ST14_4_0; // ST14_4@0
      signed int result; // eax@2
      int v6; // eax@9
      ...

    版主教一下咋设的IDA呀,这效果真棒呀,可我刚装了一下,没有你的这种效果呀。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-4 15:15:05 | 显示全部楼层
    上几楼主的好厉害呀,学习中
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-3-4 19:02:08 | 显示全部楼层
    /:012 /:012 /:012
        既然标签已经修改回来,只能说给楼主提个醒,慎用原创标签!/:014

    [ 本帖最后由 hflywolf 于 2009-3-4 19:25 编辑 ]
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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