logo资料库

百度文库资源解析原理与实现.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
百度文库资源解析原理与实现 具体原理不是太懂,于是下载一些已经实现了的工具进行逆向一下,看看别人都是怎么实现 的. 下载了一个"冰点文库下载"拖入 OD,关于如何找关键代码就不说了.这里直接切入重点. 仍以工具默认的文库下载网 址:http://wenku.baidu.com/view/9a2feb165f0e7cd18425363a.html 为例子说 明. 首先下载 http://wenku.baidu.com/view/9a2feb165f0e7cd18425363a.html 网页 内容,找到 DOC_INFO 即文档的基本信息,这里是: ? DOC_INFO={doc_id:"9a2feb165f0e7cd18425363a",cid:"62",price:"2",value_ average:"8",doc_size:"311.5KB",doc_name:' 侧方位停车图解教你侧方停车技巧 ',doc_type:"doc",url:"http://wenku.baidu.com",wealth:parseInt ('0'),level:parseInt('1'),isOrgDoc:'0',catal:"0",isAdmin:"",totalPage Num:"3",cid1:"2",cid2:"62",cid3:""}; 然后软件解析这段文本并写入一个配置文件中: ? [task] dac=bDD38048E63267FE4B3ABEF2314679EC9 mtime=20110826141952 status=2 site=2 downfile=1 totalpage=3 filenum=1
docname='侧方位停车图解教你侧方停车技巧',doc_type,doc webaddr=http://wenku.baidu.com/view/9a2feb165f0e7cd18425363a.html docaddr=http://ai.wenku.baidu.com/play/9a2feb165f0e7cd18425363a?pn=1& rn=10 docid=9a2feb165f0e7cd18425363a docserver=ai.wenku.baidu.com author= desc= docver= pdffile=D:\冰点文库下载 1.5\kpdf\'侧方位停车图解教你侧方停车技巧 ',doc_type,doc.pdf expword=1 其实到这里差不对就知道下载文库的基本方法了,因为重要的信息是: docaddr=http://ai.wenku.baidu.com/play/9a2feb165f0e7cd18425363a?pn=1 &rn=10 我们只要把这个网址输入到浏览器中并保存网页内容,稍加修改就是一个 swf 文件了。这 个后面我们再具体解释。 软件会创建一个线程用来下载文档: 0041C0B9| 51 | push ecx 0041C0BA| 6A 04 | push 4 0041C0BC| 57 | push edi 0041C0BD| 68 B0C24100 | push iDocDown.0041C2B0 0041C0C2| 6A 00 0041C0C4| 6A 00 | push | push 0 0 | | | | | | 0041C0C6| FF15 BC104400 | call dword ptr ds:[<&KERNEL32.CreateThread>] |kernel32.CreateThread 找到线程回调函数地址:0041C2B0 分析里面的处理过程,中间有处理豆丁文库的 代码,我们下次再说。此次只说百度文库的下载。
0041C9F6| E9 81020000 | jmp iDocDown.0041CC7C 0041C9FB| 83F8 03 | cmp eax,3 0041CA0D| 50 | push eax 0041CA0E| 57 | push edi 0041CA0F| 68 02000084 | push 84000002 0041CA14| 6A 01 | push 1 0041CA16| 53 | push ebx | | | | | | | 0041CA17| E8 94C90100 | call ……
堆栈参数: 0256F0A4 003B7D78 ASCII "http://ai.wenku.baidu.com/play/9a2feb165f0e7cd18425363a?pn=1&rn=1" 0256F0A8 00000001 0256F0AC 84000002 0256F0B0 003BA5F8 ASCII "Accept: */* Referer: http://www.baidu.com/" 0256F0B4 0000002C 文件下载到“D:\冰点文库下载 1.5\kdocin”目录下的临时文件中: b_9a2feb165f0e7cd18425363a_1.dat.tmp,下载完成改名为:b_9a2feb165f0e7cd18425363a_1.dat。 实际上是一个 swf 文件,只不过开头多了一下数据:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000000 7B 22 74 6F 74 61 6C 50 61 67 65 22 3A 22 33 22 {"totalPage":"3" 00000010 2C 22 66 72 6F 6D 50 61 67 65 22 3A 22 31 22 2C ,"fromPage":"1", 00000020 22 74 6F 50 61 67 65 22 3A 22 31 22 7D 20 20 20 "toPage":"1"} 00000030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00000040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00000050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00000060 20 20 20 20 20 20 20 20 20 20
只要利用 winhex 的 cut 功能把这段数据去掉就是一个能播放的 swf 文件了。 软件再利用 SWFToImage.DLL 文件把 swf 文件转换为 jpg 图片,最后使用 pdflib.dll 把这些 jpg 图 片制作成 pdf 文档。 当然后面还有将 swf 中的文字提取出来写入到 txt 文件中, b_9a2feb165f0e7cd18425363a_1.dat_2.swf 的文字导出到 b_9a2feb165f0e7cd18425363a_1.dat_2.swf.txt 中。 代码在: 00407454| 50 | push eax 00407455| E8 361F0000 | call iDocDown.00409390 文本 0040745A| 8D5424 3C | lea edx,dword ptr ss:[esp+3C] 0040745E| 8D4424 20 | lea eax,dword ptr ss:[esp+20] 00407462| 52 | push edx 00407463| 68 4CF04400 | push iDocDown.0044F04C 00407468| 50 | push eax | |提取 txt | | | |%s | 00407469| E8 72190300 | call …… 0040746E| 83C4 14 | add esp,14 00407471| 8D4C24 18 | lea ecx,dword ptr ss:[esp+18] 00407475| 51 | push ecx | | |
00407476| 8BCE | mov ecx,esi 00407478| E8 B3BBFFFF | call iDocDown.00403030 |UTF8->ANSI 0040747D| 8D5424 18 | lea edx,dword ptr ss:[esp+18] 00407481| 8D4424 14 | lea eax,dword ptr ss:[esp+14] 00407485| 52 00407486| 51 | push edx | push ecx 00407487| 8BCC | mov ecx,esp 00407489| 896424 38 | mov dword ptr ss:[esp+38],esp 0040748D| 50 | push eax | | | | | | | | 0040748E| E8 F9180300 | call | 00407493| 8BCE | mov ecx,esi 00407495| E8 B6060000 | call iDocDown.00407B50 | |写入 txt 至于如何提取的我没有具体跟进去,大致流程是:swf 文件是压缩过的,要先解压缩后提 取 txt 文本。 我直接从网上下载了一个“Flash 文本提取工具加强版(SWFTxtEx)”,我们在浏览器中输 入 http://ai.wenku.baidu.com/play/9a2feb165f0e7cd18425363a?pn=1&rn=1, 然后保存为 swf 文件,然后使用 winhex 去掉头部信息,便得到一个压缩的 swf 文件,然后 用“Flash 文本提取工具加强版(SWFTxtEx)”工具打开,便能提取出文本信息了:
而且也显示了该 swf 的一些其他信息,如下说明是经过压缩过的: ********************************* 文件基本信息: 文件名 C:\Documents and Settings\user\桌面\9a2feb165f0e7cd18425363a.swf 文件版本 9 经过压缩 宽:595 pixels 高:842 pixels 帧数:1 frame 帧率:0 fps 共提取文字: 397 个 总结:
分享到:
收藏