首页 > 其他分享 >UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf...--web逆向execjs读取js文件报错

UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf...--web逆向execjs读取js文件报错

时间:2024-08-18 10:26:21浏览次数:16  
标签:web encoding 0xaf js 报错 mode file open

背景

做web逆向的时候我们通常是纯python模拟js思路js+python直接逆向,第二种情况下我们要先获取到想要的js代码,js文件内测试接口后,通过python中的`execjs`模块实现相应接口的调用。通常我们会直接从网站扣下需要的代码(分析后硬扣或通过webpack),然后稍加删改和补环境就直接使用,但在学习逆向的过程中,为了帮助我们熟悉流程和思路,相当一部分人会有写注释的习惯。例如扣js并没有一次成功,每一错都在哪里犯错,哪里有坑,都会注释记录下来;亦或webpack有时候需要相关注释标记

这不,在我上次敲代码的过程中,相同的代码,成功运行之后我在js文件中稍微写了些注释,改了下参数再次运行,诶,居然报错了。如下:

问题分析

刚开始看到这个报错,我的第一反应是我的参数不能这么改,毕竟请求到数据发生变化后会产生千奇百怪的报错,于是我将参数改回之前成功运行一样,再次运行,额,还是报错。

这么一排查,那就只剩一种情况了:文件中的注释导致的。我删去注释,再次执行,运行成功并获取到对应数据。

这么想来问题就解决了,我再创建一个readMe.md把我相关的注释说明一下就OK了。

深入分析

但是问题真的解决了吗,上面的解决方案很显然是在规避问题,掩耳盗铃,有一种惹不起我还躲不起吗的感觉。事后我再思考了一下,一般遇到unicod-edecode-error,看字面上的报错很显然是编码的问题。再分析整个逻辑中哪里使用到了编码,很显然就是编译js代码的时候:

# 其实这里有三步,可以分开写,分别是打开→读取→编译
compiledJS = execjs.compile(open("loadInfosJS.js").read())

一般人看到这估计就差不多了,初学python文件操作时都会遇到类似的错误,直接在open()方法中添加参数encoding='utf-8'即可,如果在此处不设置,默认采用平台依赖。感兴趣的小伙伴可以阅读源码,这里截取一部分:

'''
重点看这一句:
In text mode, if encoding is not specified the encoding used is platform dependent: locale.getpreferredencoding(False) is called to get the current locale encoding.
'''

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True): # known special case of open
    """
    Open file and return a stream.  Raise OSError upon failure.
    
    file is either a text or byte string giving the name (and the path
    if the file isn't in the current working directory) of the file to
    be opened or an integer file descriptor of the file to be
    wrapped. (If a file descriptor is given, it is closed when the
    returned I/O object is closed, unless closefd is set to False.)
    
    mode is an optional string that specifies the mode in which the file
    is opened. It defaults to 'r' which means open for reading in text
    mode.  Other common values are 'w' for writing (truncating the file if
    it already exists), 'x' for creating and writing to a new file, and
    'a' for appending (which on some Unix systems, means that all writes
    append to the end of the file regardless of the current seek position).
    In text mode, if encoding is not specified the encoding used is platform
    dependent: locale.getpreferredencoding(False) is called to get the
    current locale encoding. (For reading and writing raw bytes use binary
    mode and leave encoding unspecified.)
    ...
    ...
    """

也就是将我的代码改为下面这样,js文件中就能正常写注释了。

compiledJS = execjs.compile(open("loadInfosJS.js",encoding='utf-8').read())

 关键点总结

报错分析

文件操作

善读源码

标签:web,encoding,0xaf,js,报错,mode,file,open
From: https://blog.csdn.net/weixin_73334344/article/details/141292243

相关文章

  • WebRTC音视频开发读书笔记(一)
    一、基本概念WebRTC(WebReal-TimeCommunication,网页即时通信)于2011年6月1日开源,并被纳入万维网联盟的W3C推荐标准,它通过简单API为浏览器和移动应用提供实时通信RTC功能。1、特点跨平台:可以在Web,Android、IOS、Windows、MacOS、Linux环境运行。实时传输:速度快、延迟低。......
  • Vue 报错error:0308010C:digital envelope routines::unsupported
    目录Vue报错error:0308010C:digitalenveloperoutines::unsupported方法1.打开终端(按健win+R弹出窗口,键盘输入cmd,然后敲回车)并按照说明粘贴这些:方法2.安装vnm及node版本方法3.在项目package.json文件中增加配置Vue报错error:0308010C:digitalenveloperoutine......
  • JSP基于JAVAWEB医院挂号系统jep98(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,医生,护士,科室信息,预约时间段,出诊信息,预约挂号,门诊病历,医生打卡,护士打卡,就诊评价技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技......
  • JSP基于JavaWeb的CRM系统684y6程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:公告信息,部门,职位,用户,客户分组,客户信息,拜访记录,商机信息,订单信息技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoo......
  • 3.WebPortal
    创建接口controller-interfacesinterfaces>newinterfacename:webportalvlanid:103interfaceaddressvlanidentifier:103ipaddress:10.1.103.253netmask:255.255.255.0gateway:10.1.103.254physicalinformationportnumber:1(1号物理接口出去)backupport:0active......
  • 在linux上架设Web服务器Apache(Ubuntu)
    欢迎诸位来阅读在下的博文~在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力!江山如画,客心如若,欢迎到访,一展风采文章目录背景1.安装Apache2.启动和检查Apache服务3.配置防火墙4.配置虚拟主机5.启用虚拟主机并重启Apache6.配置域......
  • 聊聊JS中的WebSocket
    你好,我是沐爸,欢迎点赞、收藏和关注。个人知乎在JavaScript中,使用WebSocket非常简单直观。通过几行代码,你就可以轻松创建一个WebSocket连接,并监听来自服务器的消息。无论是开发实时聊天应用、在线游戏、实时数据分析平台,还是任何需要实时数据交互的场景,WebSocket都能为你提......
  • Web 端项目系统访问页面很慢,后台数据返回很快,网络也没问题,是什么导致的呢?
    一、前端方面可能的原因1.页面加载过多资源•可能页面中包含了大量的图片、视频、脚本等资源,这些资源的加载会占用大量时间。可以检查页面的资源大小和数量,看是否有可以优化的地方,比如压缩图片、合并脚本等。2.前端代码效率问题•检查前端代码是否存在性能瓶颈。例如,Ja......
  • java+vue计算机毕设基于Web的在线考试管理信息系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和教育改革的不断深入,传统考试模式已难以满足现代教育的需求。在线考试作为一种新兴的教育评估方式,凭借其便捷性、高效性和灵......
  • 【免费】ssm驾校预约管理系统jsp|毕业设计|Javaweb项目
    收藏点赞不迷路 关注作者有好处编号:ssm560ssm驾校预约管理系统jsp开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven1.系统展示2.万字文档展示第5章系统详细设计系统实现这个章节的内容主要还是展示系统的功能界面设计......