逆向工程字符串 masking/obfuscating 函数
Reverse engineer a string masking/obfuscating function
我想取消屏蔽或取消混淆一段包含一些字符的 base64 编码字符串。
例如,我知道 VovL5SaV_iSBx6oAFGypsTCO
匹配 00000000
。有没有办法知道更多的数据(输入和输出)来找出混淆字符串的算法?我找不到任何东西。
一些例子:
- 如果
A
长,f(A)
的结果长度会有所不同 f(A)会更长,如果A较短,f(A)
会更短。
- 如果 A 和 B 的结尾相似(例如 aaaaa@gmail.com 和 bbbbb@gmail.com),那么 f(A) 和 f(B) 也会有相同的结尾.
根据您提到的内容,加密似乎使用了分组密码:
关于你的块密码的一个 nive 属性 是块的加密不依赖于之前的那个,这并不总是正确的,(并且是非常糟糕的做法=对攻击者来说非常好),一个这样做的分组密码是:
ECB:https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29,如您所见,每次加密都使用相同的密钥,并且块密码可以等效于 XOR,允许猜测 decryopt 任何内容。检查长度超过一个块的尝试 f(00000000000000) 并查看模式是否重复。
如果不是这种情况,您可能会使用类似 CTR 的东西:https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29 这里如果您设法计算,"key(i)"=blockcipher(key,nonce(i)) 用于使用 XOR 加密每个块再次 f(000000000000) 并找到 key(1), key(2)... 你可以稍后使用它们来解密你想要的任何东西。如果你能给我提供混淆的工具我也许能解密你想要的
鉴于你所说的和发表的评论,我会说是的,了解更多的数据对 [obfuscated/cleartext]
可以帮助你理解底层算法。
您将不得不分析各种属性,例如字符串长度和字符冗余,以及字节值偏移和小变化的变化(例如:将 000000
更改为 000001
)此外,控制如果混淆的字符串是可预测的或可重复的。
最后,试试看能不能伪造自己的混淆文本,看看结果。这可以通过模糊测试来实现,并且可以帮助您以更积极的方式预测算法。
从你所说的来看,我会说这不是数据的安全块密码,而是一种替代。它可以是字节级的 ROT13 或 XOR,两者都带有一些填充(元数据?)。
请注意 _
似乎充当分隔符:无法解码原样的字符串,但 _
周围的两个部分都可以。
我很想帮你解决这个问题,但在 United States Digital Millennium copyright act section 1201 下这是非法的。也许在一个更自由的国家,有人会给出更好的答案。
1201. (1) A. No person shall circumvent a technological measure
that effectively controls access to a work protected under this title.
我想取消屏蔽或取消混淆一段包含一些字符的 base64 编码字符串。
例如,我知道 VovL5SaV_iSBx6oAFGypsTCO
匹配 00000000
。有没有办法知道更多的数据(输入和输出)来找出混淆字符串的算法?我找不到任何东西。
一些例子:
- 如果
A
长,f(A)
的结果长度会有所不同 f(A)会更长,如果A较短,f(A)
会更短。 - 如果 A 和 B 的结尾相似(例如 aaaaa@gmail.com 和 bbbbb@gmail.com),那么 f(A) 和 f(B) 也会有相同的结尾.
根据您提到的内容,加密似乎使用了分组密码: 关于你的块密码的一个 nive 属性 是块的加密不依赖于之前的那个,这并不总是正确的,(并且是非常糟糕的做法=对攻击者来说非常好),一个这样做的分组密码是: ECB:https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29,如您所见,每次加密都使用相同的密钥,并且块密码可以等效于 XOR,允许猜测 decryopt 任何内容。检查长度超过一个块的尝试 f(00000000000000) 并查看模式是否重复。 如果不是这种情况,您可能会使用类似 CTR 的东西:https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29 这里如果您设法计算,"key(i)"=blockcipher(key,nonce(i)) 用于使用 XOR 加密每个块再次 f(000000000000) 并找到 key(1), key(2)... 你可以稍后使用它们来解密你想要的任何东西。如果你能给我提供混淆的工具我也许能解密你想要的
鉴于你所说的和发表的评论,我会说是的,了解更多的数据对 [obfuscated/cleartext]
可以帮助你理解底层算法。
您将不得不分析各种属性,例如字符串长度和字符冗余,以及字节值偏移和小变化的变化(例如:将 000000
更改为 000001
)此外,控制如果混淆的字符串是可预测的或可重复的。
最后,试试看能不能伪造自己的混淆文本,看看结果。这可以通过模糊测试来实现,并且可以帮助您以更积极的方式预测算法。
从你所说的来看,我会说这不是数据的安全块密码,而是一种替代。它可以是字节级的 ROT13 或 XOR,两者都带有一些填充(元数据?)。
请注意 _
似乎充当分隔符:无法解码原样的字符串,但 _
周围的两个部分都可以。
我很想帮你解决这个问题,但在 United States Digital Millennium copyright act section 1201 下这是非法的。也许在一个更自由的国家,有人会给出更好的答案。
1201. (1) A. No person shall circumvent a technological measure
that effectively controls access to a work protected under this title.