如何更改字符串,以使近似字符串匹配的变体不能与原始字符串匹配?
我制作了一个基于频道日志文件运行游戏的IRCbot。它打印日志中的引号,玩家通过猜测"谁说它"来收集点数。这个频道相当令人讨厌,其中一个玩家花了不到30分钟就建立了一个每次赢得比赛的机器人。我意识到手动作弊也很容易且无法防范,但可以认为这是自动机器人之间的竞争。我想更新我的机器人,以便任何完全自动化的机器人都无法玩游戏:)
我考虑从引号中随机删除字符,但agrep仍然可以匹配字符串。我考虑用类似的替代角色替换一些角色,但这对于逆向工程来说是微不足道的。我正在寻找难以打破的想法。
示例行:
[14:15] <baobot> [QUOTE 13/15] Who famously declared "minulla ainakin paperin tekemisessä 1% ajasta menee algon suunnitteluun ja 99% menee paperin kirjoittamiseen"?
答案 0 :(得分:1)
以ascii-art打印您的报价。
使用与命令行工具figlet或厕所(explaination)类似的东西。
以下是一个简单示例:例如string2ascii-generator。
为了帮助您入门,您可能希望从figlet复制源代码。
答案 1 :(得分:1)
任何可用于加扰的东西都很可能被解读。以下是您的实验的一些建议:
如果第一个和最后一个字母到位并且内部部分被扰乱,人类可以阅读单词。
您也可以进行替换,例如精英说话,用数字替换一些字符。
您可能能够找到其他语言中对使用的字母看起来很熟悉的其他字符,这意味着您也可以随机替换它们。
您还可以尝试随机化空格的位置。因此,将它们从原始位置移开然后移动它们,或完全移除它们。
反转一些词语。
找到用英语拼写单词的方法......&#34; ph&#34;听起来像&#34; f&#34;所以你可以找到并替换它们中的一些。
尝试上面不同的组合,删除所有空格,CaMEl CaSE单词,然后进行字符替换等。
总的来说,有很多方法可以帮助让它变得更难,但是如果你每次都遵循固定的模式,那么它就可以更容易地编程来解除它。如果你随机做了不同的事情,那么一个输入可以产生几个不同的输出,那么某人编写一个程序来反转这个过程会更难。
答案 2 :(得分:0)
使用Google翻译。
例如,我将你的报价用于俄语,然后用英语,然后回到芬兰语,然后得到
Mininla on ainakin 1%ajasta kirjassa otetaan suunnittelussa Algon ja 99%menee kirjoituspaperia
我不知道这是不是一个正确的芬兰语;至于我可以说它仍然有点可识别。如果您认为它对于近似搜索来说太容易识别,请进行更多中间翻译。