楼主: 〇〇

终于改出了能超过4000字的unwrap

[复制链接]
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
51#
 楼主| 发表于 2009-6-22 15:39 | 只看该作者
原帖由 WENWEN 于 2009-6-21 09:41 发表
我认为不存在什么第二张替换表.  能够解prtvlob.plb,也就是dbms_lob
另外, 可以探讨技术, 但最好不要将替换表内容公开

用c语言解出了#31楼无法解出的prvtlob.plb,确认替换表没有问题,可能是文件开头的
/*
||
|| dbms_lob PACKAGE BODY
||
*/导致的问题,其他无法解出的也可能是截取base64编码段出错。

temp.7z.rar

120.53 KB, 下载次数: 90

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
52#
 楼主| 发表于 2009-6-22 15:44 | 只看该作者
原帖由 rollingpig 于 2009-6-15 11:23 发表
开始==> abcd/abcd
结束==> "/"

下一步准备按你的思路判断

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32
53#
发表于 2009-6-22 15:46 | 只看该作者
核心包 KUPF$FILE  的包体部分只能部分解出,剩余部分出错! (即使老毛子的东西也解不开)
我的考虑是:因为前面的东西是对的,只是后面出现解码错误;因为压缩是zlib数据流格式,先lz77再霍夫曼,会不会问题出在这上面!?

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
54#
 楼主| 发表于 2009-6-22 16:45 | 只看该作者
原帖由 truezxd 于 2009-6-22 15:46 发表
核心包 KUPF$FILE  的包体部分只能部分解出,剩余部分出错! (即使老毛子的东西也解不开)
我的考虑是:因为前面的东西是对的,只是后面出现解码错误;因为压缩是zlib数据流格式,先lz77再霍夫曼,会不会问题出在这上面!?

不能赞同,见附件
解压失败的原因是文本占了16行, 57568字节,varchar只能存4000字节,因此有的换行了,我用ultraedit替换^p^p为空后,成功解出
字符串太大了,堆不够用,我用/Zm400才编译成功的。把输出console的窗口属性也改成9999行,居然printf还没有崩溃。。。

kupffile_body.txt

99.25 KB, 下载次数: 40

kupffile.txt

5.87 KB, 下载次数: 36

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
55#
 楼主| 发表于 2009-6-23 13:09 | 只看该作者
int main(argc, argv)
int argc;
char *argv[];
{
    FILE *fp;
    FILE *fo;
    char buf[256];
    char src[]=/*"8BgMHdmA3Qg9IbJmntlZoZQoHwcwg5nnm7+fMr2ywFxakaamb40d1Q==";*/ /*prvtlob.plb的编码内容*/
        "";
    char tra[]="**CE"; /*sys.idltranslate表内容存到字符数组"*/
    char *b64;
    char *dec;
    int i=0;
    int j=0;
    int flag=0;
    int len_src;
    int len_wrap;
    int pos=0;
    int size=0;
    Byte *compr, *uncompr;
    uLong comprLen = 250000*sizeof(int); /* don't overflow on MSDOS */
    uLong uncomprLen = comprLen;
   
    b64=(char *) malloc(2560000);
    dec=(char *) malloc(2560000);
    /*
    printf("src:\t%s\n",src);
    printf("b64:\t%s\n",encode(src,&b64));
    printf("dec:\t%s\n",decode(b64,&dec));
    */
    for (i=0;i<256;i++) /*将16进制恢复成字符*/
    {
        tra[i]=((tra[i*2]-'A'>=0?tra[i*2]-'A'+10:tra[i*2]-'0')&0xF)<<4|
            ((tra[i*2+1]-'A'>=0?tra[i*2+1]-'A'+10:tra[i*2+1]-'0')&0xF);
            /*   strncpy(dec,tra+i*2,2);dec[2]='\0';
        tra[i]=strtol(dec,NULL,16);*/
        /*printf("%02X\t",tra[i]&0xFF);*/
    }
   
    /*printf("%x,%x",tra[0x30],tra[0x83]);*/
    if(NULL==(fp=fopen("prvtrctf.plb","rt")))
        exit(1);
    if(NULL==(fo=fopen("testout.sql","wt")))
        exit(1);
    while(1) /* read many blocks */
    {
        if(feof(fp))
            break;
        /*fseek(fp,pos)*/
        while(!feof(fp))
        {
            fgets(buf,255,fp);
            if(strcmp(buf,"abcd\n")==0)
            {
                flag=1;
            }
            else
            {
                if(flag==1)
                {
                    flag=2;
                    /*fscanf(fp,"%s",);*/
                    printf("type code:\t%s",buf); /*type code:9 package,d body*/
                }
                else if(flag==2)
                {
                    sscanf(buf,"%x %x\n",&len_src,&len_wrap);
                    printf("len_src:\t%d\tlen_wrap:\t%d\n",len_src,len_wrap); /*store base64 code to dec*/
                    printf("freadsize:%d\t",size=fread(dec,1,len_wrap,fp));
                    if(size==len_wrap)
                    {
                        dec[len_wrap]='\0';
                    }
                    else
                    {
                        printf("fread err\n");
                        exit(1);
                    }
                    /*printf("BASE64:\t %s",dec);*/
                    pos=ftell(fp);
                    flag=0;
                    break;
                }
            }
        }
        
        for(i=0,j=0;i<len_wrap;i++) /*trim \n*/
        {
            if(dec[i]!='\n')
                b64[j++]=dec[i];
        }
        
        b64[j]='\0';
        decode(b64,&dec);
        printf("read ok\n");
        compr    = (Byte*)calloc((uInt)comprLen, 1);
        uncompr  = (Byte*)calloc((uInt)uncomprLen, 1);
        printf("-->%lx,%lx,%lx,%lx\n",b64,dec,compr,uncompr);
        
        printf("b64 size:\t%d,%d\n",j,strlen(b64));
        
        for (i=20;i<j/4*3;i++)  /*translaate*/
        {
            compr[i-20]=tra[dec[i]&0xFF]&0xFF;
        }
        /* compr and uncompr are cleared to avoid reading uninitialized
        * data and to ensure that uncompr compresses well.
        */
        if (compr == Z_NULL || uncompr == Z_NULL) {
            printf("out of memory\n");
            exit(1);
        }
        
        test_inflate(compr, comprLen, uncompr, uncomprLen); /*从第21字节开始解压*/
        /*uncompr[21]='\0';*/
        uncompr[1000000-1]='\0';
        printf("unzip size:%d\n",strlen(uncompr));
        /*  printf("inflate:\t%s",uncompr);*/
        fprintf(fo,"%s",uncompr);
        /*free(compr);*/
        free(uncompr);
        printf("-->%lx,%lx,%lx,%lx\n",b64,dec,compr,uncompr);
    }
    free(b64);
    free(dec);
    fclose(fp);
    fclose(fo);
    return 1;
}
原解码函数动态申请空间,改成下面的
char *decode(const char *cptr,char **rptr)
{
        char *res;
        int clen,len;
        static int init=0;
        if(cptr==NULL)
                return NULL;
        len=strlen(cptr);
        if(len%4)  /*编了码的字符绝对是4的倍数*/
                return NULL;
        if(!init)
          {
                init=1;
                base64_tableinit();
          }
        clen=len/4;
       /* if((res=malloc(len-clen))==NULL)
                return NULL;*/
                res=*rptr;
        for(*rptr=res;clen--;)
          {
                *res=base64_table[*cptr++]<<2&0xfc;         /*cptr后六位移动到最高位*/
                *res++|=base64_table[*cptr]>>4;               /*跟着下个字符低两位给res低两位*/
                                *res=base64_table[*cptr++]<<4&0xf0;               /*填充res高四位其它清0*/
                *res++|=base64_table[*cptr]>>2&0x0f;    /*字符前六位移到低六位取低四位*/
                *res=base64_table[*cptr++]<<6;
                if(*cptr!='=')                                                 /*=号忽略*/
                   *res++|=base64_table[*cptr++];
          }
        return *rptr;
}

[[i] 本帖最后由 〇〇 于 2009-6-23 13:37 编辑 [/i]]

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
56#
 楼主| 发表于 2009-6-23 14:19 | 只看该作者
完成了。
用法
base plb_filename sql_filename
害怕马的筒子,可以自己编译

base.7z.rar

35.26 KB, 下载次数: 226

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
57#
 楼主| 发表于 2009-6-23 14:24 | 只看该作者
存在问题:只能解wrap过的代码,如果plb文件中还有未wrap过的代码,则明码不能解(明码也不需要解)

[ 本帖最后由 〇〇 于 2009-6-23 14:38 编辑 ]

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
58#
 楼主| 发表于 2009-6-23 16:06 | 只看该作者
56#只能解plb文件
如果是select text from dba_source的内容
可以spool出来(也可以用d.c.b.a的文本导出工具)
然后把base64代码中连续2个\n替换成空
再然后用base.exe

使用道具 举报

回复
论坛徽章:
69
奥运会纪念徽章:射击
日期:2016-09-06 23:08:25马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:112013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2013-02-18 11:25:01迷宫蛋
日期:2012-12-25 17:17:41复活蛋
日期:2012-12-21 17:41:38奥运会纪念徽章:沙滩排球
日期:2012-10-27 14:59:31ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32
59#
发表于 2009-6-23 16:11 | 只看该作者
厉害

使用道具 举报

回复
论坛徽章:
63
版主7段
日期:2012-05-15 15:24:11itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-08 15:16:50itpub13周年纪念徽章
日期:2014-10-10 14:34:59马上加薪
日期:2015-01-08 15:39:192015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
60#
发表于 2009-6-23 16:30 | 只看该作者
good.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表