def tamper(payload,**kwargs): line = payload.encode('hex') n=2 groups = [line[i:i+n] for i in range(0,len(line),n)] full = '' for x in groups: full = full + '\u00' +x retVal = full return retVal
我有一段 python 程序,运行环境是 linux,python2 想要把我的数据 转成\u00xx 这样的 json 能解析的数据然后发包请求,但是在实际过程中出现报错
'unicodeescape' codec can't decode bytes in position 0-3: truncated \uXXXX escape 然后我将 '\u00'更改为 r'\u00'之后报另一个错误 LookupError: 'hex' is not a text encoding; use codecs.encode() to handle arbitrary codecs'” 应该怎么解决有表哥吗
1
imn1 2020-09-01 15:56:05 +08:00
x 是个整数吧?
字符串+整数 不对 |
3
TEwrc 2020-09-01 16:13:07 +08:00
有一说一这排版不想看。。。
|
4
imn1 2020-09-01 16:13:56 +08:00
试试 str(x)
我不太熟 py2 的编码机制 如果按 py3 的理解,这个程序就是错的,lines 是字节串,x 也就是 line[i:i+2] 是双字节 双字节前面加 \u00,这个逻辑完全没理解 如果 payload 本身就是 str 的话,用 json 模块直接转 json 串好像更简单 |
6
N0phone OP @imn1 逻辑就是 字符串先 hex 编码 然后每两个字节取一个 组合再前面加上\u00 构成\u00xx 这样能被 json decode 的形式
|
7
imn1 2020-09-01 16:23:24 +08:00
unicode 没有 6 位编码,且 00 开头的字符
只有 \u0000-\u00ff \u001234 是错误的,\u1234 才是正确的 |
9
imn1 2020-09-01 16:30:35 +08:00
算了,我也不了解 py2,可能你的程序也没大问题( py3 第一句就不行了)
我建议是如果 payload 是字符串的话,转成 utf-8,然后 json.dumps 就足够了 |
11
sudoy 2020-09-01 16:41:44 +08:00
我可能不知道怎么帮助你,但是建议楼主下次发帖的时候,在代码前后加 ```, 就是那个跟波浪号~在同一个建的符号,这样别人帮你看代码的时候看得比较清楚
|
12
myxingkong 2020-09-01 16:42:35 +08:00
![Test](//imgur.com/mvRtsY8)
|
13
fasionchan 2020-09-01 16:43:47 +08:00 1
我猜你的 payload 是一个字节序列,它可能是 utf8 或者 gbk 编码的,它的 base16 编码并不是合法的 unicode 呀……
这没理解文本编码的结果,不如先看看文本编码是怎么回事: https://python.fasionchan.com/zh_CN/latest/practices/coding.html 为什么要自己拼接呢?按我的理解,你把数据解码成 unicode 字符串,然后调 repr 或 json.dumps 不就可以得到\uxxxx 这种形式了吗? ``` >>> data = '我们' >>> data '\xe6\x88\x91\xe4\xbb\xac' >>> data.decode('utf8') u'\u6211\u4eec' >>> repr(data.decode('utf8'))[2:-1] '\\u6211\\u4eec' >>> json.dumps(data.decode('utf8'))[1:-1] '\\u6211\\u4eec' ``` |