• 标 题: 彩虹狗GS-MH破解-浅谈狗的破解方法
  • 作 者:yaoyuan[CCG]
  • 时 间:2005-01-12 16:52

看过网上多篇关于软件狗破解的文章,虽不乏精品,但大多是属于找到出错对话框,想办法跳过之类文章,实在缺乏技术含量,且有误人之嫌。软件狗不是这样解的!这样的破解首先有两大问题,第一:软件是否在按有狗流程运行?第二:软件狗数据丢失。

    我们先看看彩虹GS-MH狗,这个狗的API定义如下:

所有数据都定义在MH_DLL_PARA中
typedef struct _MH_DLL_PARA
{
  WORD   Command;  //命令码
  WORD  Cascade;  //级联顺序号
  WORD  DogAddr;  //首地址
  WORD  DogBytes;  //操作字节数
  DWORD  DogPassword;  //读写密码
  DWORD   DogResult;  //变换结果
  DWORD   NewPassword     //新密码
        BYTE    DogData[200];  //输入输出数据
} MH_DLL_PARA;


结构成员Command是命令码,定义如下
DogCheck  1  查狗
ReadDog    2  读狗
WriteDog  3  写狗
DogConvert  4  变换
GetCurrentNo  5  取流水号
EnableShare  6  允许共享
DisableShare  7  停止共享
SetDogCascade   8       设置级联码       
SetNewPassword  9       设置新密码


破解关键是200字节数据和狗变换,也就是2号功能和4号功能。和以前讨论过的R4狗一样,这个狗的API也是多功能函数,根据参数完成不同功能。此文重在讨论破解方法而不是具体怎么破解,所以不给出怎么找到狗操作的CALL地址以及相应数据地址方法。

找到任何一个读狗的CALL,将DogAddr改为0,DogBytes改为200,读完狗在DogDat就可以得到200字的狗内数据,破解时将读狗操作转为查这个数据表就可以了。

关于4号功能,如果频繁使用,那一定加密程序中会有一个码表,如果使用不多,可以直接记录变换前后数据形成自己的码表。

关于写狗等操作的处理相对简单,不再赘述。

当完成上述工作后,我们的破解程序一定是按照有狗时的流程在运行,而不会是被强行修改执行。

简单举个例子,比如我的加密程序要用到一个公式:y=k*x+1,而加密者将常量K放到了狗中,调用公式前读狗,成功返回数据及一个标志,前文提到的爆破方法修改程序流程,必然导致得到错误的y值!

    所以对软件狗的破解,了解其API是绝对第一重要的,在API中能看到程序与狗的数据交换。(除外S4,R5这些将程序放到狗中执行的新一代加密狗),追踪到狗操作的API,整理出(或者无狗时猜测出)重要的数据,完全仿真API操作,这才是我认为软件狗的破解方法。

  • 标 题: 答复
  • 作 者:orchid88
  • 时 间:2005-01-12 17:10

彩虹狗是比较令人头痛的(拿最新的3.4版来说)
1、狗外壳保护做得很好,无狗很难脱壳,有狗脱壳虽然不难,但是iat很难修复,无法跨平台甚至是跨机器使用。
2、大量的花指令比较烦人。
3、虽然有api,但是读狗子程序还是不容易找到
4、读狗的参数(即楼主说的 MH_DLL_PARA)在程序中存放的位置很难找,请楼主介绍一下经验。谢谢!
  我虽然解过4套彩虹狗软件,但都是带狗破解。有一个还修复不了iat。碰到过两套无法解的,有一套是外壳(多重壳,最里面一层是狗外壳)脱掉后无法修复运行(郁闷!);还有一套是找不到读狗函数。
请楼主多多指教!
:) :)

  • 标 题: 答复
  • 作 者:yaoyuan[CCG]
  • 时 间:2005-01-12 17:28

1、狗外壳:确实狗外壳做得比较好,IAT也很难修复,我自己也有一个不能修复的:),不过nig现在已经有很好的办法处理,现在还不便公开。
2、一切花指令都是纸老虎!
3、当你来到花指令时,读狗子程序就在你面前了
4、MH_DLL_PARA在有些时候会定义成全局变量,这时就麻烦一点。不过在驱动中还是以这个数据结构的形式存在的。