1)PEID检查,Microsoft Visual Basic 5.0 / 6.0。无壳
2)试运行程序,任意输入注册信息后有错误提示“重新来过吧”
3)OD载入程序,用OD的超级字符串查找功能找不到相应的内容。
只好在命令行下断。bp __vbaVarTstEq bp __vbaStrCmp都不能成功将程序中断。
只有用bp __vbaLenBstr才可以使程序中断。
4)用bp __vbaLenBstr下断后,任意输入注册信息。
程序中断在这里
6A2A49CE > 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
6A2A49D2 85C0 TEST EAX,EAX
6A2A49D4 74 05 JE SHORT MSVBVM60.6A2A49DB
6A2A49D6 8B40 FC MOV EAX,DWORD PTR DS:[EAX-4]
6A2A49D9 D1E8 SHR EAX,1
6A2A49DB C2 0400 RETN 4
ALT+F9返回程序领空:
来到这里。。。
00412EC8 . FF15 0C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLenBs>; 取注册名位数
00412ECE . 8BC8 MOV ECX,EAX
00412ED0 . FF15 54104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaI2I4>>;
00412ED6 . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38] ; EBP-38=注册名
00412ED9 . 8BD8 MOV EBX,EAX
00412EDB . FF15 BC104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;
00412EE1 . 8D4D B8 LEA ECX,DWORD PTR SS:[EBP-48]
00412EE4 . FF15 C0104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>;
00412EEA . 66:83FB 06 CMP BX,6 ; 注册名不得小于6位,小于则跳向结束
00412EEE . 0F8D 81000000 JGE CrackMe0.00412F75
00412EF4 . B9 0A000000 MOV ECX,0A
00412EF9 . B8 04000280 MOV EAX,80020004
00412EFE . 898D 78FFFFFF MOV DWORD PTR SS:[EBP-88],ECX
00412F04 . 894D 88 MOV DWORD PTR SS:[EBP-78],ECX
00412F07 . 894D 98 MOV DWORD PTR SS:[EBP-68],ECX
00412F0A . 8D95 68FFFFFF LEA EDX,DWORD PTR SS:[EBP-98]
00412F10 . 8D4D A8 LEA ECX,DWORD PTR SS:[EBP-58]
00412F13 . 8945 80 MOV DWORD PTR SS:[EBP-80],EAX
00412F16 . 8945 90 MOV DWORD PTR SS:[EBP-70],EAX
00412F19 . 8945 A0 MOV DWORD PTR SS:[EBP-60],EAX
00412F1C . C785 70FFFFFF>MOV DWORD PTR SS:[EBP-90],CrackMe0.00411>
00412F26 . C785 68FFFFFF>MOV DWORD PTR SS:[EBP-98],8
00412F30 . FF15 9C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarDu>;
00412F36 . 8D85 78FFFFFF LEA EAX,DWORD PTR SS:[EBP-88]
00412F3C . 8D4D 88 LEA ECX,DWORD PTR SS:[EBP-78]
00412F3F . 50 PUSH EAX
00412F40 . 8D55 98 LEA EDX,DWORD PTR SS:[EBP-68]
00412F43 . 51 PUSH ECX
00412F44 . 52 PUSH EDX
00412F45 . 8D45 A8 LEA EAX,DWORD PTR SS:[EBP-58]
00412F48 . 6A 00 PUSH 0
00412F4A . 50 PUSH EAX
00412F4B . FF15 30104000 CALL DWORD PTR DS:[<&MSVBVM60.#595>] ;
00412F51 . 8D8D 78FFFFFF LEA ECX,DWORD PTR SS:[EBP-88]
00412F57 . 8D55 88 LEA EDX,DWORD PTR SS:[EBP-78]
00412F5A . 51 PUSH ECX
00412F5B . 8D45 98 LEA EAX,DWORD PTR SS:[EBP-68]
00412F5E . 52 PUSH EDX
00412F5F . 8D4D A8 LEA ECX,DWORD PTR SS:[EBP-58]
00412F62 . 50 PUSH EAX
00412F63 . 51 PUSH ECX
00412F64 . 6A 04 PUSH 4
00412F66 . FF15 14104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>;
00412F6C . 83C4 14 ADD ESP,14
00412F6F . FF15 10104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaEnd>] ;
00412F75 > 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] 将小写字母转换相应的大写字母
00412F78 . BB 02000000 MOV EBX,2 ;
00412F7D . 53 PUSH EBX
00412F7E . 52 PUSH EDX
00412F7F . 895D B0 MOV DWORD PTR SS:[EBP-50],EBX
00412F82 . 895D A8 MOV DWORD PTR SS:[EBP-58],EBX
00412F85 . FF15 AC104000 CALL DWORD PTR DS:[<&MSVBVM60.#618>] ; 取注册名最右边的两位
00412F8B . 8BD0 MOV EDX,EAX
00412F8D . 8D4D C8 LEA ECX,DWORD PTR SS:[EBP-38]
00412F90 . FFD6 CALL ESI
00412F92 . 50 PUSH EAX
00412F93 . 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
00412F96 . 53 PUSH EBX
00412F97 . 50 PUSH EAX
00412F98 > . FF15 A0104000 CALL DWORD PTR DS:[<&MSVBVM60.#616>] ; 取注册名最左边的两位
00412F9E . 8BD0 MOV EDX,EAX
00412FA0 . 8D4D C4 LEA ECX,DWORD PTR SS:[EBP-3C]
00412FA3 . FFD6 CALL ESI
00412FA5 . 8B1D 20104000 MOV EBX,DWORD PTR DS:[<&MSVBVM60.__vbaSt>;
00412FAB . 50 PUSH EAX
00412FAC . FFD3 CALL EBX ; 最右边两位和最左边两位合并,设为A
00412FAE . 8BD0 MOV EDX,EAX
00412FB0 . 8D4D C0 LEA ECX,DWORD PTR SS:[EBP-40]
00412FB3 . FFD6 CALL ESI
00412FB5 . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
00412FB8 . 8D4D A8 LEA ECX,DWORD PTR SS:[EBP-58]
00412FBB . 50 PUSH EAX
00412FBC . 51 PUSH ECX
00412FBD . 6A 02 PUSH 2
00412FBF . 52 PUSH EDX
00412FC0 . FF15 44104000 CALL DWORD PTR DS:[<&MSVBVM60.#631>] ; 取注册名的第二和第三位,设为B
00412FC6 . 8BD0 MOV EDX,EAX
00412FC8 . 8D4D BC LEA ECX,DWORD PTR SS:[EBP-44]
00412FCB . FFD6 CALL ESI
00412FCD . 50 PUSH EAX
00412FCE . FFD3 CALL EBX
00412FD0 . 8BD0 MOV EDX,EAX ; A与B合并
00412FD2 . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]、
省略一些代码。。。。。。
0041305A . FF15 98104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCo>; 真假注册码比较
00413060 . 66:85C0 TEST AX,AX
00413063 . 0F85 08010000 JNZ CrackMe0.00413171 不相等就跳向结束
------------------------------------------------------------------------BY 逍遥风
算法总结:
1)注册名必须大于六位。
2)取注册名的最右边两位(设为甲)。最左边两位(设为乙)。第2和第3位(设为丙)。
3)将甲乙丙合并即为注册码。
例:19860805
取其最右边两位05。最左边两位19。第2和第3位98
所以 注册名:19860805
注册码:051998
********************************************注意***********************************************
如果注册名中有小写字母,则程序先将其先转换成相应的大写字母。
例:
注册名aabbccdd 对应的注册码是DDAAAb
有错误或疏漏的地方请大家指出
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!