恋_紫花地丁吧 关注:20贴子:374
  • 7回复贴,共1

『破解入门』浅谈破解技术~~菜鸟入林

只看楼主收藏回复

既然有这吧,把自己的原创都整理在这里。。。顺便抢个吧主。。。


IP属地:江苏1楼2010-10-31 18:07回复
    接着介绍一下破解所要用到的工具,所谓巧妇难为无米之炊,没有任何工具想要破解几乎是不可能的,下面介绍一下最主要的。
    W32DASM:这在破解领域被誉为“屠龙刀”,可见此软件的威力了,它通常用来做静态破解,通常用来爆破软件。
    OllyDBG:这里要隆重向大家介绍,此软件功能强大,不仅能静态破解,还能动态调试,在看雪论坛中有此软件的中文版本,更难能可贵的是它还集成了众多插件,这点使得OllyDBG的功能得到了提高,一点小小的不足是它是ring3下的调试程序,在ring0下的驱动程序不能用它调试。
    peid:通常程序的作者不会轻易让你调试,通常会在程序上加壳,壳可以分为两类,一类是以upx为代表的压缩壳,一类是以保护程序为主要目的的保护壳,程序一旦加了壳,调试时很难看出有用的信息,因此需要先将壳脱去然后再进行调试。peid正是查壳工具,它会查出程序是用什么语言编写的,有没有加壳,加了什么壳等。
    需要以上的工具是主要的,当然,具体程序还可以用eXeScope,ResHacker(查看PE文件中的资源),Filemon,winhex,wpe,UltraEdit等等辅助工具帮助破解


    IP属地:江苏3楼2010-10-31 18:08
    回复
      下面是一个具体的破解实例,由于面向初学者,因此破解的程序不加壳,程序明码比较。
      #include<stdio.h>
      main()
      {
      int mima;
      leep:printf("qing shu ru mima \n");
      scanf("%d",&mima); //要求输入密码
      if (mima == 12345) //比较输入的密码和12345
      printf("bingo");    //如果输入的为12345,则显示“bingo”并退出程序
      else
      {
      printf("you are wrong,try again\n");    //如果输入的不是12345,那就提示错误信息
      goto leep;
      }
      }
      这个是用c语言写的小程序,难度几乎和hello world相同,学过c语言超过2天的几乎都看得懂,又加了注释,此代码在vc6.0下编译通过。
      本想用W32DASM破解,无奈电脑太菜,W32DASM一加载这个小程序cpu使用率马上飙升到100%,机子卡的令人无语。无奈使用OllyDBG,来演示一下爆破。


      IP属地:江苏4楼2010-10-31 18:08
      回复
        用OllyDBG加载这个小程序,OllyDBG会自动的停在程序入口处,(通常程序入口都是入栈命令),你会发现窗口中绝大部分是一条一条的代码,我们把它叫做汇编,有必要了解一下破解要用的基本汇编指令
              cmpa,b //比较a与b
        mova,b //把b值送给a值,使a=b
        ret//返回主程序
        nop//无作用,英文(no operation)简写,意思“do nothing”(机器码90)
         (ultraedit打开编辑exe文件看到90相当汇编语句的nop)
        call //调用子程序,子程序以ret结尾
        je或jz //相等则跳(机器码是74或84)
        jne或jnz //不相等则跳(机器码是75或85)
        jmp//无条件跳(机器码是EB)
        jb //若小于则跳
        ja //若大于则跳
        jg //若大于则跳
        jge//若大于等于则跳
        jl //若小于则跳
        pop xxx//xxx出栈
        push xxx //xxx压栈
        右键数据窗口(左上角的那个)点击查找->所有参考文本字串。在弹出的文本字串窗口中可以找到如图,由于当密码输入错误后会提示you are wrong,try again,双击这个字符串。
        


        IP属地:江苏5楼2010-10-31 18:09
        回复
          然后会进入

          上下翻一下窗口,如图二。。。可以看到
          CMP DWORD PTR SS:[EBP-4],3039
          JNZ SHORT 0040105E
          cmp的作用是比较a和b是否相同,jnz是操作数不为零时执行跳转,而跳转到的地方就是提示密码输入错误的地方,于是我们把这个跳转称之为关键跳转,分析出了关键跳转,接下来只要把这个跳转改掉就行了,通常做法是改成NOP,nop就是什么操作都不做,这样就不用跳转到错误信息那里了。在这里用NOP填充,F9运行一下。。。。。。随便输入一个数字(不是12345),提示bingo。。哈哈,爆破成功。


          IP属地:江苏6楼2010-10-31 18:10
          回复
            这里只是一个很简单的例子,破解中最简单的爆破,没有用到断点,无需掌握程序领空,dll领空以及动态调试,寄存器等知识,但是其中揭示的破解原理是深刻的,这就是破解时的基本思路。


            IP属地:江苏7楼2010-10-31 18:11
            回复
              ========================end================================


              IP属地:江苏8楼2010-10-31 18:11
              回复
                mark 学习之


                9楼2011-07-12 01:01
                回复