wofan 发表于 2007-1-22 23:28:36

过年了,下棋吧:美卡休闲五子棋 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:31:15

注册这么简单,而且又很快战胜它了。它也就从我的电脑里消失了。感觉是个索然无味的晚上。

[ 本帖最后由 wofan 于 2007-1-22 23:37 编辑 ]

hangyubin 发表于 2007-2-3 15:58:01

谢谢楼主!我是菜鸟!这个软件我搞了好久都没有希望!终于有大侠的教程!
可以练手啦!

avel 发表于 2007-2-4 20:53:25

今天是立春诶~~

刚发现~~~

冬天过去咯!!!!

杜杜哎哟 发表于 2007-2-7 22:10:15

积分攒了不少,人还是菜鸟一个。
页: [1]
查看完整版本: 过年了,下棋吧:美卡休闲五子棋 3.2.0