测试使用Object共享的方式提取被DoSWF加密的文件。 用秦美人的资源做实验, 先从缓存中取出主文件(201332608.itemicon.res和boot_20121205_2149.swf) 在ASV看看boot_20121205_2149.swf,分析要如何加入代码。 发现很多同名了,不过没有关系,我们只要找到loadBytes()的地方,吧目标byte共享了就行。 前两个方法发现都是无关代码。 new ̊}();这个很重要了,和上面类相对应,就是swf里的二进制,当然是加密了的。 102行是不是很奇怪,仔细看下会发现就是loadBytes方法。 所以_local3自然就是我们要共享的对象。 我准备了一张图做opcode的参考(Object共享的opcode.jpg)。 现在使用我的工具(SwfTool)添加代码了。 在这里找到102行代码对应的opcode,关键字(toLocaleLowerCase) 找到了对应的opcode,分析在哪里添加。 在98行,_local4 = new Loader();之后添加就行。之后的代码都可以删除了。 从69:119[0x5d]findpropstrict flash.display.Loader,63 到130行都可以删除了。使用(del 69 62)。 然后在69行插入Object共享。 在添加过程中搞错了的使用del删除就行。 getlex和setproperty都有参数,需要从CPoolEditor里找到对应的参数。 选复合名字,Object索引为0,所以getlex的参数为1. 找到有count:的,而且count:前没单词,这里是29,所以setproperty的参数是30。 使用ASV打开修改后的swf看下对不 修改后的swf的98行Object[0] = _local3;修改成功, 用我准备好的swf读取一下。 发现没,共享成功并且导出了。来找下主程序加载的地方,就能找到主程序解密函数了。 2.b〔(_local2);就是解密。找出这个方法。在类名为2的69行:public static function b〔(_arg1:ByteArray):void 大功告成。 操作中有些失误,造成重复的操作,sorry 有不清楚的地方,有更好的方法,希望与我交流,QQ 82376048 或者加群SWF文件解密(37880243) 完 附上命令,每行一个命令,回车执行 del 69 62 add 0x60 69 add 0x24 70 add 0xd3 71 add 0x61 72 eline 69 set index 1 eline 72 set index 30 save opcode会根据加密文件的不同而不同,最好先了解opcode,比如这里(add 0xd3 71)就是对应访问反编译的_local3。 以上只是研究学习使用。