过年了,下棋吧:美卡休闲五子棋 3.2.0
http://www.onlinedown.net/soft/50993.htm美卡休闲五子棋 3.2.0
界面还算是有趣的五子棋游戏,软件也不大,建议下载试玩!只是我很容易就击败它了。算了,既然分析了就贴出来吧,也有好几个月没有Guan shui 了。
by wofan
MachineID:789110647
regcode:374764717
Microsoft Visual Basic 5.0 / 6.0
它有MsgBox提示。
于是用MsgBox下断,然后找到关键点重新下断:
……
00465121 C745 CC 0800000>MOV DWORD PTR SS:,8 ; rctIsNumeric:检查注册码是否是数字
00465128 FF15 C4104000 CALL NEAR DWORD PTR DS:[<&MSVBVM60.#561>>; MSVBVM60.rtcIsNumeric
0046512E 66:8BF8 MOV DI,AX
……
====================================
……
00465325 51 PUSH ECX ; vbaR8Str:将数值型字串转为数值
00465326 FF15 40114000 CALL NEAR DWORD PTR DS:[<&MSVBVM60.__vba>; MSVBVM60.__vbaR8Str
0046532C DB05 58704600 FILD DWORD PTR DS: ; 从内存装入整数,推入隐含的ST中:0x165674AD ,这是本机真注册码
00465332 DD9D E0FEFFFF FSTP QWORD PTR SS: ; 存实数上托栈:把TOP寄存器ST存储到存储单元,然后上托堆栈
00465338 DC9D E0FEFFFF FCOMP QWORD PTR SS: ; 浮点数比较函数
0046533E DFE0 FSTSW AX ; 把状态字存入AX中
00465340 F6C4 40 TEST AH,40 ; 测试
00465343 74 07 JE SHORT 美卡休闲.0046534C ; 跳过去就玩完
00465345 BF 01000000 MOV EDI,1 ; 置注册成功的标志
0046534A EB 02 JMP SHORT 美卡休闲.0046534E
0046534C 33FF XOR EDI,EDI ; 清掉标志
0046534E 8D4D E8 LEA ECX,DWORD PTR SS: ; 以下就释放对象了....
……
====================================
那么这个存储单元的值是如何得来的呢?
重新载入程序,
d 00467058 显示出它的值0000000,然后对着它下内存写入断点,现在就盯着它看:按几次F9过后,在这里:
……
00456114 83C4 0C ADD ESP,0C ; 在下面下断,看它如何运算,这里出现盘符C:,一定是取C盘序列号了。
00456117 BA 440A4500 MOV EDX,美卡休闲.00450A44 ; UNICODE "c:\"
0045611C 66:8948 36 MOV WORD PTR DS:,CX
00456120 66:8948 38 MOV WORD PTR DS:,CX
00456124 8D4D D4 LEA ECX,DWORD PTR SS:
00456127 FFD3 CALL NEAR EBX
00456129 8D55 D4 LEA EDX,DWORD PTR SS:
0045612C 52 PUSH EDX
0045612D E8 0EEA0000 CALL 美卡休闲.00464B40
00456132 8BC8 MOV ECX,EAX ; 取绝对值
00456134 FF15 74104000 CALL NEAR DWORD PTR DS:[<&MSVBVM60.__vba>; MSVBVM60.__vbaI4Abs
0045613A 99 CDQ ; 双字变四字,将EAX中符号位扩展到EDX中
0045613B 2BC2 SUB EAX,EDX ; 低32位减去高32位,即减去符号位,这里得到0x2F08DF77(注明:它的十进制就是机器码)
0045613D 8D4D D4 LEA ECX,DWORD PTR SS:
00456140 D1F8 SAR EAX,1 ; 右移一次,得到:0x17846FBB
00456142 2D 0EFB2D01 SUB EAX,12DFB0E ; 减去一固定数:0x12DFB0E,得到0x165674AD
00456147 0F80 45150000 JO 美卡休闲.00457692
0045614D A3 58704600 MOV DWORD PTR DS:,EAX ; 将EAX中的值写入内存:
……
====================================
总结:
无非是取C盘序列号,右移一次,然后减去一个常数0x12DFB0E
结果的十进制形式就是注册码。
噢,忘记说了,该软件会检测调试器。
22:57 2007-1-22
这么简单,权当作作业好了。
[ 本帖最后由 wofan 于 2007-1-22 23:37 编辑 ] 注册这么简单,而且又很快战胜它了。它也就从我的电脑里消失了。感觉是个索然无味的晚上。
[ 本帖最后由 wofan 于 2007-1-22 23:37 编辑 ] 谢谢楼主!我是菜鸟!这个软件我搞了好久都没有希望!终于有大侠的教程!
可以练手啦! 今天是立春诶~~
刚发现~~~
冬天过去咯!!!! 积分攒了不少,人还是菜鸟一个。
页:
[1]