[小工具]针对MSN和中文解码问题的小工具
看到了好几个关于中文解码的问题和MSN解码的问题。涉及的问题有两个,一是大多数网络分析工具并不能很好支持中文decode/hex view。二是,诸如MSN等通讯里会包含UTF8的编码/解码。
刚才想了想,花了半个多小时做了个小工具,欢迎大家排砖
------------------
3-23更新了2000字节的长度限制至6000字节 做的!!
工具也有原创啊,走召 弓虽
佩服
操作说明一
先启动 smartconvert.exe 例一、然后在Omni里选择相应的包点中hex部分,激活(蓝色状态),鼠标右键,选择 "Copy" 例2、Sniffer里,选择相应的包,
点中hex部分,鼠标右键,在这里Sniffer比Omni操作简单,即使之前没选中,
鼠标右键后也会选中目标hex code。选择Copy Heilighted. 切换/激活刚才打开的smartconvert
可以看到原文复制在上部的那个memobox
convert好的文字在下面那个memobox 但是是乱码,难道这个小工具不能解析MSN?
旁边有个UTF8Decode flat button,
按一下 为了避免一些意外,这个小工具一旦发现copy的长度超过2000字节,就不会接受输入。
如果要连续察看若干个包,不想切来切去,可以选中smartconvert中的always on top按钮。
在Raw中,可以用来查看中文的解码。
在UTF8中,可以支持对MSN UTF8类型的包进行察看
That's all. Thanks 实在佩服Vader。。。。真是高手。。。 有点感觉崇拜两字含义~~
半个小时写个工具~
除了崇拜还能说什么呢?!! 高手你好,看了你的文章后有个问题想请教您一下,用sniffer或etherpeek抓的udp包的内容能看到吗?信息没有加过密.谢谢 你太牛b了 期待好久,找了好久,终于等到了,太感谢了! [quote]Originally posted by [i]lipman_boss[/i] at 2005-2-25 08:17 AM:
高手你好,看了你的文章后有个问题想请教您一下,用sniffer或etherpeek抓的udp包的内容能看到吗?信息没有加过密.谢谢 [/quote]
没加密当然能够看到!
还是Vader兄厉害!
。。。。 怎么看呀?教教我行吗?是绿色聊天软件,我用snifeer 和etherpeek都抓过包,怎么看明文?谢谢帮忙 楼上的老兄,应该是编码的问题吧,你的先了解这个聊天软件的编码吧 我把这个软件发出来吧,高手们帮忙看看,是一个很小的绿色软件 [quote]Originally posted by [i]lipman_boss[/i] at 2005-2-25 09:54:怎么看呀?教教我行吗?是绿色聊天软件,我用snifeer 和etherpeek都抓过包,怎么看明文?谢谢帮忙 [/quote]
我大致看了看ipmsg这个软件,
首先,通讯是加密的,或者是经过某种特有序列编码的。两者对比,更像是加密。
其次,软件是日本人写的
所以,基于以上原因,我停止了分析.
应该是台湾人写的呀,那有办法吗?谢谢答复
如果是日本人我也hate,不过只是对人不对事,是吗?那有办法吗?这么小的软件也用加密?如果那破解,气死小日本。说明我们中国人强大。[[i] Last edited by lipman_boss on 2005-2-25 at 16:10 [/i]] 我用ethreal抓了包,但是分析不出来啊,什么内容也没有 [quote]Originally posted by [i]smlq[/i] at 2005-2-25 16:42:
我用ethreal抓了包,但是分析不出来啊,什么内容也没有 [/quote]
It does not support Ethereal. [quote]Originally posted by [i]Vader[/i] at 2005-2-25 16:57:
It does not support Ethereal. [/quote]
我就说嘛?! 啊,我倒
原本想着放弃sniffer,改用ethereal呢
现在看来,再捡起来吧 不过又试了一下Dragon的方法,现在倒是可以看到内容了
不过干扰字符太多,几句话得翻腾着找半天才能看到原文
一个字:累
话说回来了,能看内容就8错了,多谢Vader和Dragon! [quote]Originally posted by [i]smlq[/i] at 2005-2-25 17:01:
啊,我倒
原本想着放弃sniffer,改用ethereal呢
现在看来,再捡起来吧 [/quote]
Ethereal很多方面还是不能和Sniffer OmniPeek比的!
目前来说Ethereal,可以放弃,Sniffer和OmniPeek不能!
[[i] Last edited by wuhanzhou on 2005-2-25 at 17:13 [/i]] [quote]Originally posted by [i]wuhanzhou[/i] at 2005-2-25 17:12:
Ethereal很多方面还是不能和Sniffer OmniPeek比的!
目前来说Ethereal,可以放弃,Sniffer和OmniPeek不能!
[[i] Last edited by wuhanzhou on 2005-2-25 at 17:13 [/i]] [/quote]
Ethereal 的copy mode会把所有hex code /ascii都复制出来,如果要支持ethereal就要特定写些代码...
通讯数据采用 RSA/Blofish 加密。
网上查过了,是中国开发的, ipmsg是用RSA/Blofish加密的,vader有办法吗?[[i] Last edited by lipman_boss on 2005-2-25 at 19:20 [/i]] [quote]Originally posted by [i]lipman_boss[/i] at 2005-2-25 19:17:
网上查过了,是中国开发的, ipmsg是用RSA/Blofish加密的,vader有办法吗?
[[i] Last edited by lipman_boss on 2005-2-25 at 19:20 [/i]] [/quote]
查阅 [url]http://www.ipmsg.org[/url]
这位同学,中国人只是汉化了版本而已.
我说的日本人开发的不是因为我有民族偏见,而是日文版的文档我看不懂 :(
RSA/Blowfish 加密的东西如果能够轻易破解,我觉得最需要这样人才的是总参X处
当然,如果在加密体系里进行网络分析也是我最近一直在思索的问题. 谢谢答复,那msn也不是外国人发明的,中国人不是也能搞定它吗?难道就搞不定小日本了,你看不懂日文,要不我去请一个日语系的来翻译吧.不过我看过ipmsg.org网了,可以转英文的.
[[i] Last edited by lipman_boss on 2005-2-25 at 22:50 [/i]] 高手!!!!!
以后多多请教@_@_@_@_@_@_@_@ 很历害,这都可以搞定
高
高老庄的高 我用iris抓下来的包也无法接出来iris自己的decode能出一堆乱码 MSN协议除认证外的控制和消息数据都是明文的,消息部分也就是UTF-8编码,MS虽然没有公开协议细节,但就象ICQ协议一样,只要用得广泛就会有人去研究,协议细节方面早就分析透了,网上随便google一下就能找到资料。许多网络监控软件基本上都带了解码MSN协议查看消息的功能,贴一个以前写的验证自己对协议了解程度的非常简单粗糙的MSN Perl解码模块,字符集转换用一下Text::Iconv模块就可以了:
#
# NetPacket::MSN - Decode MSN packets
#
#
# $Id: MSN.pm,v 1.16 2004/06/18 10:57:15 stardust Exp $
#
use Text::Iconv;
package NetPacket::MSN;
#
# Copyright (c) 2004 stardust.
#
# This package is free software and is provided "as is" without express
# or implied warranty. It may be used, redistributed and/or modified
# under the terms of the Perl Artistic License (see
# [url]http://www.perl.com/perl/misc/Artistic.html)[/url]
#
#
use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
use NetPacket;
my $myclass;
# MSN flags
BEGIN {
$myclass = __PACKAGE__;
$VERSION = "0.01";
}
sub Version () { "$myclass v$VERSION" }
BEGIN {
@ISA = qw(Exporter NetPacket);
# Items to export into callers namespace by default
# (move infrequently used names to @EXPORT_OK below)
@EXPORT = qw(
);
# Other items we are prepared to export if requested
@EXPORT_OK = qw(msn_strip
);
# Tags:
%EXPORT_TAGS = (
ALL => [@EXPORT, @EXPORT_OK],
strip => [qw(msn_strip)],
);
}
#
# Strip header from packet and return the data contained in it
#
undef &msn_strip;
*msn_strip = \&strip;
sub strip {
my ($data) = @_;
my $msn_obj = NetPacket::MSN->decode($data);
return $msn_obj->{data};
}
#
# Decode the packet
#
sub decode {
my $class = shift;
my($data) = @_;
my $self = {};
my $data_len = 0;
$data_len = length ($data);
if ($data_len < 5) {
$self->{valid} = 0;
} else {
my $cmdhead = 0;
my $cmdtail = 0;
$self->{cmd_count} = 0;
while ($cmdtail < $data_len-1 ) {
my $carriagepos = index ($data,"\r\n",$cmdhead);
if ($carriagepos < 0) {
$cmdtail = $data_len - 1;
} else {
$cmdtail = $carriagepos;
}
my $msn_cmd = substr ($data,$cmdhead,4);
if ($msn_cmd =~ /([A-Z]{3,3}) /) {
$self->{valid} = 1;
# Decode MSN packet
my $msn_cmd_index = "msn_cmd".$self->{cmd_count};
$self->{$msn_cmd_index} = $1;
if ($1 eq "MSG") {
my @cmd_msg_para = split (" ",substr($data,$cmdhead,$cmdtail-$cmdhead+1));
my $msg_para_block = substr($data,$cmdtail+2,$cmd_msg_para[3]);
my @cmd_data = split ("\r\n",$msg_para_block);
my %msg_header = ();
for (my $i=1;$i<$#cmd_data;$i++) {
my @items = split (": ",$cmd_data[$i]);
$msg_header{$items[0]} = $items[1];
}
my $msg_text = substr($msg_para_block,index($msg_para_block,"\r\n\r\n")+4);
$msg_text = textdecode ($msg_text);
if ((!($msg_header{"Content-Type"} =~ /x-msmsgscontrol/)) && (!($msg_header{"Content-Type"} =~ /x-msnmsgrp2p/)) && (!($msg_header{"Content-Type"} =~ /x-msnmsgr-sessionclosebody/)) && (!($msg_header{"Content-Type"} =~ /x-msmsgsemailnotification/)) && (length($msg_text) > 0)) {
my $has_msg_index = "has_msg".$self->{cmd_count};
$self->{$has_msg_index} = 1;
my $msg_index = "msg_text".$self->{cmd_count};
$self->{$msg_index} = $msg_text;
my $msg_status_index = "msg_status".$self->{cmd_count};
if ($cmd_msg_para[1] =~ /^\d+$/) {
$self->{$msg_status_index} = 1;
# print $self->{$msg_status_index}."\n".$self->{$msg_index}."\n";
} else {
$self->{$msg_status_index} = 0;
$self->{msg_sender} = $cmd_msg_para[1];
$self->{msg_sender_nick} = $cmd_msg_para[2];
# print $self->{$msg_status_index}."\n".$self->{$msg_index}."\n".$self->{msg_sender}."\n".$self->{msg_sender_nick}."\n";
}
}
$cmdhead = $cmdtail + $cmd_msg_para[3] + 2;
} elsif ($1 eq "USR") {
my @cmd_msg_para = split (" ",substr($data,$cmdhead,$cmdtail-$cmdhead+1));
if ($cmd_msg_para[2] eq "OK") {
$self->{auth} = 1;
$self->{auth_user} = $cmd_msg_para[3];
$self->{auth_nick} = $cmd_msg_para[4];
}
$cmdhead = $cmdtail + 2;
} else {
$cmdhead = $cmdtail + 2;
}
$self->{cmd_count}++;
} else {
$cmdhead = $cmdtail + 2;
}
}
}
# Return a blessed object
bless($self, $class);
return $self;
}
sub textdecode {
my ($str) = @_;
$str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
my $converter = Text::Iconv->new("UTF-8", "GB2312");
$str = $converter->convert($str);
return $str;
}
#
# Module initialisation
#
1;
# autoloaded methods go after the END token (&& pod) below
__END__
原来,还有原创工具!
老兄,你真神了,学是刚看了个原创工具,佩服佩服! 为什么有的包拷贝不进去 [quote]Originally posted by [i]mzwa[/i] at 2005-3-22 13:58:为什么有的包拷贝不进去 [/quote]
太长了的缘故吧,发现限制2000字节限小了,实际2000字节对应hex code + space也只有700来个字节长度。
怕怕,以后我要简单加密
以后随便写个啥子,我都要简单加密,哎,怕怕 看看先!:)
页:
[1]
2