• 程序破解基本知识


    程序破解基本知识

    程式如何保护:   
      最通常是用你的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)

  • 相关阅读:
    使用 gdb 对程序进行汇编级调试
    日记:暂时不玩了
    真经一句话
    2 service and configuration design dimensions——ACE读书笔记
    电影经典对白
    excel 中分段统计的使用
    asp.net url 重写解决方案
    OpenLayers项目分析(七)地图表现
    Geoserver学习(四)——WMS工程分析之Java包介绍
    OpenLayers项目分析(六)数据渲染分析
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/8947819.html
Copyright © 2020-2023  润新知