|
阅读:613回复:9
“冰河”数据分析笔记
“冰河”可称得上是(国内)远程控制的一面“大旗”了。尽管自2.2[DARKSUN]专版以后,作者黄鑫停止了对新版本的开发,但其强大的功能和易用性,以及层出不穷的各种改版,仍然使很多“网络安全技术爱好者”乐此不疲。
咳,这么一本正经的说话真是别扭啊,既然大家同道中人,我也就不那么多P话了。如果你还不知道“冰河”是个什么玩艺的话……就先别看这篇帖子了,去找一下“古代典籍”,会有收获的。 OK,进入正题。 “冰河”是个“木马”,具有“木马”的“经典”(怎么需要这么多引号呢?)特征:客户端和服务器(“蓝色火焰”等只有服务器)。“冰河”客户端所发送命令是经过加密的,而服务器返回的是明文(你别问我是怎么知道的,客观事实!)。我们要研究的是客户端发送数据的格式和加密方法。 我们只需要一种工具就能完成这项工作:“PORTLISTEN”,它的作用我就不用赘述了(“赘”述:Port“端口”,Listen“监听”,Port Listen“端口监听”)。这种端口监听工具的优点在于可以直接把接收到的数据转换成ASCII码的形式,这样就方便了我们的分析。 为了进行对比,我用冰河的客户端连续发送了四条搜索本地硬盘的命令(就是用鼠标点以下服务器的图标,只不过我点了四下而已)。消息A、B是没有密码的,消息C、D是密码分别为“a”和“b”的。 以下是这四条消息(十进制ASCII): A: 245 203 201 207 198 245 200 200 206 199 245 206 199 205 201 245 187 154 140 148 171 144 143 197 245 213 209 213 245 B: 245 203 201 207 198 245 200 200 206 199 245 206 199 205 200 245 187 154 140 148 171 144 143 197 245 213 209 213 245 C:158 245 203 201 207 198 245 200 200 206 199 245 206 199 205 199 245 187 154 140 148 171 144 143 197 245 213 209 213 245 D:157 245 203 201 207 198 245 200 200 206 199 245 206 199 205 198 245 187 154 140 148 171 144 143 197 245 213 209 213 245 通过对比可以发现这四条消息: 1.A、B两条消息比C、D少一位,就是开头的一位。 2.C、D两条消息的密码都是一个字母,而且是连续的,而开头多出来的一位也是连续的两个数。 3.每条消息第15位是不同的,而且是递减的顺序,这一位的作用是什么呢? 4.每段数据之间会有“245”出现。 根据上面的问题,提出这样的猜想: 1.“245”是一个标志位。 2.消息格式应该是这样的:密码(标志位)消息1(标志位)消息n(标志位) 3.第十五位或者说整个消息3的是一个序号(没有别的解释了,除非去问黄鑫本人:) 4.密码对消息不具有加密功能(重要!可以对算法进行可选择明文攻击!) 我们还是先解开它的密码算法吧,这看上去很简单。 ASCII码97(a)的加密后数据为158,98是157。显然加密是顺序的,也就是简单的单表替换,这好办了。加密后的数据是和ASCII表的顺序相反的,这样我们可以推算c的加密后ASCII码为156,d为155……就可见字符来说,ASCII码最小的是“[空格]”,最大的是“~”这样,我就已这两个字符为密码截获他们的加密后消息:空格的编码为223,~的编码为129(别忘了加密后数据和ASCII的顺序是相反的)。这样,为了大家不用像我一样重现加密源程序,我列了一张表对应所有的可见字符的加密前,字符,加密后的资料: 前 字符 后 126 ~ 129 125 } 130 124 | 131 123 { 132 122 z 133 121 y 134 120 x 135 119 w 136 118 v 137 117 u 138 116 t 139 115 s 140 114 r 141 113 q 142 112 p 143 111 o 144 110 n 145 109 m 146 108 l 147 107 k 148 106 j 149 105 i 150 104 h 151 103 g 152 102 f 153 101 e 154 100 d 155 099 c 156 098 b 157 097 a 158 096 `159 095 _1 60 094 ^ 161 093 ] 162 092 \ 163 091 [ 164 090 Z 165 089 Y 166 088 X 167 087 W 168 086 V 169 085 U 170 084 T 171 083 S 172 082 R 173 081 Q 174 080 P 175 079 O 176 078 N 177 077 M 178 076 L 179 075 K 180 074 J 181 073 I 182 072 H 183 071 G 184 070 F 185 069 E 186 068 D 187 067 C 188 066 B 189 065 A 190 064 @ 191 063 ? 192 062 > 193 061 = 194 060 < 195 059 ; 196 058 : 197 057 9 198 056 8 199 055 7 200 054 6 201 053 5 202 052 4 203 051 3 204 050 2 205 049 1 206 048 0 207 047 / 208 046 . 209 045 - 210 044 , 211 043 + 212 042 * 213 041 ) 214 040 ( 215 039 ' 216 038 & 217 037 % 218 036 $ 219 035 # 220 034 " 221 033 ! 222 032 空格 223 好了!我们可以直接读消息明文了!以消息A为例(已分段): 1. 245 203 201 207 198 明文: 4 6 0 9 2. 245 200 200 206 199 明文: 7 7 1 8(客户端接收端口) 3. 245 206 199 205 201 明文: 1 8 2 9(序号) 4. 245 187 154 140 148 171 144 143 197 明文: D e s k t o p :(搜索位置) 5. 245 213 209 213 245 明文: * . *(目标类型) 看明白了吗?“冰河”数据格式的面纱已经褪去,这就是他的本来面目!因为消息中没有命令,所以消息段1肯定是命令编号!2是客户端接收端口,3是序号,4、5是参数。 补记: 写完以后我觉的文章不怎么实用,或者说根本没用。但是想想还是发了出来,或许有人愿意做个“冰河密码破解器”之类的东西。另外,冰河实际上并不是使用典型的C/S模式,而是“CS/CS”模式,即客户端和服务器即要被连接也要向对方发起连接,客户端的7718端口就处在侦听状态,等待服务器的连接。这样,只要捕获了客户端的接收端口,既可以对它发送消息了,不带命令编号的消息会在客户端窗口底部的状态栏里面显示出来,比如你给他发一个"你好,你被我逮到了"的消息, 或者发起一次D.O.S攻击。 -------------------- 一个人的尊严和人格是绝对神圣而不可侵犯的。 如若有歹人敢亵渎之,则必以天赋之自卫权利以应之! -----【精武英雄】 |
|
|
|
1C#
发布于:2002-12-20 18:08
Re:“冰河”数据分析笔记
z |
|
|
|
2C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
a |
|
|
|
3C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
b |
|
|
|
4C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
c |
|
|
|
5C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
d |
|
|
|
6C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
de |
|
|
|
7C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
dee |
|
|
|
8C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
s |
|
|
|
9C#
发布于:2002-12-20 18:09
Re:“冰河”数据分析笔记
sh |
|
|