标题: 编写加解密插件时遇到的问题[已解决]
keakon
会员
Rank: 1
TomoFansClub会长


UID 153
精华 0
积分 273
帖子 180
阅读权限 5
注册 2007-4-8
 
发表于 2007-9-19 10:18  资料  短消息  加为好友 
编写加解密插件时遇到的问题[已解决]

只写主体部分吧。很简单的加密,就是把前100个字节与1异或,但这都没法正常解密。
加密:

extern "C" void __stdcall XP3ArchiveAttractFilter_v2(
        unsigned __int32 hash,
        unsigned __int64 offset, void * buffer, long bufferlen)
{
                for (int index = 0; index < bufferlen; ++index)
                {
                        if (index < 100)
                                ((unsigned char*)buffer)[index] ^= 1;
                }

}

解密:

void TVP_tTVPXP3ArchiveExtractionFilter_CONVENTION
        TVPXP3ArchiveExtractionFilter(tTVPXP3ExtractionFilterInfo *info)
{

        if(info->SizeOfSelf != sizeof(tTVPXP3ExtractionFilterInfo))
        {

                TVPThrowExceptionMessage(TJS_W("Incompatible tTVPXP3ExtractionFilterInfo size"));

        }

        for(tjs_uint index = 0; index < info->BufferSize; ++index)
        {

                if (index < 100)

                        ((unsigned char *)info->Buffer)[index] ^= 1;
        }
}

去掉if (index < 100)就能正常解密,难道不能获取当前偏移量?
能解释下下文吗?

QUOTE:
        此外,解密函数(被指定为 TVPSetXP3ArchiveExtractionFilter 的函数)
        要能够对一个文件中任意偏移值开始的,任意大小的数据包进行解密,此外
        必须保证每次调用解密函数都能够在调用返回的时候得到结果。也就是说,
        超过这个界限的加密方法,例如说“交换字节顺序”一类依赖于前后字节的
        加密方法都不能够被使用。
        这些限制对于加密函数也一样适用。
        
        从现实的角度来说,大概可以理解为只能够使用“对每个字节进行异或、加
        减”一类的算法。
        但是,因为每个字节、每个数据块都拥有不同的偏移值,每个文件拥有不同
        的散列(Hash)值,所以可以按照偏移值、散列值进行一些局部性的加密,
        也就是不同的字节、不同的文件,可以使用不同的加密方式。

[ 本帖最后由 keakon 于 2007-9-19 18:21 编辑 ]





在我眼中,只要萌的都是loli。不管她有多老,是男的也好,是机器人也罢,就算没有实体,我也一定要萌上她!
智代after PS2汉化移植完毕
顶部
Miliardo
幕后黑手
Rank: 4


UID 1
精华 0
积分 379
帖子 339
阅读权限 255
注册 2006-12-3
 
发表于 2007-9-19 12:55  资料  短消息  加为好友 
我记得是能获取偏移量的= =
楼上的错误在于,认为每一个递交给解密函数的数据包都是从文件头部开始的= =
但实际上,打包时的分块和解包时的分块偏移值和块大小都不一样的可能性也是存在的。





そんな世界を 僕らはゆく
誰かのために また目覚める
誰がいても 誰もいなくても そう思うよ
顶部
keakon
会员
Rank: 1
TomoFansClub会长


UID 153
精华 0
积分 273
帖子 180
阅读权限 5
注册 2007-4-8
 
发表于 2007-9-19 14:53  资料  短消息  加为好友 
也就说解密时,Buffer并不对应一个文件?

QUOTE:
                tTVPXP3ExtractionFilterInfo 的成员如下
                * SizeOfSelf        : 结构体自身的大小
                * Offset            : "Buffer" 成员所指向的数据偏离这个文件头部的偏移值
                * Buffer            : 数据本体
                * BufferSize        : "Buffer" 成员所指向的数据的大小(字节单位)
                * FileHash          : 解密后文件内容的32位 Hash (散列)值

但是并不知道它打包的顺序,也就不清楚文件是从xp3的哪个偏移量开始了啊

能给个例子说说怎么解密这种只加密前100个字节的呢?





在我眼中,只要萌的都是loli。不管她有多老,是男的也好,是机器人也罢,就算没有实体,我也一定要萌上她!
智代after PS2汉化移植完毕
顶部
keakon
会员
Rank: 1
TomoFansClub会长


UID 153
精华 0
积分 273
帖子 180
阅读权限 5
注册 2007-4-8
 
发表于 2007-9-19 15:01  资料  短消息  加为好友 
汗,暂时正常了

用Offset+index来判断就行了

算是清楚作者的意图了。。。

加密时,1个文件被分成多个块,每个块都是1个buffer,每个buffer与文件头的偏移量为offset。
且1个buffer不会含2个文件的内容,不足的估计也按1个buffer算=。=

解密时,1个xp3文件也被分成多个文件,每个文件对应多个块,其他同上了~

[ 本帖最后由 keakon 于 2007-9-19 16:27 编辑 ]





在我眼中,只要萌的都是loli。不管她有多老,是男的也好,是机器人也罢,就算没有实体,我也一定要萌上她!
智代after PS2汉化移植完毕
顶部
 



清除 Cookies - 联系我们 - [Key Fans Club] the Council of Doujin-game Development and Promotion - Archiver - WAP
Powered by Discuz! 5.5.0 © 2001-2006 Comsenz Inc.
Processed in 0.024113 second(s), 10 queries , Gzip enabled
粤ICP备05060595号
[ 当前模板 - 天高云淡 v 设计制作 - 七星论坛 v 请使用1024*768或以上分辨率浏览本模板 ]
请勿删除或修改此处版权图示