- UID
- 901
注册时间2005-4-13
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 奋斗 2024-10-30 21:11 |
---|
签到天数: 453 天 [LV.9]以坛为家II
|
http://www.onlinedown.net/soft/50993.htm
美卡休闲五子棋 3.2.0
界面还算是有趣的五子棋游戏,软件也不大,建议下载试玩!只是我很容易就击败它了。算了,既然分析了就贴出来吧,也有好几个月没有Guan shui 了。
by wofan[OCN]
MachineID:789110647
regcode:374764717
Microsoft Visual Basic 5.0 / 6.0
它有MsgBox提示。
于是用MsgBox下断,然后找到关键点重新下断:
……
00465121 C745 CC 0800000>MOV DWORD PTR SS:[EBP-34],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:[467058] ; 从内存[00467058]装入整数,推入隐含的ST中:0x165674AD ,这是本机真注册码
00465332 DD9D E0FEFFFF FSTP QWORD PTR SS:[EBP-120] ; 存实数上托栈:把TOP寄存器ST存储到存储单元,然后上托堆栈
00465338 DC9D E0FEFFFF FCOMP QWORD PTR SS:[EBP-120] ; 浮点数比较函数
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:[EBP-18] ; 以下就释放对象了....
……
====================================
那么这个存储单元的值是如何得来的呢?
重新载入程序,
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:[EAX+36],CX
00456120 66:8948 38 MOV WORD PTR DS:[EAX+38],CX
00456124 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
00456127 FFD3 CALL NEAR EBX
00456129 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C]
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:[EBP-2C]
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:[467058],EAX ; 将EAX中的值写入内存:[00467058]
……
====================================
总结:
无非是取C盘序列号,右移一次,然后减去一个常数0x12DFB0E
结果的十进制形式就是注册码。
噢,忘记说了,该软件会检测调试器。
22:57 2007-1-22
这么简单,权当作作业好了。
[ 本帖最后由 wofan 于 2007-1-22 23:37 编辑 ] |
|