zoukankan      html  css  js  c++  java
  • 百度文库免积分免费下载工具的原理与实现

    百度文库免登陆免积分下载工具大揭秘!

    具体原理不是太懂,于是下载一些已经实现了的工具进行逆向一下,看看别人都是怎么实现的.

    下载了一个"冰点文库下载"拖入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:"",totalPageNum:"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                 | push    0                                         |

    0041C0C4| 6A 00                 | push    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    <jmp.&MFC42.#5207_?OpenURL@CInternetSession@@QAEPAVCStdioFile@@PBDKK0K@Z>……

     

     堆栈参数:

    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                              

     

    只要利用winhexcut功能把这段数据去掉就是一个能播放的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                         |提取txt文本

    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                         |%s

    00407468| 50                    | push    eax                                       |

    00407469| E8 72190300           | call    <jmp.&MFC42.#2818_?Format@CString@@QAAXPBDZZ>……

    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                    | push    edx                                       |

    00407486| 51                    | 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    <jmp.&MFC42.#535_??0CString@@QAE@ABV0@@Z> |

    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 个

    总结:

    分析完以后,我们便知道如何实现一个免登陆免积分下载百度文库的工具了。

    1.根据文库网址获取文档的id,页数等信息(DOC_INFO)。

    2.构造如下类似链接:http://ai.wenku.baidu.com/play/9a2feb165f0e7cd18425363a?pn=1&rn=1,下载文件。

    3.将文件头部的信息去掉得到一个压缩过的swf文件。

    4.将swf解压缩并提取其中的文本信息,可以得到txt,或者word文档。

    5.使用SWFToImage.DLL将swf文件转换为jpg图片,参考:SWF To Image library - converting set of SWF into BMP in Visual C# using SWF TO Image library

    6.将这些转换出来的图片使用pdflib.dll、iTextSharp 等三方库制作成pdf文件,参考:iTextSharp 使用详解&用C#制作PDF文件全攻略

     

     注:

    SWFToImage.dll在64位下的使用参考How to run and use SWF To Image on x64 Windows”,

    大致意思是在vs工程中设置exe的目标平台为"x86“,为项目添加一个YourApplication.exe.manifest资源,内容为:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <file name="SWFToImage.dll">
    <typelib tlbid="{F52B2898-3CD9-4530-8F1E-2762A2783C33}" version="1.0" helpdir="C:\WINDOWS\system32\"/>
    <comClass description="CLASS_SWFToImage" clsid="{479A1AAC-C148-40BB-9868-A9773DA66AF9}" progid="SWFToImage.SWFToImageObject" threadingModel="both" tlbid="{F52B2898-3CD9-4530-8F1E-2762A2783C33}" />
    </file>
    </assembly>

    当然还要将SWFToImage.dll文件放到你的可执行文件目录下。

    最后附上原文内容:

        
    How to run and use SWF To Image on x64 Windows

    Solution
    The SWF To Image ActiveX library is made using managed Windows 32-bit code so as a result library (dll) can not be loaded into 64-bit application.
    Solution is to build application for x86 platform so application will be operate in 32-bit mode (will work on both 32 and 64-bit OS)

    To apply this in Visual Studio 2005 and higher:

    - open project in Visual Studio 2005
    - open project settings by pressing ALT+F7 (or via main menu: Project | Windows Application 1 Properties)
    - select "Build" tab
    - change "Platform Target" to "x86" option
    - re-build project

    Produced EXE application will work OK with registration-free scenario on Windows x64. To see how to add registration-free support into application see below:


    For registration-free usage scenario for SWF To Image please use the following manifest file:

    Content of YourApplication.exe.manifest file:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <file name="SWFToImage.dll">
    <typelib tlbid="{F52B2898-3CD9-4530-8F1E-2762A2783C33}" version="1.0" helpdir="C:\WINDOWS\system32\"/>
    <comClass description="CLASS_SWFToImage" clsid="{479A1AAC-C148-40BB-9868-A9773DA66AF9}" progid="SWFToImage.SWFToImageObject" threadingModel="both" tlbid="{F52B2898-3CD9-4530-8F1E-2762A2783C33}" />
    </file>
    </assembly>


    Do not forget to put SWFToImage.dll into the same folder where YourApplication.exe is located





  • 相关阅读:
    常用Linux命令
    KDevolop使用小技巧
    微软在5/10/2006发布新版的LINQ Preview (May 2006).msi 无为而为
    盼望已久的Office Live Beta 已经发布,大家可以去尝尝鲜 无为而为
    需求工程:TFS MSF模版中UI Flow model的应用 无为而为
    Visual Studio 2005 Team Foundation Server 试用版及中文说明文件下载,中文版可能在2006年5月15日发布 无为而为
    让我们努力从“不可救药的乐观主义者”华尔街知名投资人约翰。多尔那里学点东西(永远放弃尝试改变这个世界) 无为而为
    Visual Studio 2005 开发Office(Word/Excel)项目的若干资源和示例 无为而为
    IT人看《国富论》系列:第一篇之第十章:论工资与利润随劳动与资本用途的不同而不同,分析分析IT界薪水起伏的原因 无为而为
    非正常状态,彻底删除Exchange服务器 无为而为
  • 原文地址:https://www.cnblogs.com/daxingxing/p/2154633.html
Copyright © 2011-2022 走看看