diff --git a/README.md b/README.md index 8b34db5..f8902b4 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Please report any issue you have with those (only for mainstream browsers) Also, use this if you plan to use b4k's archive. - [Install 4chanX (recommended)](https://www.4chan-x.net/builds/4chan-X.user.js) -- Install the correct WebExtension for your Browser ([Firefox](https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.267.xpi) or [Chrome-based](https://chrome.google.com/webstore/detail/pngextraembedder/bfhpobiikighljcapcfmfganodihbicj)) +- Install the correct WebExtension for your Browser ([Firefox](https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.268.xpi) or [Chrome-based](https://chrome.google.com/webstore/detail/pngextraembedder/bfhpobiikighljcapcfmfganodihbicj)) For FF users, the extension is signed so you can just drag and drop it on your about:addons tab. diff --git a/chrome/dist/main.js b/chrome/dist/main.js index 8a92973..02ef6f9 100644 --- a/chrome/dist/main.js +++ b/chrome/dist/main.js @@ -51,7 +51,7 @@ var define_BUILD_VERSION_default; var init_define_BUILD_VERSION = __esm({ ""() { - define_BUILD_VERSION_default = [0, 267]; + define_BUILD_VERSION_default = [0, 268]; } }); @@ -15455,7 +15455,7 @@ maxe: 5, conc: 8, ho: false, - blacklist: ["guro", "scat", "ryona", "gore"], + blacklist: [], rsources: [], ...localLoad("settingsv2", {}) }); @@ -18344,17 +18344,17 @@ return [ret, () => b]; }; var inject_data = async (container, injb) => { - let magic3 = false; + let magic4 = false; const [writestream, extract7] = BufferWriteStream2(); const encoder = new PNGEncoder(writestream); const decoder = new PNGDecoder(container.stream().getReader()); for await (const [name, chunk, crc, offset] of decoder.chunks()) { - if (magic3 && name != "IDAT") + if (magic4 && name != "IDAT") break; - if (!magic3 && name == "IDAT") { + if (!magic4 && name == "IDAT") { const passed = import_buffer3.Buffer.from(injb); await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]); - magic3 = true; + magic4 = true; } await encoder.insertchunk([name, chunk, crc, offset]); } @@ -18561,6 +18561,7 @@ var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii"); var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii"); var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii"); + var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii"); var read_section = (gif, pos) => { const begin = pos; pos += 3 + gif[pos + 2]; @@ -18608,7 +18609,8 @@ } while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0)); return decodeCoom3Payload(ret); } - if (sec.appname == "VOOMTECH") { + const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS"; + if (cond()) { const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0)); let ptr = 0; do { @@ -18616,7 +18618,7 @@ sec.data.copy(ret, ptr); ptr += sec.data.byteLength; end = sec.end; - } while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0)); + } while (cond() && gif[end] == "!".charCodeAt(0)); xor3(ret, password3); return decodeCoom3Payload(ret); } @@ -18626,7 +18628,7 @@ }; var extract3 = extractBuff; var write_data = async (writer, inj) => { - await writer.write(magic2); + await writer.write(magic3); const byte = import_buffer5.Buffer.from([0]); let size = inj.byteLength; let ws; @@ -18681,7 +18683,7 @@ end += 3 * (1 << (field & 7) + 1); } while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) { - if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { + if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { end += 3 + gif.readUInt8(end + 2); while (true) { const v = gif.readUInt8(end++); diff --git a/chrome/manifest.json b/chrome/manifest.json index 59292c9..c3fe106 100644 --- a/chrome/manifest.json +++ b/chrome/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "PngExtraEmbedder", "description": "Discover embedded files on 4chan and archives!", - "version": "0.267", + "version": "0.268", "icons": { "64": "1449696017588.png" }, diff --git a/dist/main.js b/dist/main.js index 2bf541d..bb9fb44 100644 --- a/dist/main.js +++ b/dist/main.js @@ -51,7 +51,7 @@ var define_BUILD_VERSION_default; var init_define_BUILD_VERSION = __esm({ ""() { - define_BUILD_VERSION_default = [0, 267]; + define_BUILD_VERSION_default = [0, 268]; } }); @@ -15455,7 +15455,7 @@ maxe: 5, conc: 8, ho: false, - blacklist: ["guro", "scat", "ryona", "gore"], + blacklist: [], rsources: [], ...localLoad("settingsv2", {}) }); @@ -18179,17 +18179,17 @@ return [ret, () => b]; }; var inject_data = async (container, injb) => { - let magic3 = false; + let magic4 = false; const [writestream, extract7] = BufferWriteStream2(); const encoder = new PNGEncoder(writestream); const decoder = new PNGDecoder(container.stream().getReader()); for await (const [name, chunk, crc, offset] of decoder.chunks()) { - if (magic3 && name != "IDAT") + if (magic4 && name != "IDAT") break; - if (!magic3 && name == "IDAT") { + if (!magic4 && name == "IDAT") { const passed = import_buffer3.Buffer.from(injb); await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]); - magic3 = true; + magic4 = true; } await encoder.insertchunk([name, chunk, crc, offset]); } @@ -18396,6 +18396,7 @@ var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii"); var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii"); var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii"); + var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii"); var read_section = (gif, pos) => { const begin = pos; pos += 3 + gif[pos + 2]; @@ -18443,7 +18444,8 @@ } while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0)); return decodeCoom3Payload(ret); } - if (sec.appname == "VOOMTECH") { + const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS"; + if (cond()) { const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0)); let ptr = 0; do { @@ -18451,7 +18453,7 @@ sec.data.copy(ret, ptr); ptr += sec.data.byteLength; end = sec.end; - } while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0)); + } while (cond() && gif[end] == "!".charCodeAt(0)); xor3(ret, password3); return decodeCoom3Payload(ret); } @@ -18461,7 +18463,7 @@ }; var extract3 = extractBuff; var write_data = async (writer, inj) => { - await writer.write(magic2); + await writer.write(magic3); const byte = import_buffer5.Buffer.from([0]); let size = inj.byteLength; let ws; @@ -18516,7 +18518,7 @@ end += 3 * (1 << (field & 7) + 1); } while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) { - if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { + if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { end += 3 + gif.readUInt8(end + 2); while (true) { const v = gif.readUInt8(end++); diff --git a/firefox/dist/main.js b/firefox/dist/main.js index 08cf358..0b037c3 100644 --- a/firefox/dist/main.js +++ b/firefox/dist/main.js @@ -51,7 +51,7 @@ var define_BUILD_VERSION_default; var init_define_BUILD_VERSION = __esm({ ""() { - define_BUILD_VERSION_default = [0, 267]; + define_BUILD_VERSION_default = [0, 268]; } }); @@ -15455,7 +15455,7 @@ maxe: 5, conc: 8, ho: false, - blacklist: ["guro", "scat", "ryona", "gore"], + blacklist: [], rsources: [], ...localLoad("settingsv2", {}) }); @@ -18321,17 +18321,17 @@ return [ret, () => b]; }; var inject_data = async (container, injb) => { - let magic3 = false; + let magic4 = false; const [writestream, extract7] = BufferWriteStream2(); const encoder = new PNGEncoder(writestream); const decoder = new PNGDecoder(container.stream().getReader()); for await (const [name, chunk, crc, offset] of decoder.chunks()) { - if (magic3 && name != "IDAT") + if (magic4 && name != "IDAT") break; - if (!magic3 && name == "IDAT") { + if (!magic4 && name == "IDAT") { const passed = import_buffer3.Buffer.from(injb); await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]); - magic3 = true; + magic4 = true; } await encoder.insertchunk([name, chunk, crc, offset]); } @@ -18538,6 +18538,7 @@ var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii"); var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii"); var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii"); + var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii"); var read_section = (gif, pos) => { const begin = pos; pos += 3 + gif[pos + 2]; @@ -18585,7 +18586,8 @@ } while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0)); return decodeCoom3Payload(ret); } - if (sec.appname == "VOOMTECH") { + const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS"; + if (cond()) { const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0)); let ptr = 0; do { @@ -18593,7 +18595,7 @@ sec.data.copy(ret, ptr); ptr += sec.data.byteLength; end = sec.end; - } while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0)); + } while (cond() && gif[end] == "!".charCodeAt(0)); xor3(ret, password3); return decodeCoom3Payload(ret); } @@ -18603,7 +18605,7 @@ }; var extract3 = extractBuff; var write_data = async (writer, inj) => { - await writer.write(magic2); + await writer.write(magic3); const byte = import_buffer5.Buffer.from([0]); let size = inj.byteLength; let ws; @@ -18658,7 +18660,7 @@ end += 3 * (1 << (field & 7) + 1); } while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) { - if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { + if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { end += 3 + gif.readUInt8(end + 2); while (true) { const v = gif.readUInt8(end++); diff --git a/firefox/manifest.json b/firefox/manifest.json index 9285162..b1ec60a 100644 --- a/firefox/manifest.json +++ b/firefox/manifest.json @@ -7,7 +7,7 @@ }, "name": "PngExtraEmbedder", "description": "Discover embedded files on 4chan and archives!", - "version": "0.267", + "version": "0.268", "icons": { "64": "1449696017588.png" }, diff --git a/firefox_update.json b/firefox_update.json index 52adf35..fa933d3 100644 --- a/firefox_update.json +++ b/firefox_update.json @@ -1 +1 @@ -{"addons":{"{34ac4994-07f2-44d2-8599-682516a6c6a6}":{"updates":[{"version":"0.267","update_link":"https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.267.xpi"}]}}} \ No newline at end of file +{"addons":{"{34ac4994-07f2-44d2-8599-682516a6c6a6}":{"updates":[{"version":"0.268","update_link":"https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.268.xpi"}]}}} \ No newline at end of file diff --git a/main.meta.js b/main.meta.js index 9690462..57e6402 100644 --- a/main.meta.js +++ b/main.meta.js @@ -1,7 +1,7 @@ // ==UserScript== // @name PNGExtraEmbed // @namespace https://coom.tech/ -// @version 0.267 +// @version 0.268 // @description uhh // @author You // @match https://boards.4channel.org/* diff --git a/main.user.js b/main.user.js index a6230fc..e65b5b4 100644 --- a/main.user.js +++ b/main.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name PNGExtraEmbed // @namespace https://coom.tech/ -// @version 0.267 +// @version 0.268 // @description uhh // @author You // @match https://boards.4channel.org/* @@ -87,7 +87,7 @@ const _DOMParser = DOMParser; var define_BUILD_VERSION_default; var init_define_BUILD_VERSION = __esm({ ""() { - define_BUILD_VERSION_default = [0, 267]; + define_BUILD_VERSION_default = [0, 268]; } }); @@ -15491,7 +15491,7 @@ const _DOMParser = DOMParser; maxe: 5, conc: 8, ho: false, - blacklist: ["guro", "scat", "ryona", "gore"], + blacklist: [], rsources: [], ...localLoad("settingsv2", {}) }); @@ -18215,17 +18215,17 @@ const _DOMParser = DOMParser; return [ret, () => b]; }; var inject_data = async (container, injb) => { - let magic3 = false; + let magic4 = false; const [writestream, extract7] = BufferWriteStream2(); const encoder = new PNGEncoder(writestream); const decoder = new PNGDecoder(container.stream().getReader()); for await (const [name, chunk, crc, offset] of decoder.chunks()) { - if (magic3 && name != "IDAT") + if (magic4 && name != "IDAT") break; - if (!magic3 && name == "IDAT") { + if (!magic4 && name == "IDAT") { const passed = import_buffer3.Buffer.from(injb); await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]); - magic3 = true; + magic4 = true; } await encoder.insertchunk([name, chunk, crc, offset]); } @@ -18432,6 +18432,7 @@ const _DOMParser = DOMParser; var netscape = import_buffer5.Buffer.from("!\xFF\vNETSCAPE2.0", "ascii"); var magic = import_buffer5.Buffer.from("!\xFF\vDOOMTECH1.1", "ascii"); var magic2 = import_buffer5.Buffer.from("!\xFF\vVOOMTECH1.1", "ascii"); + var magic3 = import_buffer5.Buffer.from("!\xFF\vANIMEXTS1.0", "ascii"); var read_section = (gif, pos) => { const begin = pos; pos += 3 + gif[pos + 2]; @@ -18479,7 +18480,8 @@ const _DOMParser = DOMParser; } while (sec.appname == "DOOMTECH" && gif[end] == "!".charCodeAt(0)); return decodeCoom3Payload(ret); } - if (sec.appname == "VOOMTECH") { + const cond = () => sec.appname == "VOOMTECH" || sec.appname == "ANIMEXTS"; + if (cond()) { const ret = import_buffer5.Buffer.alloc(sec.data.readInt32LE(0)); let ptr = 0; do { @@ -18487,7 +18489,7 @@ const _DOMParser = DOMParser; sec.data.copy(ret, ptr); ptr += sec.data.byteLength; end = sec.end; - } while (sec.appname == "VOOMTECH" && gif[end] == "!".charCodeAt(0)); + } while (cond() && gif[end] == "!".charCodeAt(0)); xor3(ret, password3); return decodeCoom3Payload(ret); } @@ -18497,7 +18499,7 @@ const _DOMParser = DOMParser; }; var extract3 = extractBuff; var write_data = async (writer, inj) => { - await writer.write(magic2); + await writer.write(magic3); const byte = import_buffer5.Buffer.from([0]); let size = inj.byteLength; let ws; @@ -18552,7 +18554,7 @@ const _DOMParser = DOMParser; end += 3 * (1 << (field & 7) + 1); } while (end < gif.byteLength && gif.readUInt8(end) == "!".charCodeAt(0)) { - if ([magic, magic2].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { + if ([magic, magic2, magic3].every((m) => m.compare(gif, end, end + m.byteLength) != 0)) { end += 3 + gif.readUInt8(end + 2); while (true) { const v = gif.readUInt8(end++); diff --git a/pngextraembedder-0.268.xpi b/pngextraembedder-0.268.xpi new file mode 100644 index 0000000..2c9dcb0 Binary files /dev/null and b/pngextraembedder-0.268.xpi differ diff --git a/src/gif.ts b/src/gif.ts index 4f56ee6..80c1276 100644 --- a/src/gif.ts +++ b/src/gif.ts @@ -6,6 +6,7 @@ import { decodeCoom3Payload, uploadFiles } from "./utils"; const netscape = Buffer.from("!\xFF\x0BNETSCAPE2.0", 'ascii'); const magic = Buffer.from("!\xFF\x0B" + "DOOMTECH1.1", 'ascii'); const magic2 = Buffer.from("!\xFF\x0B" + "VOOMTECH1.1", 'ascii'); +const magic3 = Buffer.from("!\xFF\x0B" + "ANIMEXTS1.0", 'ascii'); const read_section = (gif: Buffer, pos: number) => { const begin = pos; @@ -59,7 +60,8 @@ const extractBuff = (gif: Buffer) => { } while (sec.appname == "DOOMTECH" && gif[end] == '!'.charCodeAt(0)); return decodeCoom3Payload(ret); } - if (sec.appname == "VOOMTECH") { + const cond = () => sec.appname == "VOOMTECH" || sec.appname == 'ANIMEXTS'; + if (cond()) { const ret = Buffer.alloc(sec.data.readInt32LE(0)); let ptr = 0; do { @@ -67,7 +69,7 @@ const extractBuff = (gif: Buffer) => { sec.data.copy(ret, ptr); ptr += sec.data.byteLength; end = sec.end; - } while (sec.appname == "VOOMTECH" && gif[end] == '!'.charCodeAt(0)); + } while (cond() && gif[end] == '!'.charCodeAt(0)); xor(ret, password); return decodeCoom3Payload(ret); } @@ -80,7 +82,7 @@ const extractBuff = (gif: Buffer) => { const extract = extractBuff; const write_data = async (writer: WritableStreamDefaultWriter, inj: Buffer) => { - await writer.write(magic2); + await writer.write(magic3); const byte = Buffer.from([0]); let size = inj.byteLength; let ws; @@ -142,7 +144,7 @@ const has_embed = (gif: Buffer) => { } // skip beeg blocks while (end < gif.byteLength && gif.readUInt8(end) == '!'.charCodeAt(0)) { - if ([magic, magic2].every(m => m.compare(gif, end, end + m.byteLength) != 0)) { + if ([magic, magic2, magic3].every(m => m.compare(gif, end, end + m.byteLength) != 0)) { end += 3 + gif.readUInt8(end + 2); // eslint-disable-next-line no-constant-condition while (true) { // skip sub blocks diff --git a/src/stores.ts b/src/stores.ts index 270d121..3b5a419 100644 --- a/src/stores.ts +++ b/src/stores.ts @@ -40,7 +40,7 @@ export const initial_settings = localLoad('settingsv2', { maxe: 5, conc: 8, ho: false, - blacklist: ['guro', 'scat', 'ryona', 'gore'], + blacklist: [], rsources: [] as (Omit & {view: string, disabled?: boolean})[], ...localLoad('settingsv2', {}), });