五年级pep英语优质课:程序破解基本知识

来源:百度文库 编辑:偶看新闻 时间:2024/04/25 20:21:31
 程式如何保护:  
  最通常是用你的name当作key,   经过复杂演算法,   算出注册码。但也有一些并不是用你的name当作key算注册码的,而是name与注册码无关,注册码是固定,name是随便输入就可以了。对于前者,较容易可算出注册码,而后者要算注册码就不是一件容易的事了。关于两者的具体处理方法,会在下面文章详细介绍。  
  注册处理:  
   
  1.   当输入name,   company,   password   後,   立即比对,   正确的话立即做注册处理,   以後再也不判断,   不正确要求再输入.   不输入   name   的话,   保持   shareware   版.  
  2.   同1,   但以後一执行程式还是会判断.  
  3.   输入时不比对,   只写入资料於   *.ini,   程式执行时再比对.  
  对于第一种情况,是最容易破解的了,因为只要找到软件注册时的比较失败窗口的call,在向上找一找,就可以找到一个可以跳过这个call的jz或jnz,只要把这个jz改为jmp,就可以随便注册了,因为它们的只进行一次性的比较,所以只要在注册时强行使它们注册成功,则以后就不用管了。  
  它们的一般形式为:  
  xxxx:xxxxxxxx   call   比较注册码的call  
  xxxx:xxxxxxxx   test   eax   ,   eax  
  xxxx:xxxxxxxx   jnz   (或jz)   xxxxxxxx   只要把这个jnz   改为jmp   就可以了  
  :  
  :  
  xxxx:xxxxxxxx   call   比较失败的窗口的call  
  对于第二,第三种情况,就不能这么简单地破解了,而要追进比较注册码的call里去,如果可以算出注册码的,就万事大吉了,如果不能,就比较地麻烦了,只有按下面介绍的方法进行crack了,要知软件始终不是你写的,所以不可能所有的软件都可以crack的,只能各凭功力了。对于不能简单地算出注册码的软件,我们的唯一的方法是先在比较注册码的call里,设一个断点,然后再重新运行软件,如果软件被中断的,那么这个软件就有八成可以破解了,只要在比较注册码的call里找到那些jz或jnz会导致eax的值变化,把这些指令改为nop或jmp(视具体情况而定),则一般都可以迎韧而解了。  
  对于第一种情况的破解实例:    
  Hex32bit  
  这是一个多功能的编辑软件,有很强大的功能,是一个很好用的32位工具软件。  
  1.输入Registeration   code:48484848(随意)  
  2.按CTRL-D   进入WIN   S-ICE  
  3.下S   30:0   LFFFFFFF   '48484848'   得一地址30:XXXXXXXX  
  4.下BPM   30:XXXXXXXX   R  
  5.按F5   退出  
  6.用鼠标击Register  
  7.程序被WIN   S-ICE   中断  
  8.按F12回到Hworks32的天空  
  9.直按F10至以下程式:  
  0137:0041635F   CALL   00426A70   比较密码的CALL  
  0137:00416364   ADD   ESP   ,   04  
  0137:00416367   MOV   [EBP-10]   ,   EAX  
  0137:0041636A   CMP   DWORD   PTR   [   EBP-10   ]   ,   00  
  0137:0041636E   JZ   004163ED   错误时跳,只要改为nop…………就OK了  
  :  
  :  
  0137:004163E8   JMP   00416440  
  :  
  :  
  0137:0041640D   CALL   004354EE   出现注册失败窗口的CALL  
  所以下code   on   抄下机器代码,打开Hworks32.exe  
  找0f8479000000  
  改909090909090  
  OK!!!完工。  
   
  对于第二种情况的破解实例:  
  FLMASK3.00  
  1.   用WINSOFT-ICE载入FLMASK32.EXE  
  2.   输入Your   Name   :Ru   Feng(随意)  
  Registration   Key   :   48484848(随意)  
  3.   按CTRL-D进入WINSOFT-ICE   ,下S   30:0   LFFFFFFFF   '48484848'得一地址30:XXXX  
  4.   下BPM   30:XXXX   R  
  5.   按F5退出    
  6.   确定Registration  
  7.   程序被WINSOFT-ICE中断  
  8.   按F12跳到FLMASK32的天空  
  9.   按F10直到以下程式:  
  0137:00452D1F   CALL   00443118   比较注册码CALL  
  0137:00452D24   TEST   AL   ,   AL  
  0137:00452D24   JZ   00452E89   不正确时就跳  
  :  
  :  
  0137:00452E89   MOV   DX   ,   0030  
  0137:00452E8D   MOV   EAX   ,   00001CFC  
  0137:00452E92   CALL   00443A54   出现错误窗口  
  10.   所以我们追进0137:00452D1F   CALL   00443118中去  
  一直走下支会见到以下程式:  
  0137:00443145   CALL   00403BCC  
  0137:0044314A   CMP   EAX   ,   08   比较注册码是否8个数字  
  0137:0044314D   JNZ   00443209   不等则跳,跳就失败  
  :  
  :  
  0137:004431BF   CALL   004076A4   比较注册码是否正确  
  0137:004431BF   CMP   ESI   ,   EAX  
  0137:004431C6   JNZ   00443209   不正确则跳  
  所以由汇编知识可知,只要把CMP   ESI,EAX改为MOV   EAX,ESI  
  把JNZ   00443209   改为NOP   NOP  
  把JNZ   00443209   改为NOP   NOP  
  则随意输入数字都可以注册了。  
  赶快下CODE   ON指令抄下程序代码:  
  码0F85B6000000  
  改909090909090  
  码3BF07541  
  改8BC69090  
  用ULTRAEDIT32改FLMASK32.EXE就行了。  
   
  [转]破解预备知识  
   
  一.机械码,又称机器码.  
  ultraedit打开,编辑exe文件时你会看到  
  许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码  
  就是机器码.  
  修改程序时必须通过修改机器码来修改exe文件.  
   
  二.需要熟练掌握的全部汇编知识(只有这么多)  
  不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了  
  cmp   a,b   比较a与b  
  mov   a,b   把b的值送给a  
  ret   返回主程序  
  nop   无作用,英文“no   operation”的简写,意思是“do   nothing”(机器码90)***机器码的含义参看上面  
  (解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)  
  call   调用子程序  
  je   或jz   若相等则跳(机器码74   或0F84)  
  jne或jnz   若不相等则跳(机器码75或0F85)  
  jmp   无条件跳(机器码EB)  
  jb   若小于则跳  
  ja   若大于则跳  
  jg   若大于则跳  
  jge   若大于等于则跳  
  jl   若小于则跳  
  jle   若小于等于则跳  
  pop   出栈  
  push   压栈  
   
  三.常见修改(机器码)  
  74=>75   74=>90   74=>EB  
  75=>74   75=>90   75=>EB  
   
  jnz->nop  
  75->90(相应的机器码修改)  
   
  jnz   ->   jmp  
  75   ->   EB(相应的机器码修改)  
   
  jnz   ->   jz  
  75->74   (正常)   0F   85   ->   0F   84(特殊情况下,有时,相应的机器码修改)  
   
  四.两种不同情况的不同修改方法  
  1.修改为jmp  
  je(jne,jz,jnz)   =>jmp相应的机器码EB   (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息  
   
  xxxxxxxxxxxx   出错信息,例如:注册码不对,sorry,未注册版不能...,"Function   Not   Avaible   in   Demo"   或   "Command   Not   Avaible"   或   "Can't   save   in   Shareware/Demo"等   (我们希望把它跳过,不让它出现)  
  。。。  
  。。。  
  xxxxxxxxxxxx   正确路线所在  
   
  2.修改为nop  
  je(jne,jz,jnz)   =>nop相应的机器码90   (正确信息向上找到的第一个跳转)   nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处  
   
  xxxxxxxxxxxx   正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)  
  。。。  
  。。。  
  xxxxxxxxxxxx   出错信息(我们希望不要跳到这里,不让它出现)  
  。。。  
  。。。  
  五.爆破无敌口诀   背会此口诀,天下无敌,以后慢慢琢磨,仔细体会,收益多多。如此好的口诀,不要错过  
  一条(跳)就死,九筒(90)就胡       (对应上面的2.修改为nop)  
  一条(跳)就胡,一饼(EB)伺候       (对应上面的1.修改为jmp)  
  妻死(74)便妻无(75)    
  爸死(84)便爸无(85)