
annelin
30.08.2017
14:40:03
весь код переписывать
ну такое

Рома
30.08.2017
14:43:07
Что-то никак не пойму по этой статье как они хакают строки, объясните?

annelin
30.08.2017
14:44:04
нужно написать функцию для выстрела себе в ногу

Google

annelin
30.08.2017
14:44:09
и воспользоваться ей

Рома
30.08.2017
14:45:04
значит, gsub ', '' все ещё безопасен и параметры не нужны, чудненько

annelin
30.08.2017
14:45:17
ну вроде как да
вообще постгрес в этом плане хорош

Рома
30.08.2017
14:46:32
да он вообще во всех планах красавчик

Alexey
31.08.2017
07:17:24
https://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html

Vadim
31.08.2017
07:31:57

annelin
04.09.2017
09:36:06
чй чат умер? :(

Snusmumriken
04.09.2017
09:37:09
Нет, в нём ещё много спамеров : )
А я на днях попробую записать что-то похожее на мануал по сокетам, типа, видеоурок "Пишем http-сервер, вводный курс для дебилов".

Рома
04.09.2017
09:40:13
А я сишку учу, буду рад твоему курсу, если он на сишке!

fgntfg
04.09.2017
09:40:40
Слушаете 80 порт,
Читаете заголовки,
Открываете RFC чтоб ответить правильно
???
Охуеваете^WИзобритаете велосипед^W^WПрофит!
Рома Язык не главное, главное понимание алгоритмов

Google

Vadim
04.09.2017
09:41:55

fgntfg
04.09.2017
09:42:10
ага, и в том месте его применять


Snusmumriken
04.09.2017
09:47:43
Хех, я ведь про ДЕБИЛОВ говорю, которые не могут просто открыть википедию и прочитать, а понять им нужно )))
1. Сокет - это типа файла или некоторого устройства, которое программа арендует у операционной системы. Айпи - адрес пека, порт - адрес приложения, на конкретном пека, поэтому открыть несколько программ арендующих один и тот же порт не выйдет (точнее, выйдет, но через жопу).
Когда мы что-то пишем сокетом, с другой стороны это можно прочитать (если дошло)
2. TCP. Потоково-ориентированный протокол. Потоковый - значит тут нет деления на отдельные сообщения, то что мы пишем - просто дописывается в конец буфера на другом конце провода, и программы сами определяют, что является разделителем. Чаще всего - \r\n.
3. UDP - сообщенько-ориентированный протокол, бла-бла.
4. Протокол http (заголовки, что они значат, содержимое, post/get/body/querry и прочая хуета)
5. Библиотека luasocket, что это такое, что там есть.
6. Слушаем 80 порт,
7. Читаем заголовки,
8. Открываем RFC чтоб ответить правильно
???
Охуеваем^WИзобритаем велосипед^W^WПрофит!


fgntfg
04.09.2017
09:52:08
В tcp/udp уходить не надо. Это уже борсч
видел я людей у которых инкапсуляция портоколов была вся пофачена в голове
чем меньше знают, тем лучше

Tverd
04.09.2017
09:54:11
Почему не надо? Я бы почитал что-нить приятное по RUDP. Но по голому UDP наверно смысла нет

Alexey
04.09.2017
09:57:36
http over udp

Snusmumriken
04.09.2017
09:59:58

Tverd
04.09.2017
10:00:33
Я знаю что написал, просто еще бы описать - что есть что, зачем и почему, при желании, конечно

Snusmumriken
04.09.2017
10:00:51
Ну глянь в том протоколе, описано что-почему.
Ой, а схема передачи у меня как раз проще.
1. Один передаёт пять пакетов, третий теряется, в пятом - запрашивает подтверждение приёма.
2. Второй отвечает: "последний принятый пакет - второй"
3. Первый продолжает передачу с третьего пакета
Это не очень оптимально, согласен.

Tverd
04.09.2017
10:02:07
Кстати, пока вспомнил, кто-нить юзал движок Gideros?

fgntfg
04.09.2017
10:02:18
обычно хватает чтения RFCшек (чтоб понять что в рот оно всё ебись, беру готовое)

Tverd
04.09.2017
10:03:41

Snusmumriken
04.09.2017
10:03:55
Да, RFC тоже можешь глянуть.
обычно хватает чтения RFCшек (чтоб понять что в рот оно всё ебись, беру готовое)
а) Мне нужен был протокол поверх udp, чтобы использовать тот же luasocket с udp, и не фигачить кучу новых сишных либ/расширений луасокета (пользуюсь одновременно большим количеством платформ).
б) Лимит на длину сообщения - 65529 байт (6 на заголовок). Это офигенно мало, я своим протоколом передаю гигабайты, в одном сообщении.
в) я не хочу терять возможность принимать и отправлять обычные udp-сообщения на данный порт, иначе я не смогу, например, пробивать соединение через NAT.
г) RUDP из RFC не умеет в приём коротких сообщений без подтверждения, в моментальное использование принятого, если соединение ещё открыто а мы уже всё приняли, и всё такое

Alexey
04.09.2017
10:11:54
tftp?
Но в общем писать свой протокол это весело :)

Google

Snusmumriken
04.09.2017
10:13:19
tftp?
Ориентирован на "дай фигню" -> "держи фигню", а не "вот тебе крошечная и незначительная или ниибацца огромная и ужасно нужная куча фигни, сделай с ней что-нибудь"

fgntfg
04.09.2017
10:15:15
отладка совего кода - самый сок
особенно если ошибка в один символ где-то

Snusmumriken
04.09.2017
10:16:44
особенно если ошибка в один символ где-то
Логическая ошибка - это проблема.
Но просто тыкаешь кучу логов, смотришь где начинается неправильное.
Логи эффективнее тыкать не просто как "текст", но и с мини-трейсбеком.

Alexey
04.09.2017
10:18:05
Тесты для реализации протокола необходимая вещь

fgntfg
04.09.2017
10:19:54

Snusmumriken
04.09.2017
10:19:55
Ну тестовый сурц болтается где-то тут:
https://pastebin.com/fWJCiVBm
https://pastebin.com/sn6sdTVL
Хочешь маленькую задачку?
Накатай свой формат для "архива", где типа
[любые данные]
[заголовок с внутренним путём до файла, длина файла]
[тело файла]
[любые данные]
[следующий заголовок]
[следующее тело]
[любые данные]
Чтобы работало на любых размерах файлов. Это весело, ибо нужно учесть кучку мелочей.
А такой свободный формат - чтобы можно было делать rarjpeg'и :)
Ну, или двойной архив, который разными программами открывается по разному.


fgntfg
04.09.2017
10:25:46
а старый добрый rarjpeg чем не устаривет?
Видел я дискуссию по этой теме лет 7 назад в /b

Snusmumriken
04.09.2017
10:27:48
Ну, тут специфика определённая : )
а) можно ебошить произвольное сжатие (и вообще, свои алгоритмы)
б) конкретно картинка весом в 100мб вызывает подозрение (я хочу паковать ресурсы love-игрулек в zip + данный формат, чтобы важные скрипты были скрыты внутри данного формата, а основные ресурсы - на виду, в zip'е)
Правда, я уже сделал подобный парсер/упаковщик, правда без сжатия, хм.

Alexey
04.09.2017
10:30:20
zip64 :)
там в принципе то что нужно

Snusmumriken
04.09.2017
10:31:00
Я не хочу распространённых вариантов, потому что они легко вскрываются.
Свои форматы/своё сжатие/свои ништяки - чтобы сложнее было ломать. Особенно обфусцированное/скомпиленное в бинарь.

Alexey
04.09.2017
10:31:04
правда с различными вариациями
zip64+AES

fgntfg
04.09.2017
10:32:11
[ключ][длина пути][путь][размерность длины данных][длина данных][crc заголовка][данные...][crc данных][общее crc]

Google

Snusmumriken
04.09.2017
10:35:03
Смотри какая Самая Главная Проблема защиты lua-ресурсов:
1. Код - интерпретируемый.
2. Все хвосты для расшифровки - на виду (с минификацией/обфускацией - не так на виду, но тоже на виду), ну, типа "опа, он вскрыл этот архив этой функией, давайте её посмотрим или перепишем прогу чтобы всё вскрытое писалось в файлы! Так я распакую вообще всё!".
3. На каждый компилятор найдётся декомпилятор.
Поэтому, остаётся только идти на уловки, чтобы вскрывали о-о-о-о-очень медленно, вроде ручной обфускации видимой части программы, чтобы автоматика не справилась.

fgntfg
04.09.2017
10:35:33

Snusmumriken
04.09.2017
10:36:47
Ну, если кому-то особо нужно - да, я просто хочу создать сложности для тех, кто будет пытаться читерить в сетевых играх, с игроками-хостами : )
Максимум неочевидности, в общем.

Saphire
04.09.2017
10:45:02

Snusmumriken
04.09.2017
10:46:46
Хитро : )
Придумай.
Сначала тебе надо найти этот самый заголовок.
Как ты будешь прочёсывать файл на заголовки? Он может быть на много гигов, поэтому
file = io.open('file.txt'):read('*all') - не покатит.

Admin
ERROR: S client not available

Alexey
04.09.2017
10:50:02
file:seek тоже не работает на много гигов

Snusmumriken
04.09.2017
10:50:18

Saphire
04.09.2017
10:50:27
Т.е. запрашивать файл по кускам, сканить, дальше идти.

Snusmumriken
04.09.2017
10:51:04
Не идти дальше, а откатываться назад на длину заголовка и дальше идти, потому что мало ли, прям на разбивке буферов сидит заголовок распополамленный )))

Alexey
04.09.2017
10:51:56
Хм, у меня работает.
Это платформо зависимо.
У меня file.write может писать файл лубого размера.
Но seek толко на 2 гига

Saphire
04.09.2017
10:51:57
А, спасибо за такой случай

Alexey
04.09.2017
10:52:47
Я пишу zip архивы ~3 гига

Snusmumriken
04.09.2017
10:53:46
Ну ладно, ладно. Считаем что file:seek работает. Например, ограничение архива на два гига. Ничо страшного, для бОльших данных возьмём lua64.

Saphire
04.09.2017
10:54:28
Тогда надо так - сохранить последние Н (где Н - самая большая длинна заголовка, и желательно заголовок корневого уровня сделать маленьким) байт блока, пойти к следующему, и через хитрую функцию поиска искать в этих двух кусках - маленьком и большом.

Snusmumriken
04.09.2017
10:54:37

Saphire
04.09.2017
10:55:41

Google

Saphire
04.09.2017
10:55:53
Потом данные, потом копия заголовка.
Данные сами по себе могут иметь дальнейшую упаковку, или метаданные для извлечения настоящих данных, и т.д.

Snusmumriken
04.09.2017
10:56:39
Две сигнатуры: начало и конец заголовка, каждый на три-пять символов, например.
Между ними - данные с разделителем, который тоже формализован.
Если нашли два начала заголовка подряд - считаем что второе истинное, мотаем до тех пор пока не наткнёмся на конец, считываем. Если и то и то верно но середина не парсится (неправильное количество разделителей, например) - значит это не заголовок.
Это я придумал ))

Saphire
04.09.2017
10:57:52

Snusmumriken
04.09.2017
11:00:19
Заголовок - сам себе сигнатура, полностью, панимаищь? )))

Saphire
04.09.2017
11:01:14
* Инородные данные
* Сигнатура заголовка
- Разделитель
- Длинна (закодированная в плавающее число байт)
- Разделитель
- Чексумма длинны
- Разделитель
- Хеш всего сверху
* Наши данные (либо данные, упакованные во второй формат, с чексуммами и т.д., но это уже другое)
* Копия первого заголовка

Snusmumriken
04.09.2017
11:01:31
Копия - уже избыточность.
И так заебись.

Saphire
04.09.2017
11:01:50
Эм, а если у тебя имя файла - "cool thing [[[ awesome ||| thing ]]]!"?

fgntfg
04.09.2017
11:02:04
Я тут подумал, а чего б данные не пихать до заголовка

Saphire
04.09.2017
11:02:26

Snusmumriken
04.09.2017
11:02:46
Неправильное количество данных в разделителе ))
А вот если вот такое:
"крутой файл [[[очень крутой файл|||5124|||deflate]]]" - то да, не покатит.
Найди человека который будет так называть файл )))
О, кстати.
Можно и это обойти.
В сигнатуре начала-конца заголовков присутствуют непечатаемые ascii-символы.

Saphire
04.09.2017
11:03:29
Заголовок неверен, а хвост реального не замечен.

Snusmumriken
04.09.2017
11:04:08
Не распарсится.
Вместо "крутой" - должны быть цифры,
вместо "файл" - должно быть слово из набора.

fgntfg
04.09.2017
11:04:10
рандомные данные [[[данные|||сигнатура|||длинна]]] рандомные данные

Saphire
04.09.2017
11:04:48