我有一个python函数,可以输出像THIS这样的字符串。
if (X1079) { clearTimeout (X1079); X1079 = null; }
X781 ('<FORM name="X58" method="POST" action="http://us21.chatzy.com/56024939146241"><DIV style="display:none;"><INPUT type="hidden" name="X1" value="218"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X579" value="1"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X691" value="NTYwMjQ5MzkxNDYyNDEmNTYwMjQ5MzkxNDYyNDEmMCZYMTY4JjE0MjI1NTUxMDkmSllJR0lOVk0mYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm"></DIV></FORM>');
现在,最后,是一个用Base64编码的字符串
NTYwMjQ5MzkxNDYyNDEmNTYwMjQ5MzkxNDYyNDEmMCZYMTY4JjE0MjI1NTUxMDkmSllJR0lOVk0mYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm
但我无法想象每次都提取这个字符串的任何实际方法,因为第一个(更长的)字符串每次都会改变 并且可能有不同的内容和长度,无论如何,那么Base64字符串被解码成这个。
56024939146241&56024939146241&0&X168&1422555109&JYIGINVM&ayy&FFFFFF&&1&3&1&uwoodles7776@jourrapide.com&7zsp0&1422803843&&0&
现在,我们也看到了这部分解码后的字符串
JYIGINVM
这就是我需要得到的东西,应该注意的是,上面所有字符串的内容每次都会改变,即使长度也是如此,所有的改变都会改变,但是有一些东西,比如&符号和值&#39; s第一个字符串中的名称。还应该注意的是,我们想要的第三个字符串中的八个字母总是在第五个&符号之后。
我已经尝试了太多次这样做,我的代码基于互联网上的研究,但我未能达到任何一致的结果,因此,我来到这里询问最有利的方式来进行如果可能的话,任务也是一些例子。先感谢您。 :)
第一个字符串的其他例子。
if (X1079) { clearTimeout (X1079); X1079 = null; }
X781 ('<FORM name="X58" method="POST" action="http://us23.chatzy.com/31039888252154"><DIV style="display:none;"><INPUT type="hidden" name="X1" value="218"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X579" value="1"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X691" value="MzEwMzk4ODgyNTIxNTQmMzEwMzk4ODgyNTIxNTQmMCZYMTY4JjE0MjI1NTY0MjcmVUZWS0VPUUEmYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm"></DIV></FORM>');
答案 0 :(得分:3)
这是一种re
方式:
import re
import base64
data = """
if (X1079) { clearTimeout (X1079); X1079 = null; }
X781 ('<FORM name="X58" method="POST" action="http://us23.chatzy.com/31039888252154"><DIV style="display:none;"><INPUT type="hidden" name="X1" value="218"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X579" value="1"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X691" value="MzEwMzk4ODgyNTIxNTQmMzEwMzk4ODgyNTIxNTQmMCZYMTY4JjE0MjI1NTY0MjcmVUZWS0VPUUEmYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm"></DIV></FORM>');"""
# Find length of characters starting with value=" and over 50 chars long
base64str = re.search("value=\"(\w{50,})\"", data).group(1)
# Decode
s = base64.decodebytes(base64str.encode()).decode(errors="ignore")
# Find section after 5th &
out = re.search("(.+?&){5}(.+?)&", s).group(2)
print(out)
替代的第一个re.search
是:
# Find the pattern name="X691" value="<base64 stuff>"
base64str = re.search("name=\"X691\" value=\"(\w+)\"", data).group(1)
这可能会更好,取决于您的输入长度变化多少。
为您的第一个示例输出JYIGINVM
,为第二个示例输出UFVKEOQA
。但是,根据您的输入变化的程度,您可能需要添加更多智能。