Lenka.penka666

Lenka.penka666

На Пикабу
126 рейтинг 1 подписчик 5 подписок 4 поста 0 в горячем
0

Но всё же

К Починили

В полноценную "послеоплатную" версию надо будет ещё разбираться, но после нескольких часов зависания могу сказать, что я, в принципе, могу вытащить платную информацию с сайта. (Там всё легко. Лажа с обзыванием сканов, хотя, может, так и надо?..) Возможно это даже могло бы решить проблемы с загрузкой сканов, из-за низкого интернета, но чёрт его знает, чесслово. Пусть теперешний метод не такой интересный как прошлый, это лишь означает, что сам сайт стал интереснее чем раньше. Буду любопытствовать дальше.

П.С.: интересно, какова вероятность того, что владельцы сайта наткнутся на мои посты в Пикабу? Или им кинуть ссылку?

2

Починили

Если помните об этом посте, то спешу вас обрадовать, он больше не актуален.
Маленькая шалость

Сейчас там вооот такая красота, в которой я, к сожалению своему, ещё не до конца разобралась. Но, по идее, на сколько я понимаю эту тему, это именно то, что нужно. Это не сам код, а любезно предоставленные разработчиками (или скопированные с GitHub'а, что весьма вероятно — там часто появляется ссылка на этот домен) примеры и пояснения (но в, отличие от кода, они довольно интересные).

/
*
* @Description
*
* A wrapper for messaging on WebKit platforms. It supports modern WebKit messageHandlers
* along with encryption for older versions (like macOS Catalina)
*
* Note: If you wish to support Catalina then you'll need to implement the native
* part of the message handling, see {@Link WebkitMessagingTransport} for details.
*/
// eslint-disable-next-line @TypeScript-eslint/no-unused-vars

/
* @Example
* On macOS 11+, this will just call through to window.webkit.messageHandlers.x.postMessage
*
* Eg: for a foo message defined in Swift that accepted the payload {"bar": "baz"}, the following
* would occur:
*
* * const json = await window.webkit.messageHandlers.foo.postMessage({ bar: "baz" });
* const response = JSON.parse(json)
*
*
* @Example
* On macOS 10 however, the process is a little more involved. A method will be appended to window
* that allows the response to be delivered there instead. It's not exactly this, but you can visualize the flow
* as being something along the lines of:
*
* * // add the window method
* window["_0123456"] = (response) => {
* // decrypt `response` and deliver the result to the caller here
* // then remove the temporary method
* delete window['_0123456']
* };
*
* // send the data + `messageHanding` values
* window.webkit.messageHandlers.foo.postMessage({
* bar: "baz",
* messagingHandling: {
* methodName: "_0123456",
* secret: "super-secret",
* key: [1, 2, 45, 2],
* iv: [34, 4, 43],
* }
* });
*
* // later in swift, the following JavaScript snippet will be executed
* (() => {
* window['_0123456']({
* ciphertext: [12, 13, 4],
* tag: [3, 5, 67, 56]
* })
* })()
*
* @implements {MessagingTrans

Этот фрагмент снизу и вовсе кусок от куска побольше, что, наверное, легко понять по ненормально большому количеству скобочек внизу. Тем не менее, в нём можно встретить все переменные, которые были в примере выше, и я нахожу это очень подозрительным (это единственное что мне остаётся — понятия не имею что такое async и с чем его едят). Из всего, могу сказать, что наверное мне надо начинать учиться разбираться во всём потихоньку... Этот сайт развивается явно успешнее чем я сама — это мотивирует учиться. Так что в общих планах на (следующий, а если не повезёт — через следующий) год прибавилось изучение HTML и JavaScript. По крайней мере всей той части, которая связана с JSON... Они же связаны как-то, да?

async wkSendAndWait (handler, data) {
if (this.config.hasModernWebkitAPI) {
const response = await this.wkSend(handler, data);
return this.globals.JSONparse(response || '{}')
}

try {
const randMethodName = this.createRandMethodName();
const key = await this.createRandKey();
const iv = this.createRandIv();

const {
ciphertext,
tag
} = await new this.globals.Promise((/ @type {any} */ resolve) => {
this.generateRandomMethod(randMethodName, resolve);

// @ts-expect-error - this is a carve-out for catalina that will be removed soon
data.messageHandling = new SecureMessagingParams({
methodName: randMethodName,
secret: this.config.secret,
key: this.globals.Arrayfrom(key),
iv: this.globals.Arrayfrom(iv)
});
this.wkSend(handler, data);
});

const cipher = new this.globals.Uint8Array([...ciphertext, ...tag]);
const decrypted = await this.decrypt(cipher, key, iv);
return this.globals.JSONparse(decrypted || '{}')
} catch (e) {
// re-throw when the error is just a 'MissingHandler'
if (e instanceof MissingHandler) {
throw e
} else {
console.error('decryption failed', e);
console.error(e);
return { error: e }
}
}
}

/
* @Param {import('../index.js').NotificationMessage} msg
*/
notify (msg) {
this.wkSend(msg.context, msg);
}

/
* @Param {import('../index.js').RequestMessage} msg
*/
async request (msg) {
const data = await this.wkSendAndWait(msg.context, msg);

Я там в коде по ходу разглядывания даже встретила некий "псевдорандомный генератор чисел на основе алгоритма Alea" (как мне после любезно подсказал GPT-chat). Это такая прикольная вещь!

(function(global, module, define) {

function Alea(seed) {
var me = this, mash = Mash();

me.next = function() {
var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32
me.s0 = me.s1;
me.s1 = me.s2;
return me.s2 = t - (me.c = t | 0);
};

// Apply the seeding algorithm from Baagoe.
me.c = 1;
me.s0 = mash(' ');
me.s1 = mash(' ');
me.s2 = mash(' ');
me.s0 -= mash(seed);
if (me.s0 < 0) { me.s0 += 1; }
me.s1 -= mash(seed);
if (me.s1 < 0) { me.s1 += 1; }
me.s2 -= mash(seed);
if (me.s2 < 0) { me.s2 += 1; }
mash = null;
}

function copy(f, t) {
t.c = f.c;
t.s0 = f.s0;
t.s1 = f.s1;
t.s2 = f.s2;
return t;
}

Есть ещё такая штука, думаю, это тоже является каким-то псевдорандомом (по крайней мере, оно так же умножает в начале, как и в Alea.

function impl(seed, opts) {
var xg = new Alea(seed),
state = opts && opts.state,
prng = xg.next;
prng.int32 = function() { return (xg.next() * 0x100000000) | 0; };
prng.double = function() {
return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53
};
prng.quick = prng;
if (state) {
if (typeof(state) == 'object') copy(state, xg);
prng.state = function() { return copy(xg, {}); };
}
return prng;
}

function Mash() {
var n = 0xefc8249d;

var mash = function(data) {
data = String(data);
for (var i = 0; i < data.length; i++) {
n += data.charCodeAt(i);
var h = 0.02519603282416938 * n;
n = h >>> 0;
h -= n;
h *= n;
n = h >>> 0;
h -= n;
n += h * 0x100000000; // 2^32
}
return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
};

return mash;
}


if (module && module.exports) {
module.exports = impl;
} else if (define && define.amd) {
define(function() { return impl; });
} else {
this.alea = impl;
}

})(
commonjsGlobal,
module, // present in node.js
(typeof undefined) == 'function' // present with an AMD loader
);
} (alea$1));

var aleaExports = alea$1.exports;

var xor128$1 = {exports: {}};

xor128$1.exports;

(function (module) {
// A Javascript implementaion of the "xor128" prng algorithm by
// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper

(function(global, module, define) {

function XorGen(seed) {
var me = this, strseed = '';

me.x = 0;
me.y = 0;
me.z = 0;
me.w = 0;

// Set up generator function.
me.next = function() {
var t = me.x ^ (me.x << 11);
me.x = me.y;
me.y = me.z;
me.z = me.w;
return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);
};

if (seed === (seed | 0)) {
// Integer seed.
me.x = seed;
} else {
// String seed.
strseed += seed;
}

// Mix in string seed, then discard an initial batch of 64 values.
for (var k = 0; k < strseed.length + 64; k++) {
me.x ^= strseed.charCodeAt(k) | 0;
me.next();
}
}

function copy(f, t) {
t.x = f.x;
t.y = f.y;
t.z = f.z;
t.w = f.w;
return t;
}

function impl(seed, opts) {
var xg = new XorGen(seed),
state = opts && opts.state,
prng = function() { return (xg.next() >>> 0) / 0x100000000; };
prng.double = function() {
do {
var top = xg.next() >>> 11,
bot = (xg.next() >>> 0) / 0x100000000,
result = (top + bot) / (1 << 21);
} while (result === 0);
return result;
};
prng.int32 = xg.next;
prng.quick = prng;
if (state) {
if (typeof(state) == 'object') copy(state, xg);
prng.state = function() { return copy(xg, {}); };
}
return prng;
}

if (module && module.exports) {
module.exports = impl;
} else if (define && define.amd) {
define(function() { return impl; });
} else {
this.xor128 = impl;
}

})(
commonjsGlobal,
module, // present in node.js
(typeof undefined) == 'function' // present with an AMD loader
);
} (xor128$1));

var xor128Exports = xor128$1.exports;

var xorwow$1 = {exports: {}};

xorwow$1.exports;

Насколько я понимаю, сайт растёт из-за чего товарищи программисты постарались над его общим видом, и защитой платёжной системы.
Раньше это выглядело как css-ная вставка, где в качестве примечания была написана рабочая "послеоплатная" ссылка (https://rumangalist.org/payment — она теперь всё равно не работает, так как путь заменён методом какого-то там разнообразного хеширования ииии я ещё не до конца разбираюсь в этой теме, но она меня ооооочень интригует). В общем, думаю, сайт будут развивать и дальше. Не зря же у них домен на год с чем-то вперёд проплачен?

Кстати. Вверху приведён кусок с МакОсными продуктами, но только потому, что у них самый красивый и ясный пример с этими данными, не то что бы мне принципиально. Ну вот и все новости на сегодня 〜(꒪꒳꒪)〜, так что на этом, пожалуй, всё.

Показать полностью

Переделка Лукоморья, коих много. Может, немного странная

У Лукашенка дуб срубили,
Цепь коммунизма развалили,
Ну а Кота в колхоз сдали.

...Не даром Кот учёный был!..
Он истерию закатил!
Он, жизнь поставив под угрозу,
и написав тяжкую прозу,
Ту в редактуру положил.

Ну и конечно, опосля,
Прожил не долго. День иль два...
Лишь слышно было на селе —
Кота ловило КГБ.

Маленькая шалость

Чтобы прояснить сразу, сейчас, в 02.03.23, мне 14 лет. Где-то около двух лет тому я получила очень маленький, с позволения сказать, базис в области создания сайтов. С тех пор много чего поменялось, мои знания расширялись, пусть и не равномерно. Стала чаще работать с компьютером, опираясь на всякие сомнительные сайты успешно написала и заразила свой компьютер вирусом, который стёр некоторые нужные мне папки.(
Но сейчас речь пойдет не об этой трагической истории моего идиотизма. Будет куда веселее. Впрочем без идиотизма все равно не обойдется.

Не помню когда это впервые произошло, но в какой-то период времени мне начало нравится аниме. Из-за того что серии выходили очень медленно я довольно быстро добралась и до манги (хотя больше предпочитаю новеллы). Так как это произошло тогда, когда я была в стране в которой доблестное интернет-пиратство не в почёте, выбор у меня был довольно маленький.
Вооружившись поисковиком DuckDuckgo, я попала на один полностью платный сайт с громадным каталогом манги. Крамольной мысли тратить деньги на электронный нелегальный перевод у меня тогда, почему-то, даже не возникло. Опираясь на предположение, что бесплатная и платная версия сайта это принципиально разные сайты, я залезла в логи и начала искать ссылку на платную версию сайта. Я на самом деле думала, что то в районе "ну кто в здравом уме сделает так, что в платную версию сайта сможет попасть даже ребенок? Я просто посмотрю". Посмотрела, спасибо. Чуть не поседела. Надеюсь, что владельцы этого сайта, название которого я, по понятным причинам, не указывала, увидят этот пост и улучшат систему безопасности.
Потому что это не серьезно. Мне, блин, всего 14. "Дурь ещё не вышла", как любят говорить те кто родился на десять лет раньше. У меня ничтожно малый базис в АйТи-районе. Может, чуть больше чем у среднестатистического подростка моего времени, не более. Посему разрешите откланяться, надеюсь что те, кому это нужно, будь то пользователи или владельцы, смогут вынести определенного рода пользу из этого поста

Показать полностью
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества