📄 program-crack-mtv-detail.html
字号:
$0x805ba6c (0x805ba6c->"Check
<br>
registration information and try again")
<br>0x804ec7c <_start+18024>: pushl
$0x805ba99 (0x805ba99->"Incorrect
<br>
registration information!")
<br>0x804ec81 <_start+18029>: call
0x804a790 <_start+380> (警告框出现)
<br>.......
<p>到注册信息不对的警告框出现,只有一个函数调用比较可疑:
<br>0x804ebd9 call 0x8055978
<whereError+11004>
<br>而且调用结束后还有一个比较跳转的动作, 那么我们就跟踪进去看看
<br>(gdb) break *0x8055978
<br>Breakpoint 3 at 0x8055978
<br>(gdb) c
<br>Continuing.
<p>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?
<p>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
<p>0x8055a7e处的比较说明, 很有可能函数0x80561d9就是在依照我输入的Order
<br>number算正确的Key,而后比较结果,所以不妨先用 8EEE5816 做Key试一试.
<p>结果,8EEE5816果然就是正确的Key, mtv检查正确后在$HOME目录中产生一个
<br>.mtvrc文件, 以后每次使用都会自动读出.mtvrc中的注册信息并检查..
<p>还可以据0x80561d9函数写出注册机:
<p>(gdb) disass 0x80561d9 0x805624e
<br>Dump of assembler code from 0x80561d9 to 0x805624e:
<br>0x80561d9 <whereError+13149>: pushl %edi
<br>0x80561da <whereError+13150>: pushl %esi
<br>0x80561db <whereError+13151>: pushl %ebx
<br>0x80561dc <whereError+13152>: movl 0x14(%esp,1),%edi
<br>0x80561e0 <whereError+13156>: movl 0x10(%esp,1),%edx
<br>0x80561e4 <whereError+13160>: xorl %ebx,%ebx
<br>0x80561e6 <whereError+13162>: movl %edi,%eax
<br>0x80561e8 <whereError+13164>: movl %edi,%esi
<br>0x80561ea <whereError+13166>: andl $0x3,%eax
<br>0x80561ed <whereError+13169>: je
0x8056205 <whereError+13193>
<br>0x80561ef <whereError+13171>: jp
0x8056200 <whereError+13188>
<br>0x80561f1 <whereError+13173>: cmpl $0x2,%eax
<br>0x80561f4 <whereError+13176>: je
0x80561fb <whereError+13183>
<br>0x80561f6 <whereError+13178>: cmpb %ah,(%esi)
<br>0x80561f8 <whereError+13180>: je
0x8056229 <whereError+13229>
<br>0x80561fa <whereError+13182>: incl %esi
<br>0x80561fb <whereError+13183>: cmpb %ah,(%esi)
<br>0x80561fd <whereError+13185>: je
0x8056229 <whereError+13229>
<br>0x80561ff <whereError+13187>: incl %esi
<br>0x8056200 <whereError+13188>: cmpb %ah,(%esi)
<br>0x8056202 <whereError+13190>: je
0x8056229 <whereError+13229>
<br>0x8056204 <whereError+13192>: incl %esi
<br>0x8056205 <whereError+13193>: movl (%esi),%eax
<br>0x8056207 <whereError+13195>: testb %ah,%al
<br>0x8056209 <whereError+13197>: jne
0x8056213 <whereError+13207>
<br>0x805620b <whereError+13199>: testb %al,%al
<br>0x805620d <whereError+13201>: je
0x8056229 <whereError+13229>
<br>0x805620f <whereError+13203>: testb %ah,%ah
<br>0x8056211 <whereError+13205>: je
0x8056228 <whereError+13228>
<br>0x8056213 <whereError+13207>: testl $0xff0000,%eax
<br>0x8056218 <whereError+13212>: je
0x8056227 <whereError+13227>
<br>0x805621a <whereError+13214>: addl $0x4,%esi
<br>0x805621d <whereError+13217>: testl $0xff000000,%eax
<br>0x8056222 <whereError+13222>: jne
0x8056205 <whereError+13193>
<br>0x8056224 <whereError+13224>: subl $0x3,%esi
<br>0x8056227 <whereError+13227>: incl %esi
<br>0x8056228 <whereError+13228>: incl %esi
<br>0x8056229 <whereError+13229>: subl %edi,%esi
<br>0x805622b <whereError+13231>: cmpl %esi,%ebx
<br>0x805622d <whereError+13233>: jnl
0x8056248 <whereError+13260>
<br>0x805622f <whereError+13235>: movb (%ebx,%edi,1),%al
<br>0x8056232 <whereError+13238>: incl %ebx
<br>0x8056233 <whereError+13239>: andl $0xff,%eax
<br>0x8056238 <whereError+13244>: pushl %eax
<br>0x8056239 <whereError+13245>: pushl %edx
<br>0x805623a <whereError+13246>: call 0x8055b58
<whereError+11484>
<br>0x805623f <whereError+13251>: movl %eax,%edx
<br>0x8056241 <whereError+13253>: addl $0x8,%esp
<br>0x8056244 <whereError+13256>: cmpl %esi,%ebx
<br>0x8056246 <whereError+13258>: jl
0x805622f <whereError+13235>
<br>0x8056248 <whereError+13260>: popl %ebx
<br>0x8056249 <whereError+13261>: movl %edx,%eax
<br>0x805624b <whereError+13263>: popl %esi
<br>0x805624c <whereError+13264>: popl %edi
<br>0x805624d <whereError+13265>: ret
<p>0x8055b58处的函数太长了, bbs不让我发..:( 砍掉了
<p>由这个程序的破解可以看出, linux下的破解并不困难, 只是gdb有点不太方便
<br>有时会有点小毛病(比如ni有时也会跟到函数中), 不过用多了就习惯了.
<br>
<br>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -