希望大神破解后能给个思路
非原创,从网上发现的一个CrackMe,新手尝试破解后失败,在论坛里搜了一圈也没搜到此CM的相关文章,望大神成功破解后给个小小的思路。不要爆破,谢谢~ 1143580011 小白功力太浅,不懂算法,这样子是成功吗?
我不太会汇编语言,所以只会爆破。
重点在 004012D7 ~ 004012E7
当 eax = 1 = 注册成功
若 eax = 0 = 注册失败
可惜 我不会看个热闹 ZiPP 发表于 2018-1-7 15:22
我不太会汇编语言,所以只会爆破。
重点在 004012D7 ~ 004012E7
都说了不要爆破了啊。。。。 c++写的吗 zbnysjwsnd8 发表于 2018-1-7 17:11
1143580011
能给点提示吗~~~ 15233380916 发表于 2018-1-7 17:04
c++写的吗
exeinfo里查出来是Microsoft Visual C++ ver 5.0/6.0的 关键代码位置及断点:
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;
} 看不懂帮不了
页:
[1]
2