根据用户配置生成EXE

原创 2006年06月02日 12:45:00

                             根据用户配置生成EXE
                                                                            南京 阿珊境界

    (此文在<黑客防线>2006年第6期上发表,标题为<自做木马服务端>)广外幽灵、冰河等软件都有一个实用的功能,根据用户配置生成相应的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没有资源编辑器,请从“外接程序/外接程序管理器”中进行添加,以后就可以从工具菜单下运行资源编辑器了。
界面上设置一个标签,一个文本框和一个按钮,如图所示。

 http://www.asanscape.com/configimg/config.jpg
我们要做到的是,用户配置后点击按钮,程序释放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 & " 配置信息请用半角字符."
   

选择菜单“文件/生成config.exe”,执行编译后的config.exe,在配置框中输入“hello!”,点击“生成EXE”按钮,选择保存位置及文件名,假设为ok.exe。执行ok.exe,效果如下图所示。
 http://www.asanscape.com/configimg/t.jpg

  配置信息不支持中文等全角字符,这个问题涉及到汉字为双字节字符,要判断取出的字节的ASCII码是否小于128。如果是,则说明其是字母,直接Chr()后输出;如果不是,则说明其是双字节汉字中的一个字节,则继续读取下一    

文中两个工程在VB6+WIN2000中调试通过。

    在本文搁笔发表之后,我把文章贴到博客和论坛里,网友帅哥阳伞给出了汉字配置信息的解决方案,现在我把它整理到下面:

T.EXE代码

Const FILE_SIZE = 20480       '这是编译后文件模板的大小
Private Sub Form_Load()
    Dim bAppend As Byte, lNum As Long
    Dim i As Long, sInfo As String
    Dim s(1) 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
            'MsgBox bAppend
            If bAppend < 128 Then       '判断是否是英文字符
               sInfo = sInfo + Chr(bAppend)
            Else                        '如果不是则继续获取下一个字节
               If s(0) = "" Then
                  'MsgBox "1" & Hex((bAppend)) & "1"
                  s(0) = CStr(Hex((bAppend)))
               ElseIf s(1) = "" Then
                  'MsgBox "2" & Hex((bAppend)) & "2"
                  s(1) = CStr(Hex((bAppend)))
               End If
               If s(0) <> "" And s(1) <> "" Then
                  sInfo = sInfo + Chr(Val("&H" & s(0) & s(1)))      '将中文汉字输出
                  'MsgBox "3" & Chr(Val("&H" & s(0) & s(1))) & "3"
                  s(0) = ""
                  s(1) = ""
               End If
            End If
        Next lNum
    Close #1
    MsgBox sInfo
End Sub
***********************************************************************
config.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     '读出配置信息并追加
            str1 = Mid(txtInfo.Text, i, 1)
            If Asc(str1) >= 0 Then     '非中文
               bInfo = Asc(str1)
               Put #1, , bInfo
            Else                       '中文
               bInfo = HiByte(Asc(str1))      '先高位
               Put #1, , bInfo
               bInfo = LowByte(Asc(str1))     '再低位
               Put #1, , bInfo
            End If
        Next i
    Close #1
    Exit Sub
myErr:
    Reset   '如果有文件未关闭,则关闭之
    MsgBox Err.Description 

End Sub

'获取高位
Public Function HiByte(a As Integer)
    Dim b As Integer
    b = a And &HFF00
    b = b / 256
    If b < 0 Then b = b + 256
    HiByte = b
End Function

'获取低位
Public Function LowByte(a As Integer)
    Dim b As Integer
    b = a And &HFF
    LowByte = b
End Function

如有不明白或不赞同的地方,欢迎加入我们的vb讨论群:12960265

WCF中可以使用SVCUtil.exe生成客户端代理类和配置文件

 1.找到如下地址“C:\Windows\System32\cmd.exe”  命令行工具,右键以管理员身份运行(视系统是否为win7 而定)          2.输入如下命令: C:...

Eclipse下配置javah.exe自动生成jni头文件

最近项目中需要用到JNI来进行java和c++之间的交互,去命令行调用javah.exe命令生成jni头文件的方法比较麻烦,可以通过配置Eclipse来解决这个问题,配置方法如下:1、首先确保你的环境...

WCF 系列:通过SvcUtil.exe生成客户端代码和配置

WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务代理对象进行服务调用。 下面简单说下如何通过S...

生成可在未配置jdk环境的电脑上运行的exe

基本步骤: ■1)用eclipse生成可执行的jar文件 1-010)用eclipse新建一个Project,比如:jar2exe 1-020)创建work.com包 1-030)创建Test...
  • Karl_NJ
  • Karl_NJ
  • 2014年07月07日 15:15
  • 689

java项目生成"可运行jar"或"exe"的配置文件注意点

最近自己做了一个一下把java 项目 生成对应的exe运行程序,要说仅是制作这个项目对应关键呢,现在呢网上已经有很多软件了(JSmooth等),如果大家想学可以百度一下,其中很多软件就要求必须要使用“...

在net.tcp模式下,由SvcUtil.exe生成代理类文件和配置文件

WCF服务调用可以采用两个方法,由工具SvcUtil.exe生成本地代理服务类和配置文件方式,或者采用ChannelFactory直接创建服务代理对象。本文主要采用前面一种方式来进行。 SvcU...

通过SvcUtil.exe生成客户端代码和配置

WCF服务调用通过两种常用的方式:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式,一种是通过ChannelFactory直接创建服务代理对象进行服务调用。 下面简单说下如何通过S...
  • sgear
  • sgear
  • 2012年09月13日 17:27
  • 681

基于ant集成打包,生成native exe 的项目配置方法。

java 的swing 项目,需要自动更新和便于build, deploy. 所以,需要一套比较方便的集成命令来完成此项工作。在此,基于netbeans 创建swing 项目后,在原项目上增加一些配置...

win32版protoc3.exe用户生成java消息体

  • 2016年07月08日 14:27
  • 1.79MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:根据用户配置生成EXE
举报原因:
原因补充:

(最多只允许输入30个字)