邮件头中的SPAMCAUSE字段是否可以解码?

10
我想解码这个字符串:
X-OVH-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeelgedrvdduucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfenuceurghilhhouhhtmecufedttdenucgohfhorhgsihguuggvnhfjughrucdlhedttddm

我该如何做到这一点?

4个回答

8

我通过改进IkraiderDoubleYou提供的Python解决方案,并添加了JavaScript解决方案。

Python:

def Decode(msg):
    return ''.join([chr(ord(msg[i * 2]) + ord(msg[i * 2 + 1]) - 1768 + ord(msg[i * 2 + 1 - (i & 1)]) * 16) for i in range(len(msg) // 2)])

print(Decode('gggruggvucftvghtrhho'))

JavaScript:

function Decode(msg)
{
    return Array(msg.length >> 1).fill(0).map((_, i) => String.fromCharCode(msg[i * 2].charCodeAt(0) + msg[i * 2 + 1].charCodeAt(0) - 1768 + (msg[i * 2 + 1 - (i & 1)].charCodeAt(0) << 4))).join('');
}

console.log(Decode('gggruggvucftvghtrhho'));

宝贝!对于懒人来说,这是一个快速的小把戏,可以在线测试你的数据 - https://jsfiddle.net/rfgb3qme/2/ - undefined

8

3
这绝对不是一个“好”的答案,因为承认我破解了他们使用的密码会让我陷入麻烦,但他要求提供破译工具,我指向的Tor隐藏服务可以做到这一点。(我想一个合适的回答是“没有合法的方法可以这样做”) - Asmadeus
1
@Asmadeus Tor 隐藏服务有什么违法之处?Tor节点本身并不违法(至少在美国是这样)。 - TylerH
@TylerH 拥有Tor服务没有任何问题;但最初提供解密服务的网站已被vadesecure关闭。无论如何,这似乎并没有阻止其他人公开发布类似的代码 - 而且vadesecure似乎还没有上钩,所以它可能会保持公开状态 :) - Asmadeus

4

lkraider的优秀Python答案开始,我提高了准确性。结果发现偏移字符(c..g)交替附加和插入。因此,不仅需要检查其中一个是否在配对中,而且还需要通过跟踪偶数或奇数对来区分例如fhhf

def decode(msg):
    text = ""
    for i in range(0, len(msg), 2):
        # add position as extra parameter
        text += unrot(msg[i: i + 2], i // 2)
    return text


def unrot(pair, pos, key=ord('x')):
    # "even" position => 2nd char is offset
    if pos % 2 == 0:
        # swap letters in pair
        pair = pair[1] + pair[0]
    # treat 1st char as offset
    offset = (ord('g') - ord(pair[0])) * 16
    # map to original character
    return chr(sum(ord(c) for c in pair) - key - offset)

print(decode('gggruggvucftvghtrhho'))

https://gist.github.com/DoubleYouEl/e3de97293ce3d5452b3be7a336a06ad7


在许多垃圾邮件来源上进行了测试,取得了成功的结果。 - dan

2

看起来是通过旋转字符进行混淆。我试着用Python解决了这个问题。它不是完美的,但大部分似乎可以工作:

def decode(msg):
    text = []
    for i in range(0, len(msg), 2):
        text.append(unrot(msg[i: i + 2]))
    return str.join('', text)


def unrot(pair, key=ord('x')):
    offset = 0
    for c in 'cdefgh':
        if c in pair:
            offset = (ord('g') - ord(c)) * 16
            break
    return chr(sum(ord(c) for c in pair) - key - offset)


print(decode('gggruggvucftvghtrhho'))

https://gist.github.com/lkraider/9530798a695586fc1580d0728966f6f0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接