creator jsc 加解密

72 阅读2分钟
var testObj = Object.create(null, { a: { value: 100 } })
Object.defineProperty(testObj, 'a', { writable: true })
testObj.a = 200
console.log(testObj.a)

6567d6d255f5f4047cd65adea5957cb.png

20822c1e82bc0399a33d1c3beababc1.png

倒着查找的

  • hack require 重定向
const old_require = require;
require = function (path) {
    console.log(path)
    return old_require(path)
}

let xxtea = require('xxtea-node')
var func = xxtea.encrypt
xxtea.encrypt = function (a, b) {
    debugger;
    return func(a, b)
}

在使用 pako.gzip 对数据进行压缩时,生成的 zipData 是一个 Uint8Array 类型的数组,它包含了gzip格式的压缩数据。Gzip格式由一系列的字段组成,用来存储压缩信息和压缩后的数据。修改 zipData 数组中特定位置的值会直接影响gzip数据的内部结构。

对于 zipData[9] = 10; 这行代码,它修改的是gzip头部中的一个字节。gzip文件格式的头部通常包含以下几部分:

  1. ID1 和 ID2:这两个字节是固定的,分别是 0x1f 和 0x8b,用于标识这个文件是gzip格式。
  2. CM(压缩方法):紧随ID字节之后的是一个字节,表示使用的压缩方法。对于gzip来说,这个值通常是 0x08,表示使用deflate压缩算法。
  3. FLG(标志字节):指示是否使用了额外的选项,如CRC校验、额外字段、原始文件名等。
  4. MTIME(修改时间):接下来的四个字节代表文件的最后修改时间,Unix时间戳格式。
  5. XFL(额外标志):用于提供特定于压缩方法的额外信息。对于deflate,这个字段目前没有被广泛使用,通常设置为 0x00 或 0x02(最大压缩,但慢),0x04(快速)。
  6. OS(操作系统):表示创建gzip文件的操作系统。这是gzip头部的最后一个字段。

在上述结构中,zipData[9] 实际上是修改了 OS 字段。OS字段是一个字节大小,用于指示创建gzip文件的操作系统。根据gzip规范,这个字节的可能值包括:

  • 0 - FAT 文件系统(MS-DOS、OS/2、NT/Win32)
  • 1 - Amiga
  • 2 - VMS(或OpenVMS)
  • 3 - Unix
  • 4 - VM/CMS
  • 5 - Atari TOS
  • 6 - HPFS 文件系统(OS/2、NT)
  • 7 - Macintosh
  • 8 - Z-System
  • 9 - CP/M
  • 10 - TOPS-20
  • 11 - NTFS 文件系统(NT)
  • 12 - QDOS
  • 13 - Acorn RISCOS
  • 255 - 未知

因此,zipData[9] = 10; 这行代码将OS字段设置为 10,意味着这个gzip文件标记为在TOPS-20系统上创建。然而,实际上这个值在大多数应用场景下并不重要,很少有软件会根据这个字段改变它们的行为。修改这个值不会影响gzip数据的解压缩,但如果你在处理需要特定OS值的特殊情况,就需要注意这一点。

3699b20c1afc7e3c3f186055d22920c.png

可能是历史原因