码迷,mamicode.com
首页 > 其他好文 > 详细

程序破解基本知识

时间:2018-04-26 01:13:11      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:支持   意思   comm   3.0   nbsp   ret   sha   can   function   

程序破解基本知识

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

 

程序破解基本知识

标签:支持   意思   comm   3.0   nbsp   ret   sha   can   function   

原文地址:https://www.cnblogs.com/lsgxeva/p/8947819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!