转载一篇文章,发现这个思路很强大! 让一切SWF加密皆为浮云~ 市面的的商业软件 诸如 SWF Seeker / SWF Reader,采用都是差不多的方法,说穿了其实也真的很简单,呵呵
只章内容,代码劳驾看原文啦。 http://www.cnblogs.com/zcsor/archive/2010/12/24/1915972.html
======================================================
因为最近有一点需要,所以想提取打开的网页里面的SWF文件出来,其实以前也做过,用个游戏修改器,搜索一下FWS然后挨个检查一下结果,手工复制一下内存数据。这次的却比较多,挨个弄比较麻烦还容易出错。于是写了一小段程序。只是需要注意的是,很多浏览器并不是那个有启动窗口的进程是我们要的……哎……不提这个,只是提一下这个实现。其实嘿嘿,前面那个从OFFICE中提取的,也可以考虑一下用这个代替?~咕~~(╯﹏╰)b~速度,速度……慢点点而已了
1、枚举进程,列表以供选择 2、枚举所选进程内存块,搜索FWS字样……貌似叫暴力……(其实只需稍加修改源程序就可以连同CWS一起搜索) 3、筛选,依据被定为这样几个: A、版本(第四字节)为,7,8,9,10的 B、文件大小大于0(5-8字节) C、文件结尾为0X40,0X00,0X00,0X00的
第一部分,枚举进程其实没什么好说的,Process类就可以了。 第二部分,其实就是核心内容了:内存检索,一般来说,应该先枚举进程所用的内存块及其属性,这样可以通过属性进行筛选,但实际在实现时,我是用ReadProcessMemory函数是否出错来决定是否继续搜索本块内存的……真是懒人啊~~~~
[Code]
这样就声明了所用的API函数,接下来是枚举过程:
[Code]
很简单,相信大家一看就懂~~接下来,就是读内存数据了,这里需要考虑这样一个问题:有些内存块大的……可怜的VB溢出了咋办……前几天绘制一个几十万像素宽的图像就……咕(╯﹏╰)b,其实解决办法很简单的,分块即可,这里读写内存我们就分1024字节吧当然有一定原因了分4096也许你喜欢?O(∩_∩)O~其实编码起来都差不多,只要你知道~原因
[Code]
这样,大功告成了啊~得到了可读的内存空间内的全部貌似SWF文件的信息,接下来……保存它们吧!
[Code]
呃,发现我确实很懒了吧……其实也检测了一下,当读内存失败的时候不保存(也没法保存嘛~),这是防止FWS字样出现的位置后面的字节数不够SIZE(超出内存段)时的错误,换句话说,就是如果代码没写错,那这个FWS一定不是一个FLASH文件~
最后附上,成品~呃,其实你自己写一下修改修改我的代码,才真的是成品,这个里面不识别压缩的其实压缩的和这个一样的~~如果你愿意解压,那就解压吧~几句代码的事……不过我懒