欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

hellfire2000破解过程及注册机的编写(上) (4千字)

hellfire2000破解过程及注册机的编写(上) (4千字)

文章名称:hellfire2000破解过程及注册机的编写(上)

e_mail:luoyi.ly@yeah.net
oicq:36606500
目的:帮助和我一样的广大初学者。
软件名称:hellfire2000
软件简介:很酷的屏幕保护软件。与流行的那些几张图片换来换去的屏保完全不同。它可以完全让你的桌面“燃烧”
      起来,还有很逼真的背景音效。如果能再加上一点嗅觉的刺激的话,呵呵...你可能真的会以为你的宝贝
      compute烧起来了呢!
保护分析:1.时间保护分析:
      该软件把它的时间信息保存在:
      [HKEY_CLASSES_ROOT\AppID\HCB1CD94CF]下,(埋得好怪呀!呵呵..)过期后,将该键删除,就可以
      继续使用了。
        2.注册保护分析:
      在它的设置项里面就有三个输入框,分别是输入:user name,company,reg.key.用trw2000的万能中断
      hmemcpy+pmodule很容易找到关键的比较处。它会先判断reg.key的长度是否为偶数,不是的话直接出
      错。是的话,再继续判断是否为12位数字。不是的话,又是直接出错,而且它的这个判断和平常我们常
      见的用ecx计数的判断不同(下面我会提到),只有过了这两关,才能到达计算注册码的核心代码处。
      算出来的注册吗以两位一组的形式和你输入的reg.key比较,而且是数字比较,不是ascii码比较。用
      d命令不能直接在内存窗口的右边看到注册码。它以整数的形式存放在左边。
      注册成功后,注册信息保存在:
      [HKEY_CURRENT_USER\SOFTWARE\FP SOFTWARE\HELLFIRE-2000\HELLFIRE\CONFIG]下的:
      LicenseCompany
      LicenseKEY
      LicenseUSER
      三个键中。删除后程序又可以重新注册。
      3.程序自我保护分析:
      我曾试图用暴力破解法改动一个字节使程序注册,(具体地点后面我会提到)但是第二次程序运行时,
      提示我:可执行文件被修改。小弟功力不够,不能够破解这个“地雷”,那位大虾有兴趣帮小弟一把,
          小弟感激不尽!
                      教程正文:
          1.输入注册信息:
          user name:luoyi
      company:  upc
      reg.key:  654321
          2.用trw2000跟踪,可找到如下代码:
:00405EAA C784249400000000000000  mov dword ptr [esp+00000094], 00000000
:00405EB5 E806FDFFFF              call 00405BC0  <---------CALL1
:00405EBA 83C40C                  add esp, 0000000C
:00405EBD 85C0                    test eax, eax
:00405EBF 0F84FD000000            je 00405FC2   
:00405EC5 8D4C2410                lea ecx, dword ptr [esp+10]
:00405EC9 E8620B0000              call 00406A30  <---------CALL2
:00405ECE 85C0                    test eax, eax
:00405ED0 0F84EC000000            je 00405FC2
:00405ED6 53                      push ebx
            可以看出:程序有两个子程序来判断注册码的正确与否。可是,就我跟踪的结果来看,好像只有
        CALL1起了判断作用。好了,用F8跟入CALL1,继续跟踪,会看到如下代码:
:00405BE6 6800010000              push 00000100
:00405BEB 50                      push eax
:00405BEC 51                      push ecx
:00405BED E8DEFDFFFF              call 004059D0  <----------CALL3
:00405BF2 83C40C                  add esp, 0000000C
:00405BF5 83F806                  cmp eax, 00000006 <-----------reg.key的位数比较
:00405BF8 7417                    je 00405C11
      大家看到了吧,一般的长度比较,都是用ecx作计数器来进行的,可是这个程序有点不一样,它是把
      长度的一半作为比较依据。(小弟在此耗时1个小时,才搞清楚eax是什么东东,5555...真丢人!)
      OK!长度的地雷已经排除了,下面进入正式的注册码计算阶段:
:00405C6F 6A06                    push 00000006
:00405C71 51                      push ecx
:00405C72 E869FCFFFF              call 004058E0      <---------关键算法所在处
:00405C77 83C40C                  add esp, 0000000C
:00405C7A 85C0                    test eax, eax
:00405C7C 752B                    jne 00405CA9
      大家千万不要被这个TEST EAX,EAX所迷惑,在这个关键算法的CALL里,出口的EAX总是为1。也就是
      说,程序在此总是会往下面跳,跳到哪?呵呵....当然就是下面的这一段关键比较了:
:00405CA9 33C0                    xor eax, eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405CBE(C)
|
:00405CAB 8A540408                mov dl, byte ptr [esp+eax+08]      --------------------
:00405CAF 8A8C0408010000          mov cl, byte ptr [esp+eax+00000108]
:00405CB6 3AD1                    cmp dl, cl  <-----------看到注册码的比较了吗?
:00405CB8 75C4                    jne 00405C7E
:00405CBA 40                      inc eax
:00405CBB 83F806                  cmp eax, 00000006  循环6次,正好比完12位数,只要有一个 
:00405CBE 72EB                    jb 00405CAB        不对,就...嘿嘿....------------------
:00405CC0 8D4C2400                lea ecx, dword ptr [esp]
:00405CC4 C7842410020000FFFFFFFF  mov dword ptr [esp+00000210], FFFFFFFF
:00405CCF E8F10A0100              call 004167C5
:00405CD4 8B8C2408020000          mov ecx, dword ptr [esp+00000208]
      我在开始的时候说的改动一个字节注册,到了这时候,大家应该都明白了吧?就是把405CB8处的JNE
      改成JE就OK了!可惜....呵呵...不过,这点困难还难不到我们,我们既然找到了关键算法的CALL
      那我们能不能写出注册机呢?(其实,这个时候,在内存窗口已经可以看到注册码了)。
      出于长度的原因,软件的算法分析及注册机的编写我就写到这篇文章的(下)中去了!

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功