阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 29392|回复: 210

[转帖] LGD(花忆容作品)通达OA破解教程(共同完善、探求中)..

  [复制链接]
  • TA的每日心情
    擦汗
    2020-4-5 13:10
  • 签到天数: 1112 天

    [LV.10]以坛为家III

    发表于 2014-7-3 14:57:26 | 显示全部楼层 |阅读模式
    本帖最后由 ph1378 于 2014-7-31 14:24 编辑

    lgd(花忆容作品)通达OA破解教程
    (送给OA爱好者)
    *********
    破解前期工作:
    1、官方网站下载通达安装程序并安装;
    2、复制webroot至其他位置;
    3、使用黑刀dezender反编复制到其他位置的webroot目录;

    破解:
    1、登入oa系统,进入注册页面,查看注册页面的源文件提交信息的文件为inc/reg_submit.php。
    2、查看反编后的reg_submit.php文件内容。
    reg_submit.php内容分析:
    if ( $ATTACHMENT_NAME != "tdkey5.dat" )
    {
            message( _( "注册失败" ), _( "注册文件名错误" ), "error", $BUTTON_BACK );;
            exit( );
    }
    要求上传的注册文件名必须是tdkey5.dat,就是要求制作注册时,生成的注册文件最好是tdkey5.dat,不使用的话,后面也要手动改为tdkey5.dat。(2013adv版为tdkey7.dat)
    $RESULT = get_reg_info( $REGISTER_CODE, $REG_INFO );
    if ( $RESULT !== TRUE )
    {
            message( _( "注册失败" ), $RESULT, "error", $BUTTON_BACK );
            exit( );
    }
    关键所在,从授权文件中验证注册信息,不为true则注册文件错误。那这个函数的内容在哪呢?我们看到这个文件就只包含了一个文件
    include_once( "inc/td_core.php" );
    我们要从 "inc/td_core.php" 文件中查看以上函数体的具体内容。

    td_core.php中get_reg_info()函数的内容为:
    function get_reg_info( $REG_CODE, &$REG_INFO )
    {
        global $ROOT_PATH;
        if ( strlen( $REG_CODE ) != 256 )
        {
            return _( "注册文件无效" );
        }
        $DAT = @file_get_contents( $ROOT_PATH."inc/tech.dat" );
        if ( $DAT === FALSE )
        {
            return _( "读取数据文件错误" );
        }
        $DAT = td_authcode( $DAT, "DECODE", "b173b62a58d93b332c36116ff7df9d2b" );
        if ( strlen( $DAT ) < 3000 )
        {
            return _( "数据文件无效" );
        }
        if ( !function_exists( "openssl_pkey_get_public" ) )
        {
            return _( "请联系管理员安装openssl扩展库" );
        }
        $KEY = openssl_pkey_get_public( $DAT );
        if ( $KEY === FALSE )
        {
            return _( "解析数据文件失败" );
        }
        $REG_CODE = pack( "H*", $REG_CODE );
        $RESULT = openssl_public_decrypt( $REG_CODE, $REG_INFO, $KEY );
        if ( $RESULT === FALSE )
        {
            return _( "注册文件无效,请重新获取注册文件" );
        }
        return TRUE;)
    }
    我们来看这个函数,主要使用的是php的系统函数openssl函数,这些函数包含在php的扩展中,要在php.ini设置打开,相关内容,
    请自行参考php支持openssl的相关资料。
    $DAT = td_authcode( $DAT, "DECODE", "b173b62a58d93b332c36116ff7df9d2b" );
    这个语句实际是将"inc/tech.dat" 的内容解码后报存在$DAT(注意php是大小写敏感的)中,大家可以用echo语句输出变量的内容!
    查看一下文件的真实内容,我们看到这个文件实际就是一个cer证书,加密方式是rsa,我们在往下看;
    $KEY = openssl_pkey_get_public( $DAT );
    这个是从上面的证书中获取rsa公钥的内容"
    $REG_CODE = pack( "H*", $REG_CODE );
    $RESULT = openssl_public_decrypt( $REG_CODE, $REG_INFO, $KEY );
    这两句,上面那句是对$REG_CODE 的内容做个转换包装一下,相应的反包装函数是unpack,具体用法请参考相关函数说明;
    下面这句是用$key解密$REG_CODE,解密后的内容存放在$REG_INFO中,函数参考php手册,就是进行rsa解码。
    至此我们可以看出2011版的2010版的注册文件加密实际变化不大,2010版是直接用自己写的rsa函数进行,rsa加、解密,2011、2013版是用的openssl扩展中的函数进行rsa加、解密。)

    那么下一步我们只要能够造个注册文件能够进行rsa解码就可以了,当然解码后的内容也有要求,我们在下一讲中继续。

    现在我们有两个思路:
    1.修改td_core.php文件中的get_reg_info()函数体的内容,直接按要求返回需要的结果。
    2.不修改td_core.php文件中的内容,使用官方原文件,那我们就根据get_reg_info()函数的内容造注册机来达到通过注册的目的。自120416后的破解采用的是第一种方案,其他人的破解也基本是采用这一方案;从2010版起的原破解采取是第二种方案。

    优缺点:
    第一种方案:这种方法基本是在dezend文件的基础上进行的,修改td_core.php具有很强的灵活性,破解也相对简单,但Dezend的文件不是完全正确,需要人工修改,这样就需要对td_core.php的代码进行检查,同时也要进行大量的测试,后期工作量大,bug的几率也大。
    第二种方案:这种方法不改变原系统代码,具有良好的系统稳定性,保持了原汁原味,bug基本都是官方存在的,后期测试量小,但需要投入大量精力编写相应的注册机,系统注册算法改变后还要重新进行编写,前期的工作量比较大。
    所有具体哪种方法好,就看各人的看法了。


    **********
    游客,如果您要查看本帖隐藏内容请回复


    2013ADV(0416版)
    TD_core.php下内容:
    function get_reg_info( $REG_CODE, &$REG_INFO )
    {
            if ( strlen( $REG_CODE ) == 256 )
            {
                    $KEY_FILE = MYOA_ROOT_PATH."inc/tech.dat";
            }
            else if ( strlen( $REG_CODE ) == 300 && stristr( PHP_OS, "Linux" ) )
            {
                    $KEY_FILE = MYOA_ROOT_PATH."inc/tech_box.dat";
            }
            else
            {
                    return _( "注册文件无效" );
            }
            $KEY = "";
            $RESULT = tdrsa_get_public_key_from_file( $KEY_FILE, "c8fc2dbb8b55442c0a18a8cb495fd338", $KEY );
            if ( $RESULT !== TRUE || !is_resource( $KEY ) )
            {
                    return $RESULT;
            }
            $REG_CODE = pack( "H*", substr( $REG_CODE, 0, 256 ) );
            $RESULT = tdrsa_public_decrypt( $REG_CODE, $REG_INFO, $KEY );
            if ( $RESULT !== TRUE || $REG_INFO == "" )
            {
                    return _( "注册文件无效,请重新获取注册文件" );
            }
            return TRUE;
    }

    ****7.21.140627
    function get_reg_info( $REG_CODE, &$REG_INFO )
    {
            if ( strlen( $REG_CODE ) == 256 )
            {
                    $KEY_FILE = MYOA_ROOT_PATH."inc/tech.dat";
            }
            else if ( strlen( $REG_CODE ) == 300 && stristr( PHP_OS, "Linux" ) )
            {
                    $KEY_FILE = MYOA_ROOT_PATH."inc/tech_box.dat";
            }
            else
            {
                    return _( "注册文件无效" );
            }
            $KEY = "";
            $RESULT = tdrsa_get_public_key_from_file( $KEY_FILE, "c8fc2dbb8b55442c0a18a8cb495fd338", $KEY );
            if ( $RESULT !== TRUE || !is_resource( $KEY ) )
            {
                    return $RESULT;
            }
            $REG_CODE = pack( "H*", substr( $REG_CODE, 0, 256 ) );
            $RESULT = tdrsa_public_decrypt( $REG_CODE, $REG_INFO, $KEY );
            if ( $RESULT !== TRUE || $REG_INFO == "" )
            {
                    return _( "注册文件无效,请重新获取注册文件" );
            }
            return TRUE;
    }





    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

    发表于 2016-2-18 10:35:25 | 显示全部楼层
    原系统代码,具有良好的系统稳定性,保持了原汁原味,bug基本都是官方存在的,后期测试量小,但需要投入大量精力编写相应的注册机,系统注册算法改变后还要重新进行编写,前期的工作量比较大。
    所有具体哪种方法好,就看各人的看法了。
    - 本文出自阳光网驿--企业信息化专家,原文地址:http://bbs.sunwy.org/thread-186455-1-1.html
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2019-10-17 13:02
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    发表于 2018-3-20 21:47:24 | 显示全部楼层
    学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习学习
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    奋斗
    2023-4-3 09:43
  • 签到天数: 775 天

    [LV.10]以坛为家III

    发表于 2017-3-5 14:01:55 | 显示全部楼层
    谢谢分享个                                                               
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    慵懒
    2018-1-15 13:19
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2014-7-3 20:41:52 | 显示全部楼层
                           看不太懂,最好写的明白点哦。
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    无聊
    4 小时前
  • 签到天数: 2108 天

    [LV.Master]伴坛终老

    发表于 2014-7-4 09:47:45 | 显示全部楼层
    不太懂,最好写的明白点哦。
    - 本文出自阳光网驿--企业信息化专家,原文地址:http://bbs.sunwy.org/thread-186455-1-1.html
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    郁闷
    2017-2-15 15:58
  • 签到天数: 584 天

    [LV.9]以坛为家II

    发表于 2014-7-4 17:59:56 | 显示全部楼层
    谢谢楼主分享这么NB的经验!
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    慵懒
    2014-9-29 14:42
  • 签到天数: 46 天

    [LV.5]常住居民I

    发表于 2014-7-4 19:32:36 | 显示全部楼层
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    奋斗
    前天 18:34
  • 签到天数: 332 天

    [LV.8]以坛为家I

    发表于 2014-7-5 17:56:34 手机频道 | 显示全部楼层
    谢谢楼主无私详尽的讲解,再次感谢
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情

    2022-12-12 11:00
  • 签到天数: 115 天

    [LV.6]常住居民II

    发表于 2014-7-5 22:17:19 | 显示全部楼层
    期待下一讲哦                                            
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    擦汗
    2020-4-5 13:10
  • 签到天数: 1112 天

    [LV.10]以坛为家III

     楼主| 发表于 2014-7-7 16:49:59 | 显示全部楼层
    通达技术交流 发表于 2014-7-5 22:17
    期待下一讲哦

    共同探求。。。。。。。。。。。。。。。。。
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    无聊
    2014-8-27 11:20
  • 签到天数: 43 天

    [LV.5]常住居民I

    发表于 2014-7-7 16:55:28 | 显示全部楼层
    谢谢楼主无私详尽的讲解,再次感谢
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    慵懒
    前天 08:18
  • 签到天数: 2374 天

    [LV.Master]伴坛终老

    发表于 2014-7-7 21:40:56 | 显示全部楼层
    谢谢分享,仔细拜读大作!               
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表