📄 00000007.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: I007 (阿健), 信区: Linux <BR>标 题: Linux下破解实战(3) <BR>发信站: BBS 水木清华站 (Sat Oct 3 23:35:23 1998) WWW-POST <BR> <BR>
<BR>到注册信息不对的警告框出现,只有一个函数调用比较可疑:
<BR>0x804ebd9 call 0x8055978 <whereError+11004>
<BR>而且调用结束后还有一个比较跳转的动作, 那么我们就跟踪进去看看
<BR>(gdb) break *0x8055978
<BR>Breakpoint 3 at 0x8055978
<BR>(gdb) c
<BR>Continuing.
<BR>
<BR>Breakpoint 3, 0x8055978 in whereError ()
<BR>(gdb) disass 0x8055978 0x805ffff
<BR>Dump of assembler code from 0x8055978 to 0x805ffff:
<BR>0x8055978 <whereError+11004>: subl $0x8,%esp
<BR>0x805597b <whereError+11007>: pushl %ebp
<BR>0x805597c <whereError+11008>: pushl %edi
<BR>0x805597d <whereError+11009>: pushl %esi
<BR>0x805597e <whereError+11010>: pushl %ebx
<BR>0x805597f <whereError+11011>: movl 0x1c(%esp,1),%ebp (0x809e850)
<BR>0x8055983 <whereError+11015>: movl 0x20(%esp,1),%esi (0x809e880)
<BR>0x8055987 <whereError+11019>: movl 0x24(%esp,1),%ebx (0x806e9ac)
<BR>0x805598b <whereError+11023>: testb $0x1,(%ebx)
<BR>0x805598e <whereError+11026>: je 0x80559c0 <whereError+11076> -
<BR>..... |
<BR>0x80559c0 <whereError+11076>: pushl %eax <
<BR>0x80559c1 <whereError+11077>: leal 0x18(%esp,1),%eax
<BR>0x80559c5 <whereError+11081>: pushl %eax (eax:0xbffff70c)
<BR>0x80559c6 <whereError+11082>: pushl $0x8060cbb (0x8060cbb->" %x")
<BR>0x80559cb <whereError+11087>: pushl %esi (esi:0x809e880->"87654321")
<BR>0x80559cc <whereError+11088>: call 0x804a294 <sscanf>
<BR>0x80559d1 <whereError+11093>: movl %eax,%edi(此时0xbffff70c->0x87654321)
<BR>0x80559d3 <whereError+11095>: addl $0x10,%esp
<BR>0x80559d6 <whereError+11098>: cmpl $0x1,%edi
<BR>0x80559d9 <whereError+11101>: je 0x8055a01 <whereError+11141> -
<BR>..... |
<BR>0x8055a01 <whereError+11141>: testb $0x1,(%ebx) <-
<BR>0x8055a04 <whereError+11144>: je 0x8055a3a <whereError+11198> -
<BR>..... |
<BR>0x8055a3a <whereError+11198>: pushl %ebp(ebp:0x809e850->"B123456789") <-
<BR>0x8055a3b <whereError+11199>: pushl $0x0
<BR>0x8055a3d <whereError+11201>: call 0x80561d9 <whereError+13149>
<BR> ^______会不会去算正确的Key?
<BR>
<BR>0x8055a42 <whereError+11206>: movl %eax,%esi (eax:0x8eee5816)
<BR>0x8055a44 <whereError+11208>: addl $0x8,%esp
<BR>0x8055a47 <whereError+11211>: testb $0x1,(%ebx)
<BR>0x8055a4a <whereError+11214>: je 0x8055a7a <whereError+11262> -
<BR>..... |
<BR>0x8055a7a <whereError+11262>: movl 0x14(%esp,1),%edx <-
<BR>0x8055a7e <whereError+11266>: cmpl %esi,%edx
<BR> (edx:0x87654321,这是我输入的Key
<BR> 它在与0x8eee5816比较???)
<BR>0x8055a80 <whereError+11268>: jne 0x8055ab9 <whereError+11325> -
<BR>.... |
<BR>0x8055ab9 <whereError+11325>: testb $0x1,(%ebx) <-
<BR>0x8055abc <whereError+11328>: je 0x8055aec <whereError+11376> -
<BR>.... |
<BR>0x8055aec <whereError+11376>: xorl %eax,%eax <-
<BR>0x8055aee <whereError+11378>: popl %ebx
<BR>0x8055aef <whereError+11379>: popl %esi
<BR>0x8055af0 <whereError+11380>: popl %edi
<BR>0x8055af1 <whereError+11381>: popl %ebp
<BR>0x8055af2 <whereError+11382>: addl $0x8,%esp
<BR>0x8055af5 <whereError+11385>: ret
<BR>
<BR>0x8055a7e处的比较说明, 很有可能函数0x80561d9就是在依照我输入的Order
<BR>number算正确的Key,而后比较结果,所以不妨先用 8EEE5816 做Key试一试.
<BR>
<BR>结果,8EEE5816果然就是正确的Key, mtv检查正确后在$HOME目录中产生一个
<BR>.mtvrc文件, 以后每次使用都会自动读出.mtvrc中的注册信息并检查..
<BR>
<BR>还可以据0x80561d9函数写出注册机:
<BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -