努力了半个多月。终于完成DOWNLOADER了。

主要是几个问题:

    被注射的dll的下载问题。

使用URLMON库,直接在case DLL_PROCESS_ATTACH:使使用URLDownloadToFile的话会无法下载。感谢eva的指点。使用新建进程来执行, _beginthread(download,0,NULL); download为下载函数名,在新建进程中执行下载任务。

在loader上,主要是注射dll后删除dll的问题。起先一直删除不了。后来发现。在使用一些api函数来操作dll后没有关闭句柄。windows系统中应该是以一个文件是否被打开,即是否还有关于这个文件的句柄未被关闭。在注射完dll后使用GetExitCodeThread得到注射进的dll的句柄。再使用一个CreateRemoteThread来对远程进程使用FreeLibrary来卸载dll。完成后使用DeleteFile来删除dll。感谢TomyChen等幻影朋友在卸载dll方面对我的帮助。

感谢www.catch22.net的自删除代码,调用selefdelete来完成对程序的自我删除。这里感谢编程爱好者论坛的erping和看雪采臣·宁 的指点。GCC中对函数的地址使用的是相对地址。所以。使用DeleteFile等函数删除自身的时候要从kernel32.dll中使用GetProcAddress来得到函数的物理地址。

后面自己用vc6尝试写了个配置器config。其实使用mfc后构件GUI界面还算可以。

在点击ok按钮后要调用UpdateData(TRUE);提交从界面得到的数据。进行配置的时候我使用的是直接对生成的loader进行二进制修改。使用fseek移动打开的文件指针到指定offsize的位置。使用fput进行修改。修改前要先把该部位全部清0,防止上次结果干扰。

记录一下。以备以后自己查看。

附件: download.rar (1.88 M, 下载次数:130)

Tags: downloader

« 上一篇 | 下一篇 »

1条记录访客评论

非常感谢开源,..
收下了.

Post by LoEr on 2008, May 16, 9:09 AM 引用此文发表评论 #1


发表评论

评论内容 (必填):