四、刷图原理
大家已经知道,一张图在bin里头,有两部分数据,一个是图片的指针信息,一部分是图片本身的16进制数据,是分别存放的。659调用图片是通过读取指针信息来进行的。这正如图书馆藏书一样,659就是一个图书馆,图片本身数据就是一本书,而信息指针就是管理员手中的一个索引目录。书本身是死的,放在哪儿都一样。关键是索引目录,他必须要有记载:书的存放位置和书名的内容。这样,不管书放到哪儿,只要管理员有更新索引,他总能随时找到他,使用他。
是的,刷图也是犹如换书,所以,我们就不仅仅是把图片这本书换掉(本身的数据覆盖掉),同时还需要修改索引目录(指针信息)中的书名等信息,这样才能确保管理员找到书(能让659正确读取到)。
是啊,刷图就要同时改bin里的图片指针信息和存储地址上的图片数据,我们也可以用imagehuter直接替换,但修改后,bin是怎么发生变化的呢?我们来看看:
1、 用winhex打开原版xf18版bin,转到偏移量00450000,看,从450000开始是不是都是00。没什么,看看就好了。
2、大家往下翻页,或者干脆直接转到偏移量004ffff0。看,4ffff0前面是不是都是00。翻页的朋友会知道,从00450000-4ffff0之间都是0。为什么?因为这段空间是正版bin空闲的地址。请记住,这段是空闲的,记住就好了。
3、打开ImageHunter,打开原版xf18版bin,再找到连通新时空那张(地址:229d4)照例记下所有信息。我们选择一幅128*128的图把它替换掉,但注意 不要选择清空 。
4、这次,替换后,记下新信息。我们发现,除信息1和指针不变外,其他信息都变了,信息可能大家都不一样(那是因换入的图不一样),但图像地址都一样,是“00450000”。我们知道,“00450000”就是我们新图片的地址了。 好,保存成一个新的bin。
4、用winhex打开这新的bin ,转到偏移量00229D24(原来图片的地址)。哇,和昨天不一样啊,不再是都是00的数据了。难道,这是新刷入图的数据。当然不是了,按信息,新图应该在00450000。那这是?记得吗?我们昨天选择了清空,但今天没有。原来,我们选清空,就是把原来的那副图从bin里头删掉了,不清空,图片数据会依然保留着。也就是说,刷图可以保留原图,也可以不保留,这都不影响新图片。
5、再转到偏移量00450000。哦怎么多了这么多数据了。嗬嗨,这就是新图片的了?对,没错。从004500000开始,都是他。总共占地是,哦,大家应该都不一样,但可以肯定,新图片是多少字节,他就占多少个位置。这点很重要哦。
6、知道了新图片替换时是怎么存放的,那我们在看看指针的变化,转到0037b650。看看,是变了,格式没变,大小变了,地址也指向了00450000。啊,真的哦。
对,刷图就是这样简单,只要能找到图片的指针,随便在659的空闲位置查入新图片信息,然后修改指针就可以了。
五、刷图原理巩固
刷图真的很简单。不信,我们这次直接在winhex里通过修改指针信息把图改回来。
1、打开ImageHunter,打开刚才修改的bin,(按128*128查找),是不是找不到229D24这幅图了,但是多了450000这幅你加入的图?但我们知道连同新时空这幅还在229D24这个位置阿。嗯,那是因为现在没有任何指针指向他,所以找不出来了。
2、在用winhex打开这新的bin ,转到偏移量0037b650,把指针信息该回我们原来记下的连同新时空图片的信息(如图),记住是“00808000”,“ce4a0400”“249d2200"。
3、保存后,关掉winhex。
4、用ImageHunter重新打开保存的bin,(按128*128查找)。天哪,229D24 又回来了,450000却不见了。
怎么样?刷图就是这样?
六、刷图原理总结
现在,我们是不是可以总结一下:
1、我们刷入的图片是写入659的闲置空间的,只要有空间,写多少都行,一般情况下,xf正版bin从00450000-004fffff这一段都是空的,共有704k大小。
2、要想把刷入的图显示出来,就必须将要替换图片的指针信息指向新图。
3、你可以一一指向,也可以将给多幅图的指针指向同一幅,比如将动画青蛙(用ImageHunter可看出,共8幅图,有8个指针)都指向你存入的一张图。结果是,这幅动画还是动画,都每一贞都一样,看其来像是静止的一幅画。
4、可你同时要记住,一个指针只能对应一幅图,指针可以到处指向,但指针的位置是固定的,你不能改他。你改了了,图书馆管理员就找不到所以目录了。
5、替换下的图,你可以清空,也可以保留。清空的好处是留出空间,可以存放比他小一点或等大的新图(或其他)。
6、你也可以不用ImageHunter换图,而是利用ximagemaker先将要刷入的图按照魔鬼的办法先做成一个小的bin,然后用winhex打开,复制到原版bin或者修改的bin的空位置理(记住,这个bin是9m的),然后同过修改指针来实现。
7、当然,你也可以在bin里的空闲位置留出一个标准大小的位置(64k的倍数)这个位置必须是里连续空闲的,或者信息是允许覆盖的(如你不想要的图片),然后将想替换的图片的指针指向这里。以后,你只要做一个图片的标准bin,刷入这里。由于大小是标准的,位置是固定,所以你刷入图片后,就不用改指针了。这有什么特别?嘿嘿,笨,不用该指针,不就可以实现单图刷机了吗?
什么,第7点看不懂。的确,它对你是有点难。没关系,我们在下一次讲完刷音乐原理后,会集中在说一次。那时,你已经没有任何问题了。