BBS水木清华站∶精华区

发信人: I007 (阿健), 信区: Linux 
标  题: Linux下破解实战(3) 
发信站: BBS 水木清华站 (Sat Oct  3 23:35:23 1998) WWW-POST 
 
 
到注册信息不对的警告框出现,只有一个函数调用比较可疑:  
0x804ebd9       call   0x8055978 <whereError+11004>  
而且调用结束后还有一个比较跳转的动作, 那么我们就跟踪进去看看  
(gdb) break *0x8055978  
Breakpoint 3 at 0x8055978  
(gdb) c  
Continuing.  
 
Breakpoint 3, 0x8055978 in whereError ()  
(gdb) disass 0x8055978 0x805ffff  
Dump of assembler code from 0x8055978 to 0x805ffff:  
0x8055978 <whereError+11004>:   subl   $0x8,%esp  
0x805597b <whereError+11007>:   pushl  %ebp  
0x805597c <whereError+11008>:   pushl  %edi  
0x805597d <whereError+11009>:   pushl  %esi  
0x805597e <whereError+11010>:   pushl  %ebx  
0x805597f <whereError+11011>:   movl   0x1c(%esp,1),%ebp (0x809e850)  
0x8055983 <whereError+11015>:   movl   0x20(%esp,1),%esi (0x809e880)  
0x8055987 <whereError+11019>:   movl   0x24(%esp,1),%ebx (0x806e9ac)  
0x805598b <whereError+11023>:   testb  $0x1,(%ebx)   
0x805598e <whereError+11026>:   je     0x80559c0 <whereError+11076> -  
.....                                                                |  
0x80559c0 <whereError+11076>:   pushl  %eax                         <  
0x80559c1 <whereError+11077>:   leal   0x18(%esp,1),%eax   
0x80559c5 <whereError+11081>:   pushl  %eax (eax:0xbffff70c)  
0x80559c6 <whereError+11082>:   pushl  $0x8060cbb (0x8060cbb->" %x")  
0x80559cb <whereError+11087>:   pushl  %esi (esi:0x809e880->"87654321")  
0x80559cc <whereError+11088>:   call   0x804a294 <sscanf>  
0x80559d1 <whereError+11093>:   movl   %eax,%edi(此时0xbffff70c->0x87654321)  
0x80559d3 <whereError+11095>:   addl   $0x10,%esp  
0x80559d6 <whereError+11098>:   cmpl   $0x1,%edi  
0x80559d9 <whereError+11101>:   je     0x8055a01 <whereError+11141> -  
.....                                                                |  
0x8055a01 <whereError+11141>:   testb  $0x1,(%ebx)                 <-  
0x8055a04 <whereError+11144>:   je     0x8055a3a <whereError+11198>       -  
.....                                                                      |  
0x8055a3a <whereError+11198>:   pushl  %ebp(ebp:0x809e850->"B123456789") <-  
0x8055a3b <whereError+11199>:   pushl  $0x0  
0x8055a3d <whereError+11201>:   call   0x80561d9 <whereError+13149>  
                                ^______会不会去算正确的Key?  
 
0x8055a42 <whereError+11206>:   movl   %eax,%esi (eax:0x8eee5816)  
0x8055a44 <whereError+11208>:   addl   $0x8,%esp  
0x8055a47 <whereError+11211>:   testb  $0x1,(%ebx)  
0x8055a4a <whereError+11214>:   je     0x8055a7a <whereError+11262>  -  
.....                                                                 |  
0x8055a7a <whereError+11262>:   movl   0x14(%esp,1),%edx            <-  
0x8055a7e <whereError+11266>:   cmpl   %esi,%edx  
                                       (edx:0x87654321,这是我输入的Key  
                                        它在与0x8eee5816比较???)  
0x8055a80 <whereError+11268>:   jne    0x8055ab9 <whereError+11325> -  
....                                                                 |  
0x8055ab9 <whereError+11325>:   testb  $0x1,(%ebx)                 <-  
0x8055abc <whereError+11328>:   je     0x8055aec <whereError+11376> -  
....                                                                 |  
0x8055aec <whereError+11376>:   xorl   %eax,%eax                   <-  
0x8055aee <whereError+11378>:   popl   %ebx  
0x8055aef <whereError+11379>:   popl   %esi  
0x8055af0 <whereError+11380>:   popl   %edi  
0x8055af1 <whereError+11381>:   popl   %ebp  
0x8055af2 <whereError+11382>:   addl   $0x8,%esp  
0x8055af5 <whereError+11385>:   ret      
 
0x8055a7e处的比较说明, 很有可能函数0x80561d9就是在依照我输入的Order   
number算正确的Key,而后比较结果,所以不妨先用 8EEE5816 做Key试一试.  
 
结果,8EEE5816果然就是正确的Key, mtv检查正确后在$HOME目录中产生一个  
.mtvrc文件, 以后每次使用都会自动读出.mtvrc中的注册信息并检查..  
 
还可以据0x80561d9函数写出注册机:  
 
(gdb) disass 0x80561d9 0x805624e  
Dump of assembler code from 0x80561d9 to 0x805624e:  
0x80561d9 <whereError+13149>:   pushl  %edi  
0x80561da <whereError+13150>:   pushl  %esi  
0x80561db <whereError+13151>:   pushl  %ebx  
0x80561dc <whereError+13152>:   movl   0x14(%esp,1),%edi  
0x80561e0 <whereError+13156>:   movl   0x10(%esp,1),%edx  
0x80561e4 <whereError+13160>:   xorl   %ebx,%ebx  
0x80561e6 <whereError+13162>:   movl   %edi,%eax  
0x80561e8 <whereError+13164>:   movl   %edi,%esi  
0x80561ea <whereError+13166>:   andl   $0x3,%eax  
0x80561ed <whereError+13169>:   je     0x8056205 <whereError+13193>  
0x80561ef <whereError+13171>:   jp     0x8056200 <whereError+13188>  
0x80561f1 <whereError+13173>:   cmpl   $0x2,%eax  
0x80561f4 <whereError+13176>:   je     0x80561fb <whereError+13183>  
0x80561f6 <whereError+13178>:   cmpb   %ah,(%esi)  
0x80561f8 <whereError+13180>:   je     0x8056229 <whereError+13229>  
0x80561fa <whereError+13182>:   incl   %esi  
0x80561fb <whereError+13183>:   cmpb   %ah,(%esi)  
0x80561fd <whereError+13185>:   je     0x8056229 <whereError+13229>  
0x80561ff <whereError+13187>:   incl   %esi  
0x8056200 <whereError+13188>:   cmpb   %ah,(%esi)  
0x8056202 <whereError+13190>:   je     0x8056229 <whereError+13229>  
0x8056204 <whereError+13192>:   incl   %esi  
0x8056205 <whereError+13193>:   movl   (%esi),%eax  
0x8056207 <whereError+13195>:   testb  %ah,%al  
0x8056209 <whereError+13197>:   jne    0x8056213 <whereError+13207>  
0x805620b <whereError+13199>:   testb  %al,%al  
0x805620d <whereError+13201>:   je     0x8056229 <whereError+13229>  
0x805620f <whereError+13203>:   testb  %ah,%ah  
0x8056211 <whereError+13205>:   je     0x8056228 <whereError+13228>  
0x8056213 <whereError+13207>:   testl  $0xff0000,%eax  
0x8056218 <whereError+13212>:   je     0x8056227 <whereError+13227>  
0x805621a <whereError+13214>:   addl   $0x4,%esi  
0x805621d <whereError+13217>:   testl  $0xff000000,%eax  
0x8056222 <whereError+13222>:   jne    0x8056205 <whereError+13193>  
0x8056224 <whereError+13224>:   subl   $0x3,%esi  
0x8056227 <whereError+13227>:   incl   %esi  
0x8056228 <whereError+13228>:   incl   %esi  
0x8056229 <whereError+13229>:   subl   %edi,%esi  
0x805622b <whereError+13231>:   cmpl   %esi,%ebx  
0x805622d <whereError+13233>:   jnl    0x8056248 <whereError+13260>  
0x805622f <whereError+13235>:   movb   (%ebx,%edi,1),%al  
0x8056232 <whereError+13238>:   incl   %ebx  
0x8056233 <whereError+13239>:   andl   $0xff,%eax  
0x8056238 <whereError+13244>:   pushl  %eax  
0x8056239 <whereError+13245>:   pushl  %edx  
0x805623a <whereError+13246>:   call   0x8055b58 <whereError+11484>  
0x805623f <whereError+13251>:   movl   %eax,%edx  
0x8056241 <whereError+13253>:   addl   $0x8,%esp  
0x8056244 <whereError+13256>:   cmpl   %esi,%ebx  
0x8056246 <whereError+13258>:   jl     0x805622f <whereError+13235>  
0x8056248 <whereError+13260>:   popl   %ebx  
0x8056249 <whereError+13261>:   movl   %edx,%eax  
0x805624b <whereError+13263>:   popl   %esi  
0x805624c <whereError+13264>:   popl   %edi  
0x805624d <whereError+13265>:   ret      
 
0x8055b58处的函数太长了, bbs不让我发..:( 砍掉了  
 
由这个程序的破解可以看出, linux下的破解并不困难, 只是gdb有点不太方便  
有时会有点小毛病(比如ni有时也会跟到函数中), 不过用多了就习惯了.   
       
 
 
-- 
                                                                                 
        ~0  (_|  . - ' - . _ . - ' - . _ . - ' - . |_)  O              
       |(_~|^~~|                                  |~~^|~_)|                      
       TT/_ T"T         网络连着你我她             T"T _\HH                      
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
  
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: sun.swjtu.edu.cn]  

BBS水木清华站∶精华区