-
-
[原创]看雪 2016CrackMe 攻防大赛--第23题
-
发表于: 2016-12-16 23:34 2598
-
此题XP下无法求解!!!!!!!!!!!
也没啥心情写破文了。
004018B9 |. E8 82F8FFFF CALL CrackMe_.00401140
获取注册码,然后获取每一个字符的字模数据写入:
0040122F . 881437 MOV BYTE PTR DS:[EDI+ESI], DL
数组大小0x70
00401255 . E8 46FEFFFF CALL CrackMe_.004010A0
此函数根据上述的字模数组求取对应下标。
字模保存在dword_4121C0总共6944个字节,每个字模占用0x70字节
6944/0x70=64
004018C7 |. 8D4C24 28 LEA ECX, DWORD PTR SS:[ESP+0x28]
004018CB |. E8 E0FEFFFF CALL CrackMe_.004017B0
这这里下断下,通过观察可知
这64个字符为0-9a-zA-Z,0对应下标0.
通过函数004017B0可知道后14字节对应下标:
2C 1C 36 0E 1B 12 0A 15 31 1E 16 0B 0E 1B
对应字符IsSerialNumber
前4字节直接爆破
最后显示出来的值:
0a04dc95
1c12111d
97addbc1
9fd73c07
a8f07e05
efe905e7
f7481128
由于每个字节只能在0-63直接取值,因此1c12111d应该是正确的。
序列号:thisIsSerialNumber
也没啥心情写破文了。
004018B9 |. E8 82F8FFFF CALL CrackMe_.00401140
获取注册码,然后获取每一个字符的字模数据写入:
0040122F . 881437 MOV BYTE PTR DS:[EDI+ESI], DL
数组大小0x70
00401255 . E8 46FEFFFF CALL CrackMe_.004010A0
此函数根据上述的字模数组求取对应下标。
字模保存在dword_4121C0总共6944个字节,每个字模占用0x70字节
6944/0x70=64
004018C7 |. 8D4C24 28 LEA ECX, DWORD PTR SS:[ESP+0x28]
004018CB |. E8 E0FEFFFF CALL CrackMe_.004017B0
这这里下断下,通过观察可知
这64个字符为0-9a-zA-Z,0对应下标0.
通过函数004017B0可知道后14字节对应下标:
2C 1C 36 0E 1B 12 0A 15 31 1E 16 0B 0E 1B
对应字符IsSerialNumber
前4字节直接爆破
BYTE g_data[6944] = { 0xD5, 0x88, 0x18, 0x28, 0x26,。。。。。} DWORD* dword_4121C0=(DWORD*)g_data; DWORD sub_4017B0(char *pint) { int vRet; __asm{ mov ecx,pint mov esi, ecx mov al, [esi] movzx edx, byte ptr[esi + 1] not al movzx ecx, byte ptr[esi + 2] movzx eax, al; mov edi ,dword_4121C0 mov ebx, DWORD PTR DS:[eax*4+edi] xor ebx, 0FFFh movzx eax, bl xor edx, eax shr ebx, 8 xor ebx, DWORD PTR DS:[edx * 4+edi] movzx eax, bl xor ecx, eax shr ebx, 8 xor ebx, DWORD PTR DS:[ecx * 4+edi] movzx ecx, byte ptr[esi + 3] movzx eax, bl xor ecx, eax shr ebx, 8 xor ebx, DWORD PTR DS:[ecx * 4+edi] not ebx mov vRet,ebx } return vRet; } int _tmain(int argc, _TCHAR* argv[]) { for (DWORD i=0;i<0xffffffff;i++) { DWORD xx=sub_4017B0((char *)&i); //004018D0 |. 3D EFEE66A4 CMP EAX, 0xA466EEEF if (xx==0xA466EEEF) { printf("%08x\n",i); } } return 0; }
最后显示出来的值:
0a04dc95
1c12111d
97addbc1
9fd73c07
a8f07e05
efe905e7
f7481128
由于每个字节只能在0-63直接取值,因此1c12111d应该是正确的。
序列号:thisIsSerialNumber
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: