【声明:研究而已,不得用于非法行为】
我使用cachexie4.0(下载地址:http://answer86.com/blog/content/uploadfile/201106/cc01ee3c2c620533c8c18572e020b2ec20110609131407.rar
)来对资源进行导入和导出。
打开cachexie找到目录:app36817.imgcache.qzoneapp.com/app36817/myprincess
包含文件cxh.swf和WHLYJC.swf。
WHLYJC.swf加载并解密了cxh.swf,所以从WHLYJC.swf里找出解密的代码就行了。
使用ASV(没有加群在共享下载吧^^,群号在左边)查看WHLYJC.swf的代码,是不是很多重名,现在使用工具SwfTool(我自己写的,下载地址:http://answer86.com/blog/content/uploadfile/201203/52b8f1fa9fd5dfccb0c207b750a814ca20120320090753.zip )做反重名操作。反重名需要修改下我的源代码,找到Traits_info.as,将行(//TODO:删除下面一行,针对doswf加密同名方法)的下一行注释取消,再下一行注释,一共两处(case Trait_Const:和case Trait_Method:),然后运行。
将选项(“变量”和“Simple Mode”)选上,再Open Swf...选WHLYJC.swf,再Encrypt And Save...保存成WHLYJC_encrypt.swf。
通过ASV对WHLYJC_encrypt.swf的反编译代码(附件:WHLYJC_encrypt_swfdata.as,可能各人的反编译内容不同,因为随机的名字)分析出破解代码(附件:D_gongzhudefangxian.as)。
现在从WHLYJC.swf提取加载和解密代码,需要关闭SwfTool再修改SwfTool的代码SwfFileFormatDecode.mxml,找到方法getData(),吧save修改成tempFile.save(D_gongzhudefangxian.getInstance().step1((tag as DefineBinaryDataTag).Data), strDefaultFileName);,再运行SwfTool,按照图上方法提取并保存成SWF文件(附件:WHLYJC_Data.swf)。
再用ASV打开WHLYJC_Data.swf是不是找到了方法decipherSWF(),
var _local2 = 100;
var _local3 = 100;
var _local4:int;
var _local5 = 3;
var _local6 = 2;
_local4 = 0;
while (_local4 < _local2) {
_arg1[_local4] = (_arg1[_local4] ^ KEY);
_local4++;
};
var _local7:int = _arg1.length;
_local4 = ((_local7 - _local3) - 1);
while (_local4 < _local3) {
_arg1[_local4] = (_arg1[_local4] ^ KEY);
_local4++;
};
}
这个方法很简单吧,就是解密cxh.swf的,自己写一个工程来读取cxh.swf的二进制并解密保存吧。
用ASV打开解密的cxh.swf,找到包scene类JTScene方法onMonsterLose,注意行lossLife = (lossLife + monsterTemplate.life_damage);,我们需要用SwfTool将加(add,opcode=0xa0)操作改成位与(bitand,opcode=0xa8=168)操作。
在SwfTool的InstructionView里打开解密的cxh.swf,依次选frame1-scene.JTScene-onMonsterLose,依次执行“eline 53”-“set opcode 168”-“save ”,注意save命令后有个空格,点save...保存成一个修改后的cxh.swf,
再使用上面提到的方法decipherSWF()将cxh.swf加密,然后使用cachexie导入替换原来的cxh.swf吧。
不要清缓存访问QQ空间公主的防线游戏吧,进入战斗后直接开始,是不是不伤血?