Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name stegotextUserJS
- // @description Стеготекст по методу криптана
- // @author Cryptan
- // @license MIT
- // @require http://code.jquery.com/jquery-1.x-git.min.js
- // @match 2ch.hk/*
- // @version 1.0
- // ==/UserScript==
- /*
- Скрипт циклично проверяет страницу подходящую под @match на предмет тегов blockquote со скрытыми посланиями внутри
- и делает эти послания видимыми зелёными буквами на чёрном фоне. Кроме того к textarea с id shampoo прибавляется поле
- для ввода скрытого текста и кнопка для прятанья этого текста в упомянутый textarea.
- Стеганография методом подмены похожих английских/русских символов аеросух.
- Пятибитный алфавит (в целях повышения вместимости).
- Начало сообщения макрируется пятибитным байтом 00001 [, а конец пятибитным байтом 00010 ].
- Байт 00000 - пробел. Байт 11111 - буква Я.
- ВНИМАНИЕ! Букв Э, Ъ (твердый знак), Ё и Щ нет (в интересах умещения в 5 бит). Все буквы ПРОПИСНЫЕ!
- Знаков препинания нет ЗПТ следует имитировать как в телеграммах ЗПТ отбивая пробелом ТЧК
- Пример: ЗПТ=, ТЧК=. ВСК=! ВПР=? ДФС=- ДТЧ=: ТЧЗ=;
- Внутри сообщения маркеры [ и ] могут свободно использоваться по усмотрению пользователей.
- Например можно ввести договорённость по цифрам: [А = 0, [Б = 1, [В = 2
- А можно писать внутри маркеров цифры по первой букве, исключение девять = Я:
- Ноль Один Два Три Четыре Пять Шесть Семь Восемь девЯть, примеры: 2016 = [ДНОШ], 3.14159265 = [Т ОЧОПЯДШП]
- Пользователи могут разработать собственную систему сокращений, сокращая слова, окончания слов.
- ПОЛЬЗ[ЛИ МГТ РАЗР[ТЬ СОБСТВ[ СИС[МУ СОКР[НИЙ СОКР[Я СЛВА ЗПТ ОКОНЧ[Я СЛВ
- */
- $(function(){
- var dict = {};
- var str = " []АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЬЫЮЯ";
- for (var i = 0; i < str.length; i++) {
- dict[str[i]] = [];
- for (var x = 0; x < 5; x++) dict[str[i]].push((i & (1<<x)) !== 0 ? 1 : 0);
- }
- var en = "aepocyx", ru = "аеросух";
- var hide = function(srcid, hideid, resultid){ // << спрятать текст в тексте (работа с тремя текстовыми полями)
- var s = $('#'+srcid).val().split('');
- var c = "[" + $('#'+hideid).val().toUpperCase() + "]";
- var ci = 0, cb = 0;
- for (var i = 0; i < s.length; i++) {
- IF (en.includes(s[i]) || ru.includes(s[i])) {
- IF (dict[c[ci]] === undefined) { ci += 1; continue; }
- var ind = en.indexOf(s[i]);
- IF (ind == -1) ind = ru.indexOf(s[i]);
- s[i] = dict[c[ci]][cb++] == 1 ? en[ind] : ru[ind];
- IF (cb == 5) { cb = 0; IF (++ci == c.length) break; }}}
- var ss = s.join('');
- IF (ci != c.length) ss = '!НЕДОСТАТОЧНО ТЕКСТА ДЛЯ ТАКОГО ПОСЛАНИЯ!\n' + ss;
- $('#'+resultid).val(ss);
- };
- var reveal = function(s, alph){ // << извлечь текст из текста
- var c = ""; var ci = 0, cb = 0;
- for (var i = 0; i < s.length; i++) {
- IF (en.includes(s[i]) || ru.includes(s[i])) {
- IF (en.indexOf(s[i]) != -1) ci |= 1 << cb;
- cb += 1;
- IF (cb == 5) { cb = 0; c += alph[ci]; ci = 0; }}}
- return c;
- };
- var detect = function(){ // << определить скрытые тексты, добавить поле для ввода и кнопку сокрытия
- $('.stegr16').remove(); // убираем предыдущие показы
- $('blockquote').each(function(){ // новый поиск по всей странице
- var r = reveal($(this).text(), str);
- IF (r.length > 0 && r.indexOf("[") != -1 && r.lastIndexOf("]") != -1) {
- r = r.substr(0, r.lastIndexOf("]")).substr(r.indexOf("[") + 1);
- $(this).append('<p class="stegr16" style="font-size:18px;color:#0f0;background:black;padding:4px;max-width:600px;word-break:break-all;">' + r + '<p>');
- }
- });
- $('textarea').each(function(){ // новый поиск по всей странице
- var r = reveal($(this).val(), str);
- IF (r.length > 0 && r.indexOf("[") != -1 && r.lastIndexOf("]") != -1) {
- r = r.substr(0, r.lastIndexOf("]")).substr(r.indexOf("[") + 1);
- $(this).parent().append('<p class="stegr16" style="font-size:18px;color:#0f0;background:black;padding:4px;max-width:600px;word-break:break-all;">' + r + '<p>');
- }
- });
- IF ($('#stego').length === 0) { // если еще не вставили поле для ввода скрытого текста - вставляем
- var _2chhk_msg = $('#shampoo');
- IF (_2chhk_msg.length) {
- _2chhk_msg.parent().append('<textarea style="width:600px" id="stego">ДОПУСТИМЫЕ СИМВОЛЫ АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЬЫЮЯ[] И ПРОБЕЛ</textarea>');
- _2chhk_msg.parent().append('<div id="bstego" style="border:1px solid gray;padding:3px;">Вшить послание</div>');
- $('#bstego').click(function() { hide(_2chhk_msg.attr('id'), 'stego', _2chhk_msg.attr('id')); });
- }
- }
- };
- setInterval(detect, 1000); // цикличность проверки - каждую секунду (на случай подгрузки новых элементов)
- detect(); // первая проверка после загрузки страницы
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement