最近研究了ClockMan 95,在此提供心得供大家参考! 由於该程式是Beta版(可能是,但由程式看不出来), 因此,所谓的序号仍会有日期适用的限制,以往在 网路上取得之序号,在今年则会有过期的问题,也就是 只能使用至1997年,1998年以後则失效,我想试过的 人应该知道.(不过,应有正式版吧!) (1)首先将序号摘要如下: < 这一组只能使用至1997年 > Serial number : 1203009890 Name : KYMCO #Users : 1 License number : 094663 < 这一组只能使用至1998年 > Serial number : 1203009990 Name : KYMCO #Users : 1 License number : 671159 < 这一组只能使用至1999年 > Serial number : 1203029990 Name : KYMCO #Users : 1 License number : 683671 < 2000年以後,需修改程式码 > (但序号需对) find : 66397DE07208750866395DE2 replace : ------------EB06-------- (2)原理 Serial number是由10位数字组成,程式的设定是 ex. 1234567890 a. 第一位必须为1 b. 第二位随便 c. 第叁,四位必须为03 d. 第五,六位若大於2,则可再延用一年 e. 第七,八位则构成使用年限,如19xx年 f. 第九,十位则随便 License number则是由Serial number与Name计算取得 (3)程式追踪(debug)如下 =========== ClockMan 95 V1.0.058 ============= *用bpx hmemcpy,可顺利拦截 . . . 0137:0040F350 OR [EAX*2+ESP+00],AL 0137:0040F354 PUSH 00007D31 0137:0040F359 PUSH ESI 0137:0040F35A CALL [00449AB4] 0137:0040F360 PUSH 20 ;按F12约10次,返回至此 0137:0040F362 PUSH EBX 0137:0040F363 PUSH 00007D30 0137:0040F368 PUSH ESI 0137:0040F369 CALL [00449AB4] 0137:0040F36F PUSH 00 0137:0040F371 PUSH 00 0137:0040F373 PUSH 00007D3E 0137:0040F378 PUSH ESI 0137:0040F379 CALL [004499B0] 0137:0040F37F PUSH 07 0137:0040F381 MOV [EBP-04],EAX 0137:0040F384 LEA EAX,[EBP-0C] 0137:0040F387 PUSH EAX 0137:0040F388 PUSH 00007D32 0137:0040F38D PUSH ESI 0137:0040F38E CALL [00449AB4] 0137:0040F394 PUSH 03 0137:0040F396 LEA ECX,[EBP-0C] 0137:0040F399 PUSH 2F 0137:0040F39B PUSH 06 0137:0040F39D PUSH ECX 0137:0040F39E PUSH DWORD PTR [EBP-04] 0137:0040F3A1 PUSH EBX 0137:0040F3A2 PUSH 0A 0137:0040F3A4 PUSH EDI 0137:0040F3A5 CALL 00426ACB ;序号比对(追进去) 0137:0040F3AA INC DWORD PTR [00444460] 0137:0040F3B0 TEST EAX,EAX 0137:0040F3B2 JNZ 0040F3C2 0137:0040F3B4 CMP DWORD PTR [00444460],0F ;有15次输入失败的机会 0137:0040F3BB JLE 0040F3C2 0137:0040F3BD MOV EAX,000001F7 0137:0040F3C2 CMP EAX,000001F4 0137:0040F3C7 JZ 0040F52B ;GO则出现序号错误视窗 0137:0040F3CD CMP EAX,000001F7 0137:0040F3D2 JZ 0040F54C ;GO则出现序号错误视窗 0137:0040F3D8 CMP EAX,000001F8 0137:0040F3DD JZ 0040F56D ;GO则出现适用过期视窗 0137:0040F3E3 MOV EDI,00444448 0137:0040F3E8 MOV ESI,00445458 0137:0040F3ED MOV WORD PTR [00445AF8],0001 0137:0040F3F6 PUSH EDI 0137:0040F3F7 PUSH ESI 0137:0040F3F8 MOV EBX,00444408 0137:0040F3FD CALL 0042DF00 . . (出现注册成功视窗) . . . 0137:00426ACB PUSH EBP <------- 副程式追进去至此 0137:00426ACC MOV EBP,ESP 0137:00426ACE SUB ESP,40 0137:00426AD1 PUSH EBX 0137:00426AD2 PUSH ESI 0137:00426AD3 PUSH EDI 0137:00426AD4 MOV ESI,[EBP+08] 0137:00426AD7 PUSH ESI 0137:00426AD8 CALL 0042E030 0137:00426ADD MOVZX ECX,WORD PTR [EBP+0C] 0137:00426AE1 ADD ESP,04 0137:00426AE4 CMP EAX,ECX ;比对S/N是否为10位 0137:00426AE6 JZ 00426AF2 0137:00426AE8 MOV EAX,000001F4 0137:00426AED JMP 00426C14 0137:00426AF2 PUSH DWORD PTR [EBP+18] 0137:00426AF5 MOVZX EDI,WORD PTR [EBP+1C] 0137:00426AF9 CALL 0042E030 0137:00426AFE ADD ESP,04 0137:00426B01 CMP EAX,EDI ;比对L/N是否为6位 0137:00426B03 JZ 00426B0F 0137:00426B05 MOV EAX,000001F7 0137:00426B0A JMP 00426C14 0137:00426B0F PUSH EDI 0137:00426B10 LEA EAX,[EBP-40] 0137:00426B13 MOVZX ECX,WORD PTR [EBP+20] 0137:00426B17 PUSH EAX 0137:00426B18 PUSH ECX 0137:00426B19 PUSH DWORD PTR [EBP+14] 0137:00426B1C PUSH DWORD PTR [EBP+10] 0137:00426B1F PUSH ESI 0137:00426B20 CALL 00426CFC ;计算L/N 0137:00426B25 LEA ECX,[EBP-40] ;将计算结果存於ECX 0137:00426B28 PUSH ECX 0137:00426B29 PUSH DWORD PTR [EBP+18] 0137:00426B2C CALL 0042E970 ;比对L/N是否正确 0137:00426B31 ADD ESP,08 0137:00426B34 TEST EAX,EAX 0137:00426B36 JZ 00426B42 0137:00426B38 MOV EAX,000001F7 0137:00426B3D JMP 00426C14 0137:00426B42 PUSH 08 0137:00426B44 LEA EAX,[EBP-10] 0137:00426B47 PUSH 00 0137:00426B49 PUSH EAX 0137:00426B4A CALL 0042DA80 0137:00426B4F ADD ESP,0C 0137:00426B52 LEA EAX,[ESI+02] 0137:00426B55 LEA ECX,[EBP-10] 0137:00426B58 PUSH 02 0137:00426B5A PUSH EAX 0137:00426B5B PUSH ECX 0137:00426B5C CALL 0042DC50 0137:00426B61 ADD ESP,0C 0137:00426B64 LEA ECX,[EBP-10] ;取S/N的第叁,四位 0137:00426B67 PUSH ECX 0137:00426B68 CALL 0042F5D0 ;做16进位转换,存於EAX 0137:00426B6D MOVZX ECX,WORD PTR [EBP+24] 0137:00426B71 ADD ESP,04 0137:00426B74 CMP EAX,ECX ;比对是否为3 <-[EBP+24] 0137:00426B76 JZ 00426B82 0137:00426B78 MOV EAX,000001F4 0137:00426B7D JMP 00426C14 0137:00426B82 CMP BYTE PTR [ESI],31 ;比对S/N之第一位是否为1 0137:00426B85 JZ 00426B8E 0137:00426B87 XOR EAX,EAX 0137:00426B89 JMP 00426C14 0137:00426B8E PUSH 04 0137:00426B90 LEA EAX,[EBP-08] 0137:00426B93 PUSH 00 0137:00426B95 PUSH EAX 0137:00426B96 CALL 0042DA80 0137:00426B9B ADD ESP,0C 0137:00426B9E LEA EAX,[ESI+06] 0137:00426BA1 LEA ECX,[EBP-08] 0137:00426BA4 PUSH 02 0137:00426BA6 PUSH EAX 0137:00426BA7 PUSH ECX 0137:00426BA8 CALL 0042DC50 0137:00426BAD ADD ESP,0C 0137:00426BB0 LEA ECX,[EBP-08] 0137:00426BB3 PUSH ECX 0137:00426BB4 CALL 0042F5D0 0137:00426BB9 ADD ESP,04 0137:00426BBC LEA EDI,[EAX+0000076C] 0137:00426BC2 LEA ECX,[EBP-04] 0137:00426BC5 PUSH 04 0137:00426BC7 PUSH 00 0137:00426BC9 ADD ESI,04 0137:00426BCC PUSH ECX 0137:00426BCD CALL 0042DA80 0137:00426BD2 ADD ESP,0C 0137:00426BD5 LEA EAX,[EBP-04] 0137:00426BD8 PUSH 02 0137:00426BDA PUSH ESI 0137:00426BDB PUSH EAX 0137:00426BDC CALL 0042DC50 0137:00426BE1 ADD ESP,0C 0137:00426BE4 LEA EAX,[EBP-04] 0137:00426BE7 MOV ESI,000001F8 0137:00426BEC PUSH EAX 0137:00426BED CALL 0042F5D0 0137:00426BF2 MOV BX,AX 0137:00426BF5 ADD ESP,04 0137:00426BF8 LEA EAX,[EBP-20] 0137:00426BFB PUSH EAX 0137:00426BFC CALL [00449904] 0137:00426C02 CMP [EBP-20],DI ; 日期比对 [EBP-20]=07CE i.e. 1998 ; DI=19xx where xx是第7,8位 ; 前面有进行转换,自己看吧! 0137:00426C06 JB 00426C10 ;GO表示是在适用期内,OK! 0137:00426C08 JNZ 00426C12 ;GO表示已过期 0137:00426C0A CMP [EBP-1E],BX ;比较第5,6位是否大於2 <-[EBP-1E] 0137:00426C0E JA 00426C12 ;GO表示可再适用 0137:00426C10 XOR ESI,ESI ;否则就是过期 0137:00426C12 MOV EAX,ESI 0137:00426C14 POP EDI 0137:00426C15 POP ESI 0137:00426C16 POP EBX 0137:00426C17 MOV ESP,EBP 0137:00426C19 POP EBP 0137:00426C1A RET 0020 所以,若要过期仍能使用,就必须将 0137:00426C08 JNZ 00426C12 改为 0137:00426C08 JMP 00426C10 --------------- 以上简短摘录供大家参考 ----------------- 在此有个问题想请教诸位先进,最近有个程式Jet-midi,其与jet-audio 是属同一家公司的作品(大家应该有听过),但是有3分钟的拨放限制(未注册版), 由於功力有限无法解出注册档,只好用破的,也就是取消拨放限制,与警示视窗, 程式修改如下 find : 538BD833D2 replace : C3-------- 不过当初在破的时候,由於有叁分钟的拨放限制,因此都要等时间到才能拦截 所以浪费蛮多时间的,不知有无较佳的时间缩短方式.........THANKS A LOT 另外,有关DONGLE (KEYPRO)的破解不知有哪位先进有经验,我有个程式就是 用这种方式做保护,同时将一些JMP点写入於KEY中(我猜的),我曾从LEOWORLD 的网站D/L一篇破解教学有提到这方面的保护,但能力有限,请大家指点指点...