鱼C论坛

 找回密码
 立即注册
查看: 1406|回复: 12

[已解决]可不可以在外面修改__init__方法里面的值

[复制链接]
发表于 2022-6-18 07:32:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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里面,是不是导入的时候就导入错了
最佳答案
2022-6-18 13:36:08
本帖最后由 hrpzcf 于 2022-6-18 14:24 编辑

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

屏幕截图 2022-06-18 142212.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-18 07:38:53 From FishC Mobile | 显示全部楼层
这需要修改你自己的代码,不需要修改上一级的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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修改了就不报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-18 08:31:54 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2022-6-18 08:32 编辑

        告诉你一个原则,永远不要怀疑一个全世界都在依赖的系统,更不要试图改变它,因为,如果真这样做的话,很可能会后患无穷,退一万步来说,即便你是对的,你也只能改自己的一台电脑,根本无济于事。你的代码依然是出不得家门!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-6-18 11:06:40 From FishC Mobile | 显示全部楼层
月下孤井 发表于 2022-6-18 08:06
import requests
import execjs
url = 'https://www.endata.com.cn/API/GetData.ashx'

这得看你这个   艺恩js代码.js   它使用了什么编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-18 13:36:08 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hrpzcf 于 2022-6-18 14:24 编辑

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

屏幕截图 2022-06-18 142212.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-18 14:03:53 | 显示全部楼层
你可以指定encoding参数
for subprocess import Popen
a = Popen(encoding="utf-8")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

多谢大佬指教, 按照您的方法问题可以解决, 但是还是得更改源码, 可不可在不更改源码的前提下解决问题呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-18 15:21:00 | 显示全部楼层
wp231957 发表于 2022-6-18 11:06
这得看你这个   艺恩js代码.js   它使用了什么编码

艺恩js代码.js好像也是用的UTF-8, 但是里面的函数都是混淆过的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[_0x2246('0x254', '4VZ$')](_0x3d7020);
        var _0x48914b;
        _0x48914b = '' + _0x29d556[_0x2246('0x255', 'GL3Q')](0x0, _0xcc6df);
        return _0x48914b += _0x29d556['substr'](_0x4da59e[_0x2246('0x256', 'DK[&')](_0xcc6df, _0x3d7020));
    };
    this[_0x2246('0x257', 'nArV')] = 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('0x258', '@1Ws')](_0x2246('0x259', 'E&PI'), _0x51eedc['wnfPa'])) {
            this['_append'](a);
            return this[_0x2246('0x25a', 'GL3Q')]();
        } else {
            var _0x492a62 = _0x51eedc[_0x2246('0x25b', '&59Q')][_0x2246('0x25c', ')q#9')]('|')
              , _0x356b01 = 0x0;
            while (!![]) {
                switch (_0x492a62[_0x356b01++]) {
                case '0':
                    _0x554c90 = _grsa_JS[_0x2246('0x25d', 'E&PI')]['decrypt']({
                        'ciphertext': _grsa_JS['enc'][_0x2246('0x25e', 'sy^o')]['parse'](_0xa0c834)
                    }, _0x2cf8ae, {
                        'iv': _0x554c90,
                        'mode': _grsa_JS[_0x2246('0x16c', 'O^50')][_0x2246('0x25f', 'Who^')],
                        'padding': _grsa_JS[_0x2246('0x260', '7IfV')][_0x2246('0x261', 'E&PI')]
                    })[_0x2246('0x1c', 'yY#5')](_grsa_JS['enc'][_0x2246('0x262', ']2BX')]);
                    continue;
                case '1':
                    if (_0x51eedc[_0x2246('0x263', 'Jsmq')](null, _0xa0c834) || _0x51eedc[_0x2246('0x264', '!2eC')](0x10, _0xa0c834['length']))
                        return _0xa0c834;
                    continue;
                case '2':
                    _0xa0c834 = _0x9843d3(_0xa0c834, _0x2cf8ae, 0x8);
                    continue;
                case '3':
                    _0x2cf8ae = _grsa_JS[_0x2246('0x265', 'RQ2o')][_0x2246('0x266', '3j7z')][_0x2246('0x267', 'RQ2o')](_0x554c90);
                    continue;
                case '4':
                    return _0x554c90[_0x2246('0x268', 'cs*4')](0x0, _0x51eedc[_0x2246('0x269', 'MVsm')](_0x554c90[_0x2246('0x26a', '0J6f')]('}'), 0x1));
                case '5':
                    _0x554c90 = _0xa0c834[_0x2246('0x26b', 'UwHa')](_0x2cf8ae, 0x8);
                    continue;
                case '6':
                    _0x554c90 = _grsa_JS[_0x2246('0x26c', '4VZ$')]['Utf8']['parse'](_0x554c90);
                    continue;
                case '7':
                    if (!navigator || !navigator[_0x2246('0x26d', '0I#o')])
                    continue;
                case '8':
                    var _0x554c90 = _0x51eedc[_0x2246('0x26e', 'Yb4P')](_0x51eedc[_0x2246('0x26f', 'BQ5p')](parseInt, _0xa0c834[_0x51eedc[_0x2246('0x270', 'Z2VK')](_0xa0c834['length'], 0x1)], 0x10), 0x9)
                      , _0x2cf8ae = _0x51eedc[_0x2246('0x271', 'yY#5')](parseInt, _0xa0c834[_0x554c90], 0x10);
                    continue;
                case '9':
                    _0xa0c834 = _0x9843d3(_0xa0c834, _0x554c90, 0x1);
                    continue;
                }
                break;
            }
        }
    }
    ;
}
  , webInstace = new webDES();
类似于这种, 会不会跟混淆之后的函数名变量名之类的有关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是的,所以我才想在不更改源码的前提下把问题解决
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

恐怕不行,你也看到源码了,execjs调用Popen的时候根本不关心encoding参数,所以你的代码也没法通过传参给execjs的方式让他以正确的encoding参数调用Popen。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 20:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表