月下孤井 发表于 2022-6-18 07:32:01

可不可以在外面修改__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:53

这需要修改你自己的代码,不需要修改上一级的代码

月下孤井 发表于 2022-6-18 08:06:57

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:31:54

本帖最后由 jackz007 于 2022-6-18 08:32 编辑

      告诉你一个原则,永远不要怀疑一个全世界都在依赖的系统,更不要试图改变它,因为,如果真这样做的话,很可能会后患无穷,退一万步来说,即便你是对的,你也只能改自己的一台电脑,根本无济于事。你的代码依然是出不得家门!

wp231957 发表于 2022-6-18 11:06:40

月下孤井 发表于 2022-6-18 08:06
import requests
import execjs
url = 'https://www.endata.com.cn/API/GetData.ashx'


这得看你这个   艺恩js代码.js   它使用了什么编码

hrpzcf 发表于 2022-6-18 13:36:08

本帖最后由 hrpzcf 于 2022-6-18 14:24 编辑

这是execjs的问题而不是subprocess的问题,也就是execjs调用subprocess的时候没有正确传入编码参数,鉴于execjs已经停更,你应该考虑修改execjs。

临时号 发表于 2022-6-18 14:03:53

你可以指定encoding参数
for subprocess import Popen
a = Popen(encoding="utf-8")

月下孤井 发表于 2022-6-18 15:04:51

临时号 发表于 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'

月下孤井 发表于 2022-6-18 15:15:50

hrpzcf 发表于 2022-6-18 13:36
这是execjs的问题而不是subprocess的问题,也就是execjs调用subprocess的时候没有正确传入编码参数,鉴于ex ...

多谢大佬指教, 按照您的方法问题可以解决, 但是还是得更改源码, 可不可在不更改源码的前提下解决问题呢

月下孤井 发表于 2022-6-18 15:21:00

wp231957 发表于 2022-6-18 11:06
这得看你这个   艺恩js代码.js   它使用了什么编码

艺恩js代码.js好像也是用的UTF-8, 但是里面的函数都是混淆过的

月下孤井 发表于 2022-6-18 15:22:55

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();
类似于这种, 会不会跟混淆之后的函数名变量名之类的有关

月下孤井 发表于 2022-6-18 15:24:27

jackz007 发表于 2022-6-18 08:31
告诉你一个原则,永远不要怀疑一个全世界都在依赖的系统,更不要试图改变它,因为,如果真这样做的 ...

是的,所以我才想在不更改源码的前提下把问题解决

hrpzcf 发表于 2022-6-18 17:35:51

月下孤井 发表于 2022-6-18 15:15
多谢大佬指教, 按照您的方法问题可以解决, 但是还是得更改源码, 可不可在不更改源码的前提下解决问题呢

恐怕不行,你也看到源码了,execjs调用Popen的时候根本不关心encoding参数,所以你的代码也没法通过传参给execjs的方式让他以正确的encoding参数调用Popen。
页: [1]
查看完整版本: 可不可以在外面修改__init__方法里面的值