可不可以在外面修改__init__方法里面的值
class Popen(object):_child_created = False# Set here since __del__ checks it
def __init__(self, args, bufsize=-1, executable=None,
stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=True,
shell=False, cwd=None, env=None, universal_newlines=None,
startupinfo=None, creationflags=0,
restore_signals=True, start_new_session=False,
pass_fds=(), *, user=None, group=None, extra_groups=None,
encoding=None, errors=None, text=None, umask=-1):
上面这段代码是python里面自带的, 在subprocess.py文件中, 在运行自己代码的时候报错:
File "d:\pythoninterpreter\lib\subprocess.py", line 1479, in _readerthread
buffer.append(fh.read())
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa5 in position 112: illegal multibyte sequence
把上面的subprocess.py的Popen里面的__init__里面的encoding=None改成encoding='utf-8'问题就可以解决, 但是我不想在源码里面修改,可不可以在自己写的代码里修改
from subprocess import Popen
下面就不会写了, 请各位大佬帮忙解决
就是我在写a=Popen()后把CTRL+左键跳进Popen后跳到了subprocess.pyi里面了而不是跳到subprocess.py里面,是不是导入的时候就导入错了 这需要修改你自己的代码,不需要修改上一级的代码 wp231957 发表于 2022-6-18 07:38
这需要修改你自己的代码,不需要修改上一级的代码
import requests
import execjs
url = 'https://www.endata.com.cn/API/GetData.ashx'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}
data = {
'year': '2022',
'MethodName': 'BoxOffice_GetYearInfoData',
}
response = requests.post(url, headers=headers, data=data).content.decode()
with open('艺恩js代码.js', 'r', encoding='utf-8')as f:
js_code = f.read()
exe = execjs.compile(js_code)
res = exe.call('get', response)
print(res)
这是我自己写的代码,读文件那里已经写了encoding='utf-8'还是报那个错, 在源码里把encoding修改了就不报错了 本帖最后由 jackz007 于 2022-6-18 08:32 编辑
告诉你一个原则,永远不要怀疑一个全世界都在依赖的系统,更不要试图改变它,因为,如果真这样做的话,很可能会后患无穷,退一万步来说,即便你是对的,你也只能改自己的一台电脑,根本无济于事。你的代码依然是出不得家门! 月下孤井 发表于 2022-6-18 08:06
import requests
import execjs
url = 'https://www.endata.com.cn/API/GetData.ashx'
这得看你这个 艺恩js代码.js 它使用了什么编码
本帖最后由 hrpzcf 于 2022-6-18 14:24 编辑
这是execjs的问题而不是subprocess的问题,也就是execjs调用subprocess的时候没有正确传入编码参数,鉴于execjs已经停更,你应该考虑修改execjs。
你可以指定encoding参数
for subprocess import Popen
a = Popen(encoding="utf-8") 临时号 发表于 2022-6-18 14:03
你可以指定encoding参数
这个方法我试过了, 还是会报错的:
Traceback (most recent call last):
File "D:\app\spiders\JS逆向\艺恩反混淆案例\code_.py", line 4, in <module>
a = Popen(encoding="utf-8")
TypeError: __init__() missing 1 required positional argument: 'args' hrpzcf 发表于 2022-6-18 13:36
这是execjs的问题而不是subprocess的问题,也就是execjs调用subprocess的时候没有正确传入编码参数,鉴于ex ...
多谢大佬指教, 按照您的方法问题可以解决, 但是还是得更改源码, 可不可在不更改源码的前提下解决问题呢 wp231957 发表于 2022-6-18 11:06
这得看你这个 艺恩js代码.js 它使用了什么编码
艺恩js代码.js好像也是用的UTF-8, 但是里面的函数都是混淆过的 wp231957 发表于 2022-6-18 11:06
这得看你这个 艺恩js代码.js 它使用了什么编码
var webDES = function() {
var _0x4da59e = {
'bUIIa': function _0x2a2af9(_0x779387, _0x4a4fec) {
return _0x779387 + _0x4a4fec;
}
};
var _0x9843d3 = function(_0x29d556, _0xcc6df, _0x3d7020) {
if (0x0 == _0xcc6df)
return _0x29d556(_0x3d7020);
var _0x48914b;
_0x48914b = '' + _0x29d556(0x0, _0xcc6df);
return _0x48914b += _0x29d556['substr'](_0x4da59e(_0xcc6df, _0x3d7020));
};
this = function(_0xa0c834) {
var _0x51eedc = {
'pKENi': function _0x2f627(_0x5b6f5a, _0x440924) {
return _0x5b6f5a === _0x440924;
},
'wnfPa': 'ZGz',
'VMmle': '7|1|8|9|5|2|3|6|0|4',
'GKWFf': function _0x1a4e13(_0x40cfde, _0x16f3c2) {
return _0x40cfde == _0x16f3c2;
},
'MUPgQ': function _0x342f0d(_0x19038b, _0x4004d6) {
return _0x19038b >= _0x4004d6;
},
'hLXma': function _0x55adaf(_0x45a871, _0x161bdf) {
return _0x45a871 + _0x161bdf;
},
'JdOlO': function _0x13e00a(_0x5899a9, _0x4bb34d) {
return _0x5899a9 + _0x4bb34d;
},
'qrTpg': function _0x1198fb(_0x55b317, _0x22e1db, _0x1b091a) {
return _0x55b317(_0x22e1db, _0x1b091a);
},
'pdmMk': function _0xe2b022(_0x4af286, _0x4c2fd4) {
return _0x4af286 - _0x4c2fd4;
},
'xVKWW': function _0x1094a3(_0x5f3627, _0x2a0ac5, _0x3ad2e5) {
return _0x5f3627(_0x2a0ac5, _0x3ad2e5);
}
};
if (_0x51eedc(_0x2246('0x259', 'E&PI'), _0x51eedc['wnfPa'])) {
this['_append'](a);
return this();
} else {
var _0x492a62 = _0x51eedc('|')
, _0x356b01 = 0x0;
while (!![]) {
switch (_0x492a62) {
case '0':
_0x554c90 = _grsa_JS['decrypt']({
'ciphertext': _grsa_JS['enc']['parse'](_0xa0c834)
}, _0x2cf8ae, {
'iv': _0x554c90,
'mode': _grsa_JS,
'padding': _grsa_JS
})(_grsa_JS['enc']2BX')]);
continue;
case '1':
if (_0x51eedc(null, _0xa0c834) || _0x51eedc(0x10, _0xa0c834['length']))
return _0xa0c834;
continue;
case '2':
_0xa0c834 = _0x9843d3(_0xa0c834, _0x2cf8ae, 0x8);
continue;
case '3':
_0x2cf8ae = _grsa_JS(_0x554c90);
continue;
case '4':
return _0x554c90(0x0, _0x51eedc(_0x554c90('}'), 0x1));
case '5':
_0x554c90 = _0xa0c834(_0x2cf8ae, 0x8);
continue;
case '6':
_0x554c90 = _grsa_JS['Utf8']['parse'](_0x554c90);
continue;
case '7':
if (!navigator || !navigator)
continue;
case '8':
var _0x554c90 = _0x51eedc(_0x51eedc(parseInt, _0xa0c834(_0xa0c834['length'], 0x1)], 0x10), 0x9)
, _0x2cf8ae = _0x51eedc(parseInt, _0xa0c834, 0x10);
continue;
case '9':
_0xa0c834 = _0x9843d3(_0xa0c834, _0x554c90, 0x1);
continue;
}
break;
}
}
}
;
}
, webInstace = new webDES();
类似于这种, 会不会跟混淆之后的函数名变量名之类的有关 jackz007 发表于 2022-6-18 08:31
告诉你一个原则,永远不要怀疑一个全世界都在依赖的系统,更不要试图改变它,因为,如果真这样做的 ...
是的,所以我才想在不更改源码的前提下把问题解决 月下孤井 发表于 2022-6-18 15:15
多谢大佬指教, 按照您的方法问题可以解决, 但是还是得更改源码, 可不可在不更改源码的前提下解决问题呢
恐怕不行,你也看到源码了,execjs调用Popen的时候根本不关心encoding参数,所以你的代码也没法通过传参给execjs的方式让他以正确的encoding参数调用Popen。
页:
[1]