VB将配置保存到EXE本身(生成EXE木马程序)

VB 写木马生成器教程(exe生成代码)

很不错的一篇文章 ! VB  写木马生成器很经典的一个例子

广外幽灵、冰河等软件都有一个实用的功能,根据用户配置生成相应的EXE文件(如设置IP、端口等)。这种EXE被称为木马服务端。它是用什么原理生成的呢?用WinHEX等软件打开这类EXE,会发现用户配置都存放在EXE的尾部。服务端EXE在运行时只要读取自身尾部的数据就可以了。那么服务端EXE本身从何而来呢?当然是预先编译好的,放在主体软件的资源中,需要时进行释放就可以了。
好,知道了原理现在就动手做一个小程序试试。首先要做的是服务端模板,让其运行后读取自身尾部的数据。
打开VB6,新建一个工程t.vbp。因为定位指针到文件末尾需要知道编译后的模板文件t.exe的大小,而写代码时t.exe又尚未生成,所以在代码中可以先用未定义常量FILE_SIZE来代指文件大小,最后编译成t.exe后再将文件大小定义给FILE_SIZE。代码如下:
Const FILE_SIZE = 20480 '这是编译后文件模板的大小
Private Sub Form_Load()
Dim bAppend As Byte, lNum As Long
Dim i As Long, sInfo As String

Open App.Path & “\” & App.EXEName & “.exe” For Binary Access Read As #1
Seek #1, FILE_SIZE + 1 '将读取指针定位到文件末
'读出超出模板大小的字节部分并显示

For lNum = 1 To FileLen(App.Path & “\” & App.EXEName & “.exe”) – FILE_SIZE
Get #1, , bAppend
sInfo = sInfo + Chr(bAppend)
Next lNum
Close #1
MsgBox sInfo
End Sub
下面再来做主体文件,让用户在其中进行配置服务端。另外新建一个工程config.vbp,添加服务端模板文件t.exe为CUSTOM类资源,资源号为101。如果您的VB没有资源编辑器,请从“外接程序/外接程序管理器”中进行添加,以后就可以从工具菜单下运行资源编辑器了。
界面上设置一个标签,一个文本框和一个按钮。

我们要做到的是,用户配置后点击按钮,程序释放t.exe并将配置信息追加到t.exe的末尾。本工程的代码如下:
Const FILE_SIZE = 20480 '这是101号资源中的服务端文件1.exe的大小
Private Sub Command1_Click()
Dim bInfo As Byte
Dim bFile() As Byte
Dim iInfoLen As Integer
Dim i As Integer, lFile As Long

iInfoLen = Len(txtInfo.Text)

If txtInfo.Text = “” Then
MsgBox “请配置弹出消息!”, vbCritical
Exit Sub
End If

'引入文件对话框部件,并命名为cdLocation
cdLocation.Filter = “可执行文件(*.exe)|*.exe”
cdLocation.ShowSave
If cdLocation.FileName = “” Then Exit Sub

On Error GoTo myErr:

bFile = LoadResData(101, “CUSTOM”) '读出101号资源
Open cdLocation.FileName For Binary Access Write As #1
For lFile = 0 To FILE_SIZE – 1
Put #1, , bFile(lFile)
Next lFile
For i = 1 To iInfoLen '读出配置信息并追加
bInfo = Asc(Mid(txtInfo.Text, i, 1))
Put #1, , bInfo
Next i
Close #1
Exit Sub
myErr:
Reset '如果有文件未关闭,则关闭之
MsgBox Err.Description & ” 配置信息请用半角字符.”
End Sub
选择菜单“文件/生成config.exe”,执行编译后的config.exe,在配置框中输入“hello!”,点击“生成EXE”按钮,选择保存位置及文件名,假设为ok.exe。执行ok.exe,效果如下图所示。

P.S 由于EXE在运行时是只读的,所以要保存配置需要借助另一个EXE,可以使用命令行将要保存的信息传到另一个EXE中,然后再更改EXE。



Comments are closed.