快速业务通道

批处理 API实现文件下载的代码第1/2页

作者 佚名 来源 批处理 浏览 发布时间 2013-07-09
叫RUNDLL32来调用它,但是很可惜,这个美好的计划马上也破裂了...

我去微软看了他们的164787号文档http://support.microsoft.com/default.aspx?...kb;en-us;164787),该文档阐述了RUNDLL32的调用方式和能被他调用的函数的格式:

它们是这么说的:


引用

Rundll and Rundll32 programs do not allow you to call any exported function from any DLL. For example, you can not use these utility programs to call the Win32 API (Application Programming Interface) calls exported from the system DLLs. The programs only allow you to call functions from a DLL that are explicitly written to be called by them.



这个是规定的格式:


代码

void CALLBACK
EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);



很不幸,我们的URLDownloadToFile小兄弟并没有符合这些条件,被RUNDLL32无情的抛弃了(汗一滴..)...但是我们并没有因此而嫌弃它(汗一滴AGAIN..),毕竟,在后来实现的过程里,它是为我们的工作省下了不少功夫.

到此,用RUNDLL32运行计划流产....(寒...)

想了一根烟功夫,现在URLDownloadToFile有了,怎么才能调用这个函数呢?总不能模仿汇编PUSH 5个参数进栈,然后CALL吧,那这个函数的地址还要用LoadLibrary()和GetProcAddress()计算得来,那这两个函数的地址.....还是放弃...等等,如果用一个EXE来实现的话就简单很多了(至少EXE是不需要任何解释器的),对,写一个EXE来下载文件.可我们的目的是用BAT来下载呢,BAT文件能包裹EXE的数据吗?答案是肯定的...往下看..

记得以前看过一篇文档<<Do All in Cmd Shell>>里面介绍过一种方法.先卖个关子.大家都知道,如果用ECHO加上重定向符来写文件的话,只能写入ASCII的一部分,也就可以显示出来的那些ASCII(也就是ASCII值小于128的那些),对于那些无法显示的字符就没有办法了.但是这让我们想起一个工具,一个微软历史上同样古老的,批处理的兄弟--DEBUG!

现在思路清晰了:可以让批处理把ECHO不能显示的字符转化为16进制数据(比如EXE中的那些数据)保存在批处理中,然后用DEBUG写道文件里,最后用BAT调用生成的EXE,下载文件!(想完了这里,我感觉还是太麻烦,不知道哪位牛人对这个实现还有什么更加简单的办法吗??)


四.解决-实战

倘若就此编写一个可下载文件的EXE,然后直接用BAT包裹,定然会被同行耻笑,不单是因为那几千个字节的数据拖着大大臃肿的BAT文件,更加让为这种简单的想法立刻现形,为了不达到这些负面效果,也为了让这篇文档不至于干瘪瘪的让人感觉没什么看头(事实上是因为早些时候看过watercloud的一篇大作感悟颇深),我决定手工写一串16进制代码来代替机器编译的EXE.既美观了界面,又增强了技术性.....(一_一...简直是在卖作...)

现在当务之急是要一个可以下载文件的EXE程序,实现这个目标只要一个URLDownloadToFile即可,放在最后实现,先来写一个PE框架:大家都知道PE文件的格式吧,不懂的就去看看那个著名的电信黑客罗某某的书.(Who!?...~)

先给出我们的PE框架,基于XP的FileAlignment对齐大小最小就支持到0x200(也就是10进制的512字节,以下有在前面加上0x的都表示16进制数值),我们的框架就打出512字节(注意,我下面留有空白表示各个PE部分,结合下面的文档,大家方便理解),这个框架里没有任何的代码或者数据:

(ZV友情提示:下面是最枯燥的部分,各位手握锥子,要有一不怕苦,二不怕痛的精神看完它....)
(如果定力不高的朋友,或者堆PE文件再熟悉不过的朋友,可以字节转到"JMP S1"处往下看.)
(如果只想知道到底怎么回事,或者对这篇作文报浏览态度的朋友,可以直接转到"JMP S2"处继续浏览)
(睡着了的继续睡觉....)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号