能力值:
( LV2,RANK:10 )
|
-
-
2 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
二楼能帖上你的分析过程吗?
|
能力值:
( LV6,RANK:80 )
|
-
-
4 楼
小菜,爆破- =
|
能力值:
( LV6,RANK:80 )
|
-
-
5 楼
|
能力值:
( LV13,RANK:388 )
|
-
-
6 楼
00401926 . BE C0C04200 mov esi, 0042C0C0 ; ASCII "zouzhiyong-zouzhiyong" 0040192B . 8D4424 68 lea eax, dword ptr [esp+68] 0040192F > 8A10 mov dl, byte ptr [eax] 00401931 . 8A1E mov bl, byte ptr [esi] 00401933 . 8ACA mov cl, dl 00401935 . 3AD3 cmp dl, bl 00401937 . 75 1E jnz short 00401957 00401939 . 84C9 test cl, cl 0040193B . 74 16 je short 00401953 0040193D . 8A50 01 mov dl, byte ptr [eax+1] 00401940 . 8A5E 01 mov bl, byte ptr [esi+1] 00401943 . 8ACA mov cl, dl 00401945 . 3AD3 cmp dl, bl 00401947 . 75 0E jnz short 00401957 00401949 . 83C0 02 add eax, 2 0040194C . 83C6 02 add esi, 2 0040194F . 84C9 test cl, cl 00401951 .^ 75 DC jnz short 0040192F 00401953 > 33C0 xor eax, eax 00401955 . EB 05 jmp short 0040195C 00401957 > 1BC0 sbb eax, eax 00401959 . 83D8 FF sbb eax, -1 0040195C > 85C0 test eax, eax 0040195E 74 07 je short 00401967 ; 关键跳 00401960 . 68 D8C04200 push 0042C0D8 00401965 . EB 05 jmp short 0040196C 00401967 > 68 3CC14200 push 0042C13C 0040196C > 68 EC030000 push 3EC 00401971 . 8BCF mov ecx, edi 00401973 . E8 08900100 call 0041A980 ; SetDlgItemText
esi常量字符串,eax栈里的一个返回地址
这两个怎么可能相等?
不知道是不是我太菜
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
回复楼上的,你所找到的并不是算法的关键,请从注册失败那里开始分析
|
能力值:
( LV13,RANK:388 )
|
-
-
8 楼
还是算了吧,易语言真是受不了
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
楼上搞错了,这是mfc写的
|
能力值:
( LV13,RANK:388 )
|
-
-
10 楼
mfc不都是按序号导入的么
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
你理解错了,下面的指令 esi保存的是指向“zouzhiyong-zouzhiyong”的指针,而不是字符串,
mov dl, byte ptr [eax]和 mov bl, byte ptr [esi]是取出指向的地址空间的数值的第一位
00401926 . BE C0C04200 mov esi, 0042C0C0 ; ASCII "zouzhiyong-zouzhiyong"
0040192B . 8D4424 68 lea eax, dword ptr [esp+68]
0040192F > 8A10 mov dl, byte ptr [eax]
00401931 . 8A1E mov bl, byte ptr [esi]
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
楼上正解,但是用于比较的并不是真正的的注册码,跟入就知道了
|
能力值:
( LV13,RANK:388 )
|
-
-
13 楼
见楼下xxxxxx
|
能力值:
( LV13,RANK:388 )
|
-
-
14 楼
name随便填
serial为29个@,即@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
思路很乱,lz应该在理一理
显示恭喜,已经注册了
但相应鼠标移动消息时,还会有一个验证
这里就是我说的那个地方了,会和一个返回地址比较
是bug吧
00401926 . BE C0C04200 mov esi, 0042C0C0 ; ASCII "zouzhiyong-zouzhiyong"
0040192B . 8D4424 68 lea eax, dword ptr [esp+68]
0040192F > 8A10 mov dl, byte ptr [eax]
00401931 . 8A1E mov bl, byte ptr [esi]
00401933 . 8ACA mov cl, dl
00401935 . 3AD3 cmp dl, bl
00401937 . 75 1E jnz short 00401957
00401939 . 84C9 test cl, cl
0040193B . 74 16 je short 00401953
0040193D . 8A50 01 mov dl, byte ptr [eax+1]
00401940 . 8A5E 01 mov bl, byte ptr [esi+1]
00401943 . 8ACA mov cl, dl
00401945 . 3AD3 cmp dl, bl
00401947 . 75 0E jnz short 00401957
00401949 . 83C0 02 add eax, 2
0040194C . 83C6 02 add esi, 2
0040194F . 84C9 test cl, cl
00401951 .^ 75 DC jnz short 0040192F
eax这时候的值是12FB2C
看堆栈
0012FB2C 77D3E577 返回到 USER32.DefDlgProcA
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
爆破要简单些,逆向算法有点复杂,Name好像要大于8个字符,校验的时候Name没用
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
来学习了,呵呵
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
回复上两楼的,感谢你对本CrackMe的测试并指出错误,
~~~~~~~~~~
本来想重写,但是没有太多时间,就修改了原来的
|
能力值:
( LV13,RANK:388 )
|
-
-
18 楼
name,17个冒号
:::::::::::::::::
serial,17个@
@@@@@@@@@@@@@@@@@
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
哈!
楼上得到的是最简单的一个组合了~~~~~~~
|
能力值:
( LV13,RANK:388 )
|
-
-
20 楼
这个cm的思路比较乱,你应该先给出你的几组可用的
或者你应该保证有一个通用的,构造的name或serial的注册算法
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
恩,多谢赐教,下次改进
|
能力值:
( LV6,RANK:80 )
|
-
-
22 楼
楼主源码可否发下?让我等小菜观摩下。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
从简单的开始学习 先爆破
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
算法已经贴上
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
int __thiscall sub_4016B0(void *this, const char *a2, char *a3)
{
int v3; // ebp@1
const char *v4; // edi@2
unsigned int v5; // ecx@4
signed int i; // esi@4
int v7; // eax@5
int v8; // eax@6
int v10; // [sp+10h] [bp-10h]@1
v3 = (int)this;
v10 = (int)this;
if ( strlen(a2) - 1 >= strlen(a3) - 1 )
{
strcpy(a3, a2);
v4 = a2;
}
else
{
strcpy((char *)a2, a3);
v4 = a3;
}
v5 = strlen(v4) - 1;
for ( i = 0; i < (signed int)v5; ++i )
{
v7 = a3[i];
if ( (signed int)v5 <= 10 )
v8 = (v5 + v7) ^ 3;
else
v8 = v7 + v5 - 10;
if ( ((*(&a3[i] + a2 - a3) - 48) ^ 4) + 1 + *(&a3[i] + a2 - a3) == v8 + 2 || i >= 21 || i == 11 )
{
v3 = v10;
}
else
{
v3 = v10;
*(_BYTE *)(v10 + 92 + i) ^= *(_BYTE *)(v10 + 93 + i);
}
}
if ( !strcmp((const char *)(v3 + 92), "zouzhiyong-zouzhiyong") )
sub_41A980(1000, "恭喜!已经注册了 ^_^");
if ( sub_416FD1(0x5Cu) )
sub_401870(0);
sub_4171BD((LPCSTR)0x81, v3);
return sub_41AB17(5);
}
|
|
|