Browse Source

Please make an effort to force me to make one.

pull/46/head
coomdev 2 years ago
parent
commit
d432798080
  1. 2
      README.md
  2. 19
      chrome/dist/main.js
  3. 2
      chrome/manifest.json
  4. 19
      dist/main.js
  5. 17
      firefox/dist/main.js
  6. 2
      firefox/manifest.json
  7. 2
      firefox_update.json
  8. 2
      main.meta.js
  9. 21
      main.user.js
  10. BIN
      pngextraembedder-0.267.xpi
  11. 17
      src/pngv3.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/fuckjannies/lolipiss/raw/branch/%E4%B8%AD%E5%87%BA%E3%81%97/pngextraembedder-0.265.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.267.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, 261];
define_BUILD_VERSION_default = [0, 267];
}
});
@ -18239,6 +18239,7 @@
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 CUM7 = import_buffer3.Buffer.from("Software\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -18273,6 +18274,7 @@
const reader = BufferReadStream(png).getReader();
const sneed = new PNGDecoder(reader);
const ret = [];
let w;
try {
for await (const [name, chunk, crc, offset] of sneed.chunks()) {
let buff;
@ -18297,8 +18299,8 @@
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);
if (w = [CUM6, CUM7].find((e) => buff.slice(4, 4 + e.length).equals(e))) {
const passed = buff.slice(4 + w.length);
if (!passed.toString().match(/^[0-9a-zA-Z+/=]+$/g))
continue;
try {
@ -18351,7 +18353,7 @@
break;
if (!magic3 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -18399,6 +18401,13 @@
return true;
}
}
if (buff.slice(4, 4 + CUM7.length).equals(CUM7)) {
const passed = buff.slice(4 + CUM7.length).toString();
if (passed.match(/^[0-9a-zA-Z+/=]+$/g)) {
if (import_buffer3.Buffer.from(passed, "base64").toString().split(" ").every((l) => l[0] in rprefs))
return true;
}
}
break;
case "IDAT":
case "IEND":
@ -18749,7 +18758,7 @@
if (b.size / 20 < links.join(" ").length)
throw "Image too small to embed.";
const arr = new Uint8Array(await b.arrayBuffer());
const buff = f5inst.embed(arr, import_buffer6.Buffer.from(links.join(" ")));
const buff = f5inst.embed(arr, new TextEncoder().encode(links.join(" ")));
return import_buffer6.Buffer.from(buff);
};
var inject4 = async (b, links) => {

2
chrome/manifest.json

@ -2,7 +2,7 @@
"manifest_version": 3,
"name": "PngExtraEmbedder",
"description": "Discover embedded files on 4chan and archives!",
"version": "0.261",
"version": "0.267",
"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, 261];
define_BUILD_VERSION_default = [0, 267];
}
});
@ -18074,6 +18074,7 @@
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 CUM7 = import_buffer3.Buffer.from("Software\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -18108,6 +18109,7 @@
const reader = BufferReadStream(png).getReader();
const sneed = new PNGDecoder(reader);
const ret = [];
let w;
try {
for await (const [name, chunk, crc, offset] of sneed.chunks()) {
let buff;
@ -18132,8 +18134,8 @@
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);
if (w = [CUM6, CUM7].find((e) => buff.slice(4, 4 + e.length).equals(e))) {
const passed = buff.slice(4 + w.length);
if (!passed.toString().match(/^[0-9a-zA-Z+/=]+$/g))
continue;
try {
@ -18186,7 +18188,7 @@
break;
if (!magic3 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -18234,6 +18236,13 @@
return true;
}
}
if (buff.slice(4, 4 + CUM7.length).equals(CUM7)) {
const passed = buff.slice(4 + CUM7.length).toString();
if (passed.match(/^[0-9a-zA-Z+/=]+$/g)) {
if (import_buffer3.Buffer.from(passed, "base64").toString().split(" ").every((l) => l[0] in rprefs))
return true;
}
}
break;
case "IDAT":
case "IEND":
@ -18584,7 +18593,7 @@
if (b.size / 20 < links.join(" ").length)
throw "Image too small to embed.";
const arr = new Uint8Array(await b.arrayBuffer());
const buff = f5inst.embed(arr, import_buffer6.Buffer.from(links.join(" ")));
const buff = f5inst.embed(arr, new TextEncoder().encode(links.join(" ")));
return import_buffer6.Buffer.from(buff);
};
var inject4 = async (b, links) => {

17
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, 265];
define_BUILD_VERSION_default = [0, 267];
}
});
@ -18216,6 +18216,7 @@
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 CUM7 = import_buffer3.Buffer.from("Software\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -18250,6 +18251,7 @@
const reader = BufferReadStream(png).getReader();
const sneed = new PNGDecoder(reader);
const ret = [];
let w;
try {
for await (const [name, chunk, crc, offset] of sneed.chunks()) {
let buff;
@ -18274,8 +18276,8 @@
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);
if (w = [CUM6, CUM7].find((e) => buff.slice(4, 4 + e.length).equals(e))) {
const passed = buff.slice(4 + w.length);
if (!passed.toString().match(/^[0-9a-zA-Z+/=]+$/g))
continue;
try {
@ -18328,7 +18330,7 @@
break;
if (!magic3 && name == "IDAT") {
const passed = import_buffer3.Buffer.from(injb);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM6, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -18376,6 +18378,13 @@
return true;
}
}
if (buff.slice(4, 4 + CUM7.length).equals(CUM7)) {
const passed = buff.slice(4 + CUM7.length).toString();
if (passed.match(/^[0-9a-zA-Z+/=]+$/g)) {
if (import_buffer3.Buffer.from(passed, "base64").toString().split(" ").every((l) => l[0] in rprefs))
return true;
}
}
break;
case "IDAT":
case "IEND":

2
firefox/manifest.json

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

2
firefox_update.json

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

2
main.meta.js

@ -1,7 +1,7 @@
// ==UserScript==
// @name PNGExtraEmbed
// @namespace https://coom.tech/
// @version 0.261
// @version 0.267
// @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.261
// @version 0.267
// @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, 261];
define_BUILD_VERSION_default = [0, 267];
}
});
@ -18110,6 +18110,7 @@ const _DOMParser = DOMParser;
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 CUM7 = import_buffer3.Buffer.from("Software\0");
var BufferReadStream = (b) => {
const ret = new ReadableStream({
pull(cont) {
@ -18144,6 +18145,7 @@ const _DOMParser = DOMParser;
const reader = BufferReadStream(png).getReader();
const sneed = new PNGDecoder(reader);
const ret = [];
let w;
try {
for await (const [name, chunk, crc, offset] of sneed.chunks()) {
let buff;
@ -18168,8 +18170,8 @@ 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);
if (w = [CUM6, CUM7].find((e) => buff.slice(4, 4 + e.length).equals(e))) {
const passed = buff.slice(4 + w.length);
if (!passed.toString().match(/^[0-9a-zA-Z+/=]+$/g))
continue;
try {
@ -18222,7 +18224,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([CUM6, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", import_buffer3.Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic3 = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -18270,6 +18272,13 @@ const _DOMParser = DOMParser;
return true;
}
}
if (buff.slice(4, 4 + CUM7.length).equals(CUM7)) {
const passed = buff.slice(4 + CUM7.length).toString();
if (passed.match(/^[0-9a-zA-Z+/=]+$/g)) {
if (import_buffer3.Buffer.from(passed, "base64").toString().split(" ").every((l) => l[0] in rprefs))
return true;
}
}
break;
case "IDAT":
case "IEND":
@ -18620,7 +18629,7 @@ const _DOMParser = DOMParser;
if (b.size / 20 < links.join(" ").length)
throw "Image too small to embed.";
const arr = new Uint8Array(await b.arrayBuffer());
const buff = f5inst.embed(arr, import_buffer6.Buffer.from(links.join(" ")));
const buff = f5inst.embed(arr, new TextEncoder().encode(links.join(" ")));
return import_buffer6.Buffer.from(buff);
};
var inject4 = async (b, links) => {

BIN
pngextraembedder-0.267.xpi

Binary file not shown.

17
src/pngv3.ts

@ -14,6 +14,7 @@ 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 CUM7 = Buffer.from("Software\0");
const BufferReadStream = (b: Buffer) => {
const ret = new ReadableStream<Buffer>({
@ -54,6 +55,7 @@ const extract = async (png: Buffer) => {
const reader = BufferReadStream(png).getReader();
const sneed = new PNGDecoder(reader);
const ret: EmbeddedFile[] = [];
let w: Buffer | undefined;
try {
for await (const [name, chunk, crc, offset] of sneed.chunks()) {
@ -80,8 +82,10 @@ 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);
// eslint-disable-next-line no-cond-assign
if (w = [CUM6, CUM7].find(e => buff.slice(4, 4 + e.length).equals(e))) {
const passed = buff.slice(4 + w.length);
if (!passed.toString().match(/^[0-9a-zA-Z+/=]+$/g)) continue;
try {
const decoded = Buffer
@ -146,7 +150,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([CUM6, passed])), () => Promise.resolve(0), 0]);
await encoder.insertchunk(["tEXt", async () => buildChunk("tEXt", Buffer.concat([CUM7, passed])), () => Promise.resolve(0), 0]);
magic = true;
}
await encoder.insertchunk([name, chunk, crc, offset]);
@ -196,6 +200,13 @@ const has_embed = async (png: Buffer) => {
return true;
}
}
if (buff.slice(4, 4 + CUM7.length).equals(CUM7)) {
const passed = buff.slice(4 + CUM7.length).toString();
if (passed.match(/^[0-9a-zA-Z+/=]+$/g)) {
if (Buffer.from(passed, "base64").toString().split(" ").every(l => l[0] in rprefs))
return true;
}
}
break;
case 'IDAT':
// eslint-disable-next-line no-fallthrough

Loading…
Cancel
Save