窗雨树雪 发表于 2018-1-7 12:37

希望大神破解后能给个思路

非原创,从网上发现的一个CrackMe,新手尝试破解后失败,在论坛里搜了一圈也没搜到此CM的相关文章,望大神成功破解后给个小小的思路。
不要爆破,谢谢~

zbnysjwsnd8 发表于 2018-1-7 17:11

1143580011

byh3025 发表于 2018-1-8 11:41

小白功力太浅,不懂算法,这样子是成功吗?

ZiPP 发表于 2018-1-7 15:22

我不太会汇编语言,所以只会爆破。

重点在 004012D7 ~ 004012E7
当 eax = 1 = 注册成功
若 eax = 0 = 注册失败

既草日月又日天 发表于 2018-1-7 16:00

可惜 我不会看个热闹

窗雨树雪 发表于 2018-1-7 16:30

ZiPP 发表于 2018-1-7 15:22
我不太会汇编语言,所以只会爆破。

重点在 004012D7 ~ 004012E7


都说了不要爆破了啊。。。。

内心xi 发表于 2018-1-7 17:04

c++写的吗

窗雨树雪 发表于 2018-1-7 18:22

zbnysjwsnd8 发表于 2018-1-7 17:11
1143580011

能给点提示吗~~~

窗雨树雪 发表于 2018-1-7 18:23

15233380916 发表于 2018-1-7 17:04
c++写的吗

exeinfo里查出来是Microsoft Visual C++ ver 5.0/6.0的

pk8900 发表于 2018-1-7 18:30

关键代码位置及断点:
00401050 | 81 7C 24 08 11 01 00 00   | cmp dword ptr ss:, 0x111            |
00401058 | 75 42                     | jne 破解我.40109C                                 |
0040105A | 66 81 7C 24 0C EA 03      | cmp word ptr ss:, 0x3EA               |
00401061 | 75 39                     | jne 破解我.40109C                                 |
00401063 | E8 98 01 00 00            | call <破解我.sub_401200>                        | 关键call
00401068 | 83 F8 01                  | cmp eax, 0x1                                 |
0040106B | 6A 00                     | push 0x0                                       |
0040106D | 68 8C 50 40 00            | push 破解我.40508C                              | 40508C:"crackme"
00401072 | 75 16                     | jne 破解我.40108A                                 |
00401074 | A1 B8 56 40 00            | mov eax, dword ptr ds:               |
00401079 | 68 44 50 40 00            | push 破解我.405044                              | 405044:"Registration Successful!\nGood Job!\nPlease contact:xufeng0325@gmail.com"
IDA中反编译中显示,两层循环,算法得跟一会。
signed int sub_401200()
{
int v0; // ebx
unsigned int v1; // ebp
signed int v2; // esi
unsigned int v3; // edi
int v4; // eax
unsigned __int64 v5; // rax
bool v6; // zf
unsigned int v7; // esi
unsigned __int64 v8; // kr00_8
signed int result; // eax
char *v10; //
int v11; //
int v12; //
unsigned int v13; //
CHAR String; //

v0 = 0;
v1 = 0;
v13 = 0;
v2 = 1;
v3 = 0;
LOBYTE(v4) = GetDlgItemTextA(hDlg, 1000, &String, 20);
if ( !(_BYTE)v4 )
    goto LABEL_13;
v4 = (char)v4;
v12 = (char)v4;
if ( (char)v4 > 0 )
{
    v10 = (char *)&v13 + v4 + 3;
    do
    {
      if ( v0 > 0 )
      {
      v11 = v0;
      do
      {
          v5 = 10 * __PAIR__(v3, v2);
          v2 *= 10;
          v6 = v11 == 1;
          v3 = HIDWORD(v5);
          --v11;
      }
      while ( !v6 );
      }
      v8 = (*v10 - 48) * __PAIR__(v3, v2) + __PAIR__(v13, v1);
      v7 = v8 >> 32;
      v1 = v8;
      v3 = 0;
      ++v0;
      v13 = v7;
      v2 = 1;
      --v10;
    }
    while ( v0 < v12 );
}
if ( (v1 & 0xFF23301)
   + (unsigned __int64)((signed __int64)(3123612579u * __PAIR__(v13, v1)) / 0x800000000i64)
   + ~v1 * v1 == 0x86FFB5B8 )
    result = 1;
else
LABEL_13:
    result = 0;
return result;
}

wddtt 发表于 2018-1-7 19:15

看不懂帮不了
页: [1] 2
查看完整版本: 希望大神破解后能给个思路