• 标 题:申请加入BCG破文3--加密精灵EncryptGenie22注册码破解及注册机制作 (5千字)
  • 作 者:三根毛
  • 时 间:2001-10-28 2:36:03
  • 链 接:http://bbs.pediy.com

加密精灵(EncryptGenie)2.2 注册码破解及注册机制作
==============================================================
作者:maomao
软件:加密精灵(EncryptGenie)2.2
    加密精灵(EncryptGenie)2.2 版是一个非常方便和容易使用的加密文件的软件,它使用CES ( Chaos Encryption Standard )加密算法加密。
下载:http://www.encryptgenie.com/cn/download/EncryptGenie.exe(632k)
说明:本软件是一款比较优秀的国产加密软件,而且只有20元的注册费,本破解的目的在于对解密技术探讨,希望大家能支持国产正版软件。

工具:Trw2000 v1.23
日期:2001-10-28
==============================================================
  下载安装后未注册版有两个功能限制:
  1. 未注册版最多只可以输入16个字符长的密码。注册版最多可以输入128个字符长的密码。
  2. 未注册版软件在每次启动时,都显示一个启动画面。注册版可以移去这个启动画面。

破解过程:
    用TRW2000载入EncryptGenie,程序运行后,弹出对话框,要求注册。输入大名maomao,再随便输入一些东东作为注册码,先不要按“注册”按钮。按下CTRL+N,被TRW中断,在TRW中输入bpx getwindowtexta(windows读取对话框中text的函数),按F5回到EncryptGenie,现在按下“注册”,程序立刻被TRW拦截。在TRW中输入承bd *,再输入pmodule,现在已经来到EncryptGenie的领空:
==============================================================
0177:0040151D  CALL    EDI
0177:0040151F  PUSH    BYTE +1E        <=====光标停在这一行
0177:00401521  PUSH    DWORD 0043EA64
0177:00401526  PUSH    DWORD 0415
0177:0040152B  PUSH    EBX
0177:0040152C  CALL    ESI
0177:0040152E  PUSH    EAX
0177:0040152F  CALL    EDI
0177:00401531  PUSH    BYTE +02
0177:00401533  PUSH    BYTE +00
0177:00401535  CALL    00418D70
0177:0040153A  PUSH    BYTE +00
0177:0040153C  PUSH    DWORD 0043EA64 <=====下D 43EA64可看到输入的注册码
0177:00401541  PUSH    DWORD 0043F32C <=====下D 43F32C可看到我的大名'maomao'
0177:00401546  CALL    004288E0      <=====计算注册码的call
0177:0040154B  ADD      ESP,BYTE +14  ┓
0177:0040154E  NEG      EAX            ┃ 如果注册码正确,上面的call将返回EAX=0,
0177:00401550  SBB      EAX,EAX        ┃ 变换后为EAX=1   
0177:00401552  INC      EAX            ┛
0177:00401553  MOV      [0043F778],EAX
0177:00401558  JZ      NEAR 004015FA  <=====执行到这里,被跳走你就完了
0177:0040155E  MOV      EDI,0043F32C
0177:00401563  OR      ECX,BYTE -01
0177:00401566  XOR      EAX,EAX
0177:00401568  REPNE SCASB
==============================================================
    在0177:00401546  CALL    004288E0 计算注册码的一行上按F9下断点,再按F5返回EncryptGenie,这时对话框中的注册码被清空。重新输入一些数字,按“注册”按钮后,TRW中断在0177:00401546  CALL    004288E0这一行。用F8跟进去:
==============================================================
0177:004288E0  MOV      EAX,[ESP+04]
0177:004288E4  SUB      ESP,BYTE +28
0177:004288E7  TEST    EAX,EAX
0177:004288E9  PUSH    EDI
0177:004288EA  JZ      00428959
0177:004288EC  MOV      EDI,[ESP+34]
0177:004288F0  TEST    EDI,EDI
0177:004288F2  JZ      00428959
0177:004288F4  LEA      ECX,[ESP+04]
0177:004288F8  PUSH    ECX
0177:004288F9  PUSH    EAX
0177:004288FA  CALL    00428970
0177:004288FF  ADD      ESP,BYTE +08
0177:00428902  TEST    EAX,EAX
0177:00428904  JZ      00428953
0177:00428906  PUSH    EBX
0177:00428907  PUSH    ESI
0177:00428908  LEA      ESI,[ESP+0C] <====这里用D ESI就可看到真正的注册码'BmbqpetshwvkzynD'
0177:0042890C  MOV      EAX,EDI      <====这里用D EDI可看到输入的注册码'1234567890'
0177:0042890E  MOV      DL,[EAX]  ┓
0177:00428910  MOV      BL,[ESI]  ┃比较注册码的第一字节
0177:00428912  MOV      CL,DL      ┃
0177:00428914  CMP      DL,BL      ┛
0177:00428916  JNZ      00428936  <====不相同就跳走
0177:00428918  TEST    CL,CL 
0177:0042891A  JZ      00428932
0177:0042891C  MOV      DL,[EAX+01]┓
0177:0042891F  MOV      BL,[ESI+01]┃比较第二字节
0177:00428922  MOV      CL,DL      ┃
0177:00428924  CMP      DL,BL      ┛
0177:00428926  JNZ      00428936  <====不相同就跳走
0177:00428928  ADD      EAX,BYTE +02
0177:0042892B  ADD      ESI,BYTE +02
0177:0042892E  TEST    CL,CL
0177:00428930  JNZ      0042890E  <====比较未结束则继续比较
0177:00428932  XOR      EAX,EAX
0177:00428934  JMP      SHORT 0042893B
==============================================================
    OK,整理一下,用户名:maomao,注册码:BmbqpetshwvkzynD
==============================================================
注册机制作:
    运行注册机编写器(作者主页http://www.365hz.net),按F8或选择菜单“其它”->“另类注册机”,在弹出的设置框中,进行如下设置:
1、按“浏览”按钮,选择EncryptGenie.exe;
2、按下方“添加”铵钮,添加如下数据:
      中断地址:42890E      <=====指定在正确注册码算出后中断(请参阅上边代码)
      中断次数:1         
      第一字节:8A          <=====MOV  DL,[EAX]的指令的第一个机器代码
      指令长度:2          <=====被中断的指令的代码长度
3、在右边注册码选项中选择“内存方式”,并勾选其下方的单选框,选择ESI(注册码被放在ESI所指的内存中);
4、设置用户信息(你的相关资料啦);
5、按“生成”,输入生成的EXE文件名(放到主程序同一目录下)。
    运行一下你生成的文件,EncryptGenie被自动运行,并要求注册,输入用户名,注册码随意,按“注册”按钮,OK,真正的注册码就跳出来了!!!

哇,写得手有点累了(刚狂聊了3小时),好了,收工~~~~
==============================================================