• 标 题:我的破解心得(12) (1千字)
  • 作 者:chcw
  • 时 间:2001-3-13 18:13:43
  • 链 接:http://bbs.pediy.com

破解程序:
    SmartCheck 5.0安装程序

破解工具:
    ISDCC 1.0

破解者:
    chcw

    现在,有许多程序使用Install Shield来制作它们的安装程序,而且在安装
时就要求输入注册码。这一类程序的注册过程主要是由Install Shield来控制的,
Install Shield将其安装过程的信息存放在编译后的脚本文件Setup.ins中。因此,
只需要对Setup.ins文件进行反编译,即可洞悉Install Shield的整个安装过程。
    ISDCC就是这样一个反编译工具,它能反编译Install Shield 5.1以下版本生
成的所有的脚本程序。下面以SmartCheck 5.0的安装程序为例,介绍如何利用该
工具,实现注册码的破解。

1. 用ISDCC对Install Shield的安装脚本Setup.ins进行反编译,并将结果保存在
  Setup.tmp文件中:
    ISDCC Setup.ins > Setup.tmp
2. 在Install Shield的安装程序中,字符串比较函数是StrCompare()。用Ultra Edit
  打开Setup.tmp文件,查找串"StrCompare"。
3. 在label140处,我们发现了一句可能是比较注册码的语句:
    label140:
            StrCompare(lString0, "002082840001");
            lNumber1 = LAST_RESULT = 0;
            if (lNumber1 = 0) then
                goto label141;
            endif;
            return(1);
4. 在该部分程序的上面,还有一些产生lString0的语句:
    label139:
            StrSub(lString1, pString0, 0, 4);    <-取pString0中子串, 从0开始,长为4
            StrSub(lString2, pString0, 5, 6);    <-取pString0中子串, 从5开始,长为6
            StrSub(lString3, pString0, 12, 2);    <-取pString0中子串, 从12开始,长为2
            lString6 = lString1 + lString2;
            lString0 = lString6 + lString3;
            StrFind(lString0, "-");            <-查找字符'-'
            lNumber1 = LAST_RESULT >= 0;
            if (lNumber1 = 0) then
                goto label140;
            endif;
            return(0);
5. 由于反编译后的语句几乎与高级语言完全相同,因此我们很容易猜想出label139段程序
  的功能,并得到pString0的形式为:
        "0020-828400-01"
6. 在安装过程中输入Serial="0020-828400-01",注册顺利通过。