23rd Aug, 2006

Microsoft Outlook Express msgid

偽裝 Microsoft Outlook Express 來 send email 的時候被 SpamAssasin 發現 message id 是錯誤的, 於是從 Outlook Express 抄一些 message id 來替用。 但過幾天後 SpamAssasin 又將那個從 Outlook Express 抄出來的 message id 為錯誤, 於是看看 SpamAssasin 的 perl scripts, 發現以下用以判別 Outlook Express 的message id 的程序:

[geshi lang=perl]
sub check_outlook_message_id {
my ($self) = @_;
local ($_);

my $id = $self->get(‘MESSAGEID’);
return 0 if $id !~ /^<[0-9a-f]{4}([0-9a-f]{8})\$[0-9a-f]{8}\$[0-9a-f]{8}\@/;
[/geshi]

最後一行的 regular expression 是 capture message id 第 5 至第13 字元, 其實是運後的 Epoch time 的 16進位碼, 以下就是解碼法:

[geshi lang=perl]
my $timetoken = hex($1);
my $x = 0.0023283064365387;
my $y = 27111902.8329849;

my $fudge = 250;

$_ = $self->get(‘Date’);
$_ = Mail::SpamAssassin::Util::parse_rfc822_date($_) || 0;
my $expected = int (($_ * $x) + $y);
my $diff = $timetoken – $expected;
return 0 if (abs($diff) < $fudge);

$_ = $self->get(‘Received’);
/(\s.?\d+ \S\S\S \d+ \d+:\d+:\d+ \S+).*?$/;
$_ = Mail::SpamAssassin::Util::parse_rfc822_date($_) || 0;
$expected = int(($_ * $x) + $y);
$diff = $timetoken – $expected;

return (abs($diff) >= $fudge);
}
[/geshi]

解碼後對比相差值, 太大的話就是假 message id, 於是乎本人便可產生一個"正確" 的 Outlook Express message id, 順利偽裝!

相關文章

你的回應






Your response: