Browse Source

Fix GIF and PNG embedding

pull/46/head
coomdev 2 years ago
parent
commit
0188cb9d48
  1. 10
      .gitignore
  2. 2
      README.md
  3. 19
      chrome/dist/main.js
  4. 2
      chrome/manifest.json
  5. 19
      dist/main.js
  6. 19
      firefox/dist/main.js
  7. 2
      firefox/manifest.json
  8. 2
      firefox_update.json
  9. 2
      main.meta.js
  10. 21
      main.user.js
  11. BIN
      pngextraembedder-0.250.xpi
  12. 2
      src/gif.ts
  13. 15
      src/pngv3.ts

10
.gitignore

@ -39,3 +39,13 @@ rev/index.html
rev/out.png
1641737123922.png
1449696017588-128.png
a.js
a.py
aa
aa.json
bu.json
efdb47d2f0e04144bbaa-0.235.xpi
efdb47d2f0e04144bbaa-0.245.xpi
build-test.js
dist/test.js
src/pngv4.ts

2
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/coomdev/PEE/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.249.xpi) or [Chrome-based](https://chrome.google.com/webstore/detail/pngextraembedder/bfhpobiikighljcapcfmfganodihbicj))
- Install the correct WebExtension for your Browser ([Firefox](https://git.coom.tech/coomdev/PEE/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.250.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.

19
chrome/dist/main.js

@ -51,7 +51,7 @@
var define_BUILD_VERSION_default;
var init_define_BUILD_VERSION = __esm({
"<define:BUILD_VERSION>"() {
define_BUILD_VERSION_default = [0, 249];
define_BUILD_VERSION_default = [0, 250];
}
});
@ -16617,6 +16617,7 @@
var CUM3 = import_buffer3.Buffer.from("doo\0m");
var CUM4 = import_buffer3.Buffer.from("voo\0m");
var CUM5 = import_buffer3.Buffer.from("boo\0");
var CUM6 = import_buffer3.Buffer.from("Creation Time\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -16675,6 +16676,14 @@
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length);
const decoded = import_buffer3.Buffer.from(passed.toString(), "base64").toString().split(" ").map((e) => {
return `https://${rprefs[e[0]]}/${e.slice(1)}`;
}).join(" ");
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
break;
case "IDAT":
case "IEND":
@ -16714,7 +16723,7 @@
break;
if (!magic3 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM5, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -16755,6 +16764,10 @@
return true;
if (buff.slice(4, 4 + CUM5.length).equals(CUM5))
return true;
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length).toString();
return !!passed.match(/[0-9a-zA-Z+/]+/g);
}
break;
case "IDAT":
case "IEND":
@ -16973,7 +16986,7 @@
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic);
await writer.write(magic2);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;

2
chrome/manifest.json

@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "PngExtraEmbedder",
"description": "Discover embedded files on 4chan and archives!",
"version": "0.249",
"version": "0.250",
"icons": {
"64": "1449696017588.png"
},

19
dist/main.js

@ -51,7 +51,7 @@
var define_BUILD_VERSION_default;
var init_define_BUILD_VERSION = __esm({
"<define:BUILD_VERSION>"() {
define_BUILD_VERSION_default = [0, 249];
define_BUILD_VERSION_default = [0, 250];
}
});
@ -16448,6 +16448,7 @@
var CUM3 = import_buffer3.Buffer.from("doo\0m");
var CUM4 = import_buffer3.Buffer.from("voo\0m");
var CUM5 = import_buffer3.Buffer.from("boo\0");
var CUM6 = import_buffer3.Buffer.from("Creation Time\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -16506,6 +16507,14 @@
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length);
const decoded = import_buffer3.Buffer.from(passed.toString(), "base64").toString().split(" ").map((e) => {
return `https://${rprefs[e[0]]}/${e.slice(1)}`;
}).join(" ");
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
break;
case "IDAT":
case "IEND":
@ -16545,7 +16554,7 @@
break;
if (!magic3 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM5, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -16586,6 +16595,10 @@
return true;
if (buff.slice(4, 4 + CUM5.length).equals(CUM5))
return true;
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length).toString();
return !!passed.match(/[0-9a-zA-Z+/]+/g);
}
break;
case "IDAT":
case "IEND":
@ -16804,7 +16817,7 @@
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic);
await writer.write(magic2);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;

19
firefox/dist/main.js

@ -51,7 +51,7 @@
var define_BUILD_VERSION_default;
var init_define_BUILD_VERSION = __esm({
"<define:BUILD_VERSION>"() {
define_BUILD_VERSION_default = [0, 249];
define_BUILD_VERSION_default = [0, 250];
}
});
@ -16573,6 +16573,7 @@
var CUM3 = import_buffer3.Buffer.from("doo\0m");
var CUM4 = import_buffer3.Buffer.from("voo\0m");
var CUM5 = import_buffer3.Buffer.from("boo\0");
var CUM6 = import_buffer3.Buffer.from("Creation Time\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -16631,6 +16632,14 @@
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length);
const decoded = import_buffer3.Buffer.from(passed.toString(), "base64").toString().split(" ").map((e) => {
return `https://${rprefs[e[0]]}/${e.slice(1)}`;
}).join(" ");
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
break;
case "IDAT":
case "IEND":
@ -16670,7 +16679,7 @@
break;
if (!magic3 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM5, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -16711,6 +16720,10 @@
return true;
if (buff.slice(4, 4 + CUM5.length).equals(CUM5))
return true;
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length).toString();
return !!passed.match(/[0-9a-zA-Z+/]+/g);
}
break;
case "IDAT":
case "IEND":
@ -16929,7 +16942,7 @@
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic);
await writer.write(magic2);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;

2
firefox/manifest.json

@ -7,7 +7,7 @@
},
"name": "PngExtraEmbedder",
"description": "Discover embedded files on 4chan and archives!",
"version": "0.249",
"version": "0.250",
"icons": {
"64": "1449696017588.png"
},

2
firefox_update.json

@ -1 +1 @@
{"addons":{"{34ac4994-07f2-44d2-8599-682516a6c6a6}":{"updates":[{"version":"0.249","update_link":"https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.249.xpi"}]}}}
{"addons":{"{34ac4994-07f2-44d2-8599-682516a6c6a6}":{"updates":[{"version":"0.250","update_link":"https://git.coom.tech/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.250.xpi"}]}}}

2
main.meta.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.249
// @version 0.250
// @description uhh
// @author You
// @match https://boards.4channel.org/*

21
main.user.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.249
// @version 0.250
// @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>"() {
define_BUILD_VERSION_default = [0, 249];
define_BUILD_VERSION_default = [0, 250];
}
});
@ -16484,6 +16484,7 @@ const _DOMParser = DOMParser;
var CUM3 = import_buffer3.Buffer.from("doo\0m");
var CUM4 = import_buffer3.Buffer.from("voo\0m");
var CUM5 = import_buffer3.Buffer.from("boo\0");
var CUM6 = import_buffer3.Buffer.from("Creation Time\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -16542,6 +16543,14 @@ const _DOMParser = DOMParser;
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length);
const decoded = import_buffer3.Buffer.from(passed.toString(), "base64").toString().split(" ").map((e) => {
return `https://${rprefs[e[0]]}/${e.slice(1)}`;
}).join(" ");
const k = await decodeCoom3Payload(import_buffer3.Buffer.from(decoded));
ret.push(...k.filter((e) => e).map((e) => e));
}
break;
case "IDAT":
case "IEND":
@ -16581,7 +16590,7 @@ const _DOMParser = DOMParser;
break;
if (!magic3 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM5, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -16622,6 +16631,10 @@ const _DOMParser = DOMParser;
return true;
if (buff.slice(4, 4 + CUM5.length).equals(CUM5))
return true;
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length).toString();
return !!passed.match(/[0-9a-zA-Z+/]+/g);
}
break;
case "IDAT":
case "IEND":
@ -16840,7 +16853,7 @@ const _DOMParser = DOMParser;
};
var extract3 = extractBuff;
var write_data = async (writer, inj) => {
await writer.write(magic);
await writer.write(magic2);
const byte = import_buffer5.Buffer.from([0]);
let size = inj.byteLength;
let ws;

BIN
pngextraembedder-0.250.xpi

Binary file not shown.

2
src/gif.ts

@ -80,7 +80,7 @@ const extractBuff = (gif: Buffer) => {
const extract = extractBuff;
const write_data = async (writer: WritableStreamDefaultWriter<Buffer>, inj: Buffer) => {
await writer.write(magic);
await writer.write(magic2);
const byte = Buffer.from([0]);
let size = inj.byteLength;
let ws;

15
src/pngv3.ts

@ -13,6 +13,7 @@ settings.subscribe(b => {
const CUM3 = Buffer.from("doo\0" + "m");
const CUM4 = Buffer.from("voo\0" + "m");
const CUM5 = Buffer.from("boo\0");
const CUM6 = Buffer.from("Creation Time\0");
const BufferReadStream = (b: Buffer) => {
const ret = new ReadableStream<Buffer>({
@ -79,6 +80,14 @@ const extract = async (png: Buffer) => {
const k = await decodeCoom3Payload(Buffer.from(decoded));
ret.push(...k.filter(e => e).map(e => e as EmbeddedFile));
}
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length);
const decoded = Buffer.from(passed.toString(), 'base64').toString().split(' ').map(e => {
return `https://${rprefs[e[0]]}/${e.slice(1)}`;
}).join(' ');
const k = await decodeCoom3Payload(Buffer.from(decoded));
ret.push(...k.filter(e => e).map(e => e as EmbeddedFile));
}
break;
case 'IDAT':
// eslint-disable-next-line no-fallthrough
@ -125,7 +134,7 @@ export const inject_data = async (container: File, injb: Buffer) => {
if (!magic && name == "IDAT") {
const passed = Buffer.from(injb);
//xor(passed, password2);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", Buffer.concat([CUM5, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
magic = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -168,6 +177,10 @@ const has_embed = async (png: Buffer) => {
return true;
if (buff.slice(4, 4 + CUM5.length).equals(CUM5))
return true;
if (buff.slice(4, 4 + CUM6.length).equals(CUM6)) {
const passed = buff.slice(4 + CUM6.length).toString();
return !!passed.match(/[0-9a-zA-Z+/]+/g);
}
break;
case 'IDAT':
// eslint-disable-next-line no-fallthrough

Loading…
Cancel
Save