本软件进行了一个简单的加壳,用脱壳工具脱之。
下函数断点
bp MessageBoxA
0040362E /75 54 jnz short Unpack_.00403684 //改jmp即可跳过“注册成功!”
00403630 |8B8424 8C000000 mov eax,dword ptr ss:[esp+8C]
00403637 51 push ecx
00403638 83C0 F0 add eax,-10
0040363B 896424 18 mov dword ptr ss:[esp+18],esp
0040363F 8BFC mov edi,esp
00403641 50 push eax
00403642 E8 69DDFFFF call Unpack_.004013B0
00403647 83C0 10 add eax,10
0040364A 83C4 04 add esp,4
0040364D 8907 mov dword ptr ds:[edi],eax
0040364F E8 ECECFFFF call Unpack_.00402340 //F7跟进去!开始算法!
00403654 83C4 04 add esp,4
算法主要部分******************************************************************************
004024B6 0FAFC0 imul eax,eax ; 取位机器码*取位机器码
004024B9 8BCE mov ecx,esi ; 上次取的机器码给ESI
004024BB 0FAFCE imul ecx,esi ; 上取机器*上取机器码
004024BE 03C1 add eax,ecx ; 结果相加
004024C0 99 cdq ; EDX清零
004024C1 B9 1A000000 mov ecx,1A
004024C6 F7F9 idiv ecx ; EAX除以ECX,商放在EAX,余数在EDX
004024C8 8B4424 34 mov eax,dword ptr ss:[esp+34]
004024CC 8B40 F4 mov eax,dword ptr ds:[eax-C]
004024CF 8D48 FF lea ecx,dword ptr ds:[eax-1]
004024D2 83C4 20 add esp,20
004024D5 83C2 41 add edx,41 ; 余数+41
004024D8 3BE9 cmp ebp,ecx ; 注册码是否是第11位
004024DA 8ADA mov bl,dl
004024DC 75 12 jnz short Unpack.004024F0
004024DE 0FBECA movsx ecx,dl
004024E1 41 inc ecx ; 结果+1
004024E2 83F9 5A cmp ecx,5A ; 比较否则大于Z
004024E5 7F 09 jg short Unpack.004024F0
004024E7 83F9 41 cmp ecx,41 ; 是否小于A
004024EA 0F8D 96000000 jge Unpack.00402586
004024F0 8D48 FE lea ecx,dword ptr ds:[eax-2]
004024F3 3BE9 cmp ebp,ecx ; 是否是第10位
004024F5 75 15 jnz short Unpack.0040250C
004024F7 0FBECA movsx ecx,dl
004024FA 83C1 09 add ecx,9
004024FD 83F9 5A cmp ecx,5A ; 比较否则大于Z
00402500 7F 0A jg short Unpack.0040250C
00402502 83F9 41 cmp ecx,41 ; 是否小于A
00402505 7C 05 jl short Unpack.0040250C
00402507 80C2 09 add dl,9 ; DL+9
0040250A EB 7C jmp short Unpack.00402588
0040250C 8D48 FD lea ecx,dword ptr ds:[eax-3]
0040250F 3BE9 cmp ebp,ecx ; 是否是第9位
00402511 75 15 jnz short Unpack.00402528
00402513 0FBECA movsx ecx,dl
00402516 83C1 08 add ecx,8
00402519 83F9 5A cmp ecx,5A ; 比较否则大于Z
0040251C 7F 0A jg short Unpack.00402528
0040251E 83F9 41 cmp ecx,41 ; 是否小于A
00402521 7C 05 jl short Unpack.00402528
00402523 80C2 08 add dl,8 ;DL+8
00402526 EB 60 jmp short Unpack.00402588
00402528 8D48 FC lea ecx,dword ptr ds:[eax-4]
0040252B 3BE9 cmp ebp,ecx ; 算注册码到8位时
0040252D 75 15 jnz short Unpack.00402544
0040252F 0FBECA movsx ecx,dl
00402532 83C1 05 add ecx,5
00402535 83F9 5A cmp ecx,5A ; 比较否则大于Z
00402538 7F 0A jg short Unpack.00402544
0040253A 83F9 41 cmp ecx,41 ; 是否小于A
0040253D 7C 05 jl short Unpack.00402544
0040253F 80C2 05 add dl,5 ; DL+5
00402542 EB 44 jmp short Unpack.00402588
00402544 8D48 FB lea ecx,dword ptr ds:[eax-5]
00402547 3BE9 cmp ebp,ecx ; 算注册码到7位时
00402549 75 0A jnz short Unpack.00402555
0040254B 80FA 5A cmp dl,5A ; 比较否则大于Z
0040254E 7F 05 jg short Unpack.00402555
00402550 80FA 41 cmp dl,41 ; 是否小于A
00402553 7D 35 jge short Unpack.0040258A
00402555 8D48 FA lea ecx,dword ptr ds:[eax-6]
00402558 3BE9 cmp ebp,ecx ; 算注册码到第6位时
0040255A 75 15 jnz short Unpack.00402571
0040255C 0FBECA movsx ecx,dl
0040255F 83C1 02 add ecx,2
00402562 83F9 5A cmp ecx,5A ; 比较否则大于Z
00402565 7F 0A jg short Unpack.00402571
00402567 83F9 41 cmp ecx,41 ; 是否小于A
0040256A 7C 05 jl short Unpack.00402571
0040256C 80C2 02 add dl,2 ; DL+2
0040256F EB 17 jmp short Unpack.00402588
00402571 83C0 F9 add eax,-7
00402574 3BE8 cmp ebp,eax
00402576 75 12 jnz short Unpack.0040258A ; 算法注册码第5位时
00402578 0FBEC2 movsx eax,dl ; DL给EAX
0040257B 40 inc eax ; EAX+1
0040257C 83F8 5A cmp eax,5A ; 比较否则大于Z
0040257F 7F 09 jg short Unpack.0040258A ; 过Z就跳
00402581 83F8 41 cmp eax,41 ; 看是不是大写A
00402584 7C 04 jl short Unpack.0040258A ; 是否小于A
00402586 FEC2 inc dl ; DL+1
00402588 8ADA mov bl,dl
**********
每位注册码=(对应位的机器码^2+下面的那位机器码^2)%0x1A+0x41
另外!!
如果机器码是11位的话,以下的都要额外加个数
第5位+1 //6
第6位+2 //5
第8位+5 // 3
第9位+8 //2
第10位+9 //1
第11位+1 //0
如果机器码是10位的话
第4位+1 //6
第5位+2 //5
第7位+5 //3
第8位+8 //2
第9位+9 //1
第10位+1 //0
最后把ASII转换成大写字母!
35272415764
CFNNFLKPVNC
2601241610
IUZOGJSVZV
********************************************************************************************
004025FF 8B7424 38 mov esi,dword ptr ss:[esp+38] //EDI开始出现注册码
00402603 8BC7 mov eax,edi
00402605 8A10 mov dl,byte ptr ds:[eax] //EAX开始出现注册码
00402700 FF52 04 call dword ptr ds:[edx+4] //EDI的注册码一直都在
新手的破解分析 请大家见谅
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!