Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Как и всё в этой стране, обнуление написано на PHP, jQuery и (да-да) местами Rust, а управляется supervisord, ибо для редактирования юнитов systemd нужно sudo, который не дали.
В ДИТ обещали избавиться от уязвимости до начала общероссийского голосования, но так этого и не сделали. На заседании рабочей группы 18 июня, Федин обратил на это внимание главы смарт-проектов мэрии Костырко. Чиновник назвал проблему «ошметком» с прошлогоднего исполнения системы и попросил своих коллег из ДИТ проверить, «чтобы эту штуку убирали». Речь идет о фрагменте в исходном коде web-страницы бюллетеня для голосования, с помощью которого можно подключить дополнительный скрипт (программу) и манипулировать любыми элементами страницы.
cообщают «Открытые медиа» https://openmedia.io/news/n3/eksperty-u-organizatorov-elektronnogo-golosovaniya-est-texnicheskaya-vozmozhnost-podtasovyvat-rezultaty/
3. Соглашаемся с условиями и получаем бюллетень. Вот как происходит его выдача, тут происходит несколько переадресаций, видимо, это и есть тот самый "анонимайзер", но спойлер: он ничего не анонимизирует:
POST https://elec.2020og.ru/#complete
Cookie: laravel_session=abcdef123
ответ: HTTP/2 302 Found
location: https://elec.moscow/election/check/ длинная-длинная-цепочка-из-букв-и-цифр=
(на самом деле тут скрыт ваш номер бюллетеня, допустим, 777-ggg-aaa. Как проверить: вставить эту длинную цепочку на сайт https://www.base64decode.org/, раскодировать, потом взять из результата url и еще раз раскодировать. Нас наперстками не проведешь!)
Всего над проектом трудилось больше 10 распределенных команд (около 100 человек) внутри ДИТа без привлечения сторонних специалистов. Из-за сложности задачи мы решили, что каждая из команд будет заниматься разработкой решения в своей части, а на последнем этапе мы сведем все системы воедино с помощью интеграционных, нагрузочных и многофункциональных тестирований.
После общения с технической рабочей группой появилось дополнительное требование к системе — избирателю нужна была возможность проверить, как учитывается его голос в блокчейне.
З.Ы. Ну т.е. если привести реальный пример: ты либо голосуешь на виду у чувака, который проверяет твой паспорт и выдаёт тебе бюллетень, либо голосуешь на виду у чувака, который следит чтобы в урну не насрали. А кабинки где можно от них спрятаться и анонимно поставить галочку нету.
Конкретный алгоритм здесь не имеет никакого значения. Ибо ты будешь гонять свой zero knowledge proof в браузере под присмотром владельца сайта. А это просто иллюзия безопасности.
Т.е. единственное что я пока могу придумать с вебом - это самодостаточная html'ка, которую ты можешь скачать, поревьювить и запустить у себя с локалхоста. Которая через API уже обращается куда надо.
Ну тут суть не в подделке, а в том что сервак и его скрипты видят всё происходящее в браузере. Т.е. сервак в итоге может узнать за кого ты проголосовал. Что уже не анонимно.
И тебе нужны либо автономная хтмлка либо опенсурсная прога чтобы избавиться от влияния сервака и иметь возможность поревьючить код.
Я как всегда нихуя не спал два дня, но мне кажется, что если есть V голосующих, у каждого из которых K атрибутов из N возможных, то при правильном распределении они могут одновременно нечетко идентифицировать себя и предотвратить повторное голосование.
Например, блондинистый распиздяй может прийти и сказать, что он первый распиздяй, который сегодня голосует и получить бюллетень.
Рыжий распиздяй попробует так сказать, но бюллетень уже не получит, как и блондинистый не-распиздяй. Тогда он перейдет к следующему атрибуту, но если кроме "рыжий" и "распиздяй" у него есть третий атрибут, его всё еще невозможно идентифицировать.
Дык нужна реальная проверка личности на фазе "выдачи бюллетеня". Иначе будет явка 1460% ибо любой участник может себе нагенерить сколько угодно виртуальных личностей и проголосовать ими.
Дык атрибуты выдает машина каждому голосующему. Если она выдала первому abc, а второму bcd, то она не сможет идентифицировать предъявившего bc, в то же время знание bc гарантирует, что этот пользователь зарегистрировался как голосующий.
Да, это позволит abc проголосовать сразу за двоих, но не все сразу же, я просто демонстрирую возможность нечеткой идентификации
Но здесь есть другая проблема - этот сервак является точкой доверия и может проголосовать за любого, кто не пришёл на выборы. И ты никак это не проверишь.
Если мы проверяем личность через какой-нибудь ключ на токене, то можно оставить серваку пруф того, что ты действительно получал у него "бюллетень".
А потом сервак публикует лог всех, кто получал "бюллетени". И если ты не голосовал, но внезапно нашёл в этом списке себя, то сервак в жопе - у него нет пруфа с твоей подписью.
Сервак с урной тоже публикует лог. Поэтому ты можешь проверить, что голосов в сумме не больше, чем получавших бюллетени. И можешь найти в этом логе свой голос и проверить его.
Чем больше народу сделает такие проверки - тем больше вероятность, что никто никого не наебал. Как-то так.
А зачем серверу знать, что он подписывает не мусор, а настоящий ключ? Подпись на мусоре — проблема исключительно пользователя, злонамеренно использовать её он нигде не сможет.
А в общем случае слепой подписи ты серваку кидаешь тыщу документов. И он просит дать ключи от 999 из них чтобы убедиться, что в них не хуйня. А потом вслепую подписывает оставшийся. Очень тяжёлый алгоритм, на самом деле.
Ну вот как пример документа, наверное, анонимный чек сойдёт: (рандом, 100 рублей).
Я серваку даю 100 рублей и мешок таких чеков. Он 999 из них вскрывает и убеждается, что там действительно написано "100 рублей". А последний вслепую подписывает.
Теперь я могу этот чек засунуть в какой-нибудь блокчейн для защиты от повторов и анонимно получить товар или услугу.
База паспортов россиян, зарегистрировавшихся для участия в электронном голосовании по поправкам к Конституции РФ, опубликована в открытом доступе. Файл обнаружил телеграм-канал «Утечки информации», внимание на пост которого обратила «Медуза».
«На один из форумов уже выложили базу паспортов (серия/номер) граждан, зарегистрировавшихся для участия в электронном голосовании по поправкам в Конституцию! Конверт в Cronos в свободном доступе», — написали авторы канала. Судя по опубликованному ими скриншоту, в файле также указан регион выдачи паспорта и сведения о том, был ли действителен документ в день голосования.
>> Оказалось, что серия и номер каждого паспорта хешированы по алгоритму SHA-256. Данные для хеширования были представлены в виде одного десятичного числа — между серией и номером паспорта не было пробела.
>> Мы запустили в терминале команду ... и через несколько часов восстановили все серии и номера паспортов
У мну за три минуты hashcat на видюхе перебрал всё (60 MH/s).
> Офтопик. Почему нелегальные базы данных чаще всего распространяются в формате файловой СУБД «Cronos Plus»?
Подтверждаю этот оффтопик. Тоже удивлён, зачем использовать проприетарное тормозящее дерьмо вместо нормального «SQLite» или вообще «CSV».
Для за против софт уже есть давно, и писался не за одну ночь.
Это стихийное говно произошло из-за того, что сначала всем было похуй, а потом друг оказалось, что пресса проводит эксперименты и пытается голосовать на разных участках и комбинировать дистанционное с реальным. Чтобы избежать такой возможности спровоцировать себя в СМИ, сделали базу тех, кто зарегистрировался на Эл. Голосование, чтобы на реальных участках смотреть, не голосовал ли уже человек, и имеет ли право.
Хотели забить да, много кто проголосовал дважды и даже трижды, журналист Дождя например голосовал на участке по прописке, дистанционно и ещё когда к нему на дом приходили с урной, что-то типа такого.
Смешно, что все всерьез обсуждают филькин референдум. Будто кому то не похуй, будто был на свете хоть один человек с мозгом, который реально не мог предсказать результаты этого референдума за пол года
Ни туда, ни сюда: для всех жителей слишком мало (в Москве и в Нижегородской области в сумме в десяток раз больше будет, даже если вычесть детей, не имеющих паспортов), а для зареганных в электронном голосовании многовато (почему-то не верю, что 1,2 млн изъявили желание участвовать в электронном питушении).
во-первых так им и надо, долбоёбам. Если человек настолько глуп, что ходит на фейковый референдум, то он должен страдать.
Во-вторых это многое говорит нам о технической грамотности питухов, делавших госуслуги. Когда вводите туда свой пароль -- помните, что он может случайно оказаться плейнтекстом в файле parol.txt, лежащем в document root
на самом деле пугает действительно такая степень ламерства.
Первокурсник же понимает, что если у тебя в паспорте серия+номер это десять десятиричных цифр, то перебор даже всех вариантов на современном железе это фигня на посном масле
Все равно это нарушение прайваси. Я могу знать твой паспоррт (например, я работаю курьером, и ты мне его показал, чтобы забрать товар), и теперь я знаю -- голосовал ты или нет.
Питушки, можно на пинде ВООБЩЕ не линковаться с CRT? Если да, то будет ли в теории меньше и быстрее?
Я готов работать ТОЛЬКО С Win32API. Что будет с точкой входа?
Какой компилятор интересует? «MSVC»? Тогда у штатного линкера (link.exe) есть ключик /ENTRY:pituh, который назначает точкой входа метку pituh; ключик /NODEFAULTLIB игнорирует список библиотек по умолчанию. У cl.exe ключик /link передаёт аргументы линкеру.
По дефолту у «MSVC» точка входа нацелена на символ _mainCRTStartup, лежащий в crt0.obj или в crtexe.obj, который упакован в стандартную библиотеку. Можешь посмотреть, что эта функция обычно делает.
* Указал /ENTRY:myfun
* Отключил либы /NODEFAULTLIB
* Ругнулось на security_cookie, пришлось отключить Buffer Security Check: /GS-
Отвалились конечно всякие strlen и пр. Без всего этого завелось:)) Думал, будет быстрее (все таки не надо инициализировать CRT), но чото как-то не стало. Видимо совсем это незаметное время занимает на моем компе. Измерял ptime: в винде же нету нормального time, как в unix.
CRT состоит из двух частей. Та часть, что идет студией -- она опенсурсная, да.
Вторая часть идет с виндой.
Вот из за __security_init_cookie я и вынужден был /GS-
А __tmainCRTStartup это то, что я (наивно) пытался избежать, чтобы выиграть время.
Оказалось, что это спички.
А что за вторая часть? msvcr*.dll при динамической линковке? Да вроде у неё общий код со статической библиотекой (там ифдефами всё разруливается).
Кстати, код __security_init_cookie я нашёл. Там снимаются все подряд параметры системы и ксорятся друг с другом, чтобы получилась труднопредсказуемая питушня:
GetSystemTimeAsFileTime(&systime.ft_struct);
#if defined (_WIN64)
cookie = systime.ft_scalar;
#else /* defined (_WIN64) */
cookie = systime.ft_struct.dwLowDateTime;
cookie ^= systime.ft_struct.dwHighDateTime;
#endif /* defined (_WIN64) */
cookie ^= GetCurrentThreadId();
cookie ^= GetCurrentProcessId();
#if _CRT_NTDDI_MIN >= NTDDI_VISTA
#if defined (_WIN64)
cookie ^= (((UINT_PTR)GetTickCount64()) << 56);
#endif /* defined (_WIN64) */
cookie ^= (UINT_PTR)GetTickCount64();
#endif /* _CRT_NTDDI_MIN >= NTDDI_VISTA */
QueryPerformanceCounter(&perfctr);
#if defined (_WIN64)
cookie ^= (((UINT_PTR)perfctr.LowPart << 32) ^ perfctr.QuadPart);
#else /* defined (_WIN64) */
cookie ^= perfctr.LowPart;
cookie ^= perfctr.HighPart;
#endif /* defined (_WIN64) */
/*
* Increase entropy using ASLR relocation
*/
cookie ^= (UINT_PTR)&cookie;
#if defined (_WIN64)
/*
* On Win64, generate a cookie with the most significant word set to zero,
* as a defense against buffer overruns involving null-terminated strings.
* Don't do so on Win32, as it's more important to keep 32 bits of cookie.
*/
cookie &= 0x0000FFFFffffFFFFi64;
#endif /* defined (_WIN64) */
/*
* Make sure the cookie is initialized to a value that will prevent us from
* reinitializing it if this routine is ever called twice.
*/
if (cookie == DEFAULT_SECURITY_COOKIE)
{
cookie = DEFAULT_SECURITY_COOKIE + 1;
}
#if defined (_M_IX86)
else if ((cookie & 0xFFFF0000) == 0)
{
cookie |= ( (cookie|0x4711) << 16);
}
#endif /* defined (_M_IX86) */
The UCRT is now a Windows component, and ships as part of Windows 10. The static library, DLL import library, and header files for the UCRT are now found in the Windows 10 SDK.
Я ходил по сырцам той, что идет с SDK. Видел страшный плюсовый код с лямбдами, и даже наступал в баг: одна функция для запуска внешней программы там расчитывала на наличие переменной с указанием дефолтной папки для диска в блоке переменных окружения. Для программ, запущенных не через cmd в какой-то версии win10 этой переменной не было, и все ебалось. Моя прога падала, если запустить ее через ярлычок на рабочем столе (потому что она запускала питон, а питон дергал ту самую функцию для запуска другой внешней проги) и тогда мне пришлось дебажить CRT:)
Да дебаггеру вообще похуй на язык, на самом деле. Ему маппинга адресов на строки в исходнике хватает.
Ты можешь на основе текстового файла сгенерить сишку, расставить в ней #line со ссылками на исходный текстовик, и прекрасно дебажить его и бряки ставить.
Там ещё есть тонкости, связанные с многопоточной и однопоточной версией, с отладочной и релизной, с гуёвой и соснольной, с уникодной и восьмибитной. Но примерно цепочка вызовов такая.
У меня однопоточная релизная динамическая консольная юникодная.
Кстати, я не пользую wprintf, бо я не хочу превращения wide chars в однобитную хуйню.
Я пишу WriteFile прямо в STD_OUTPUT. Получается двубайтовый LE (бо интел) уникод.
В сосноли это конечно выглдит "в о т т а к", но я читаю выхлоп жабой, а там есть чарсет для 16-LE
Можно, но это скорее для извращений в духе своей операционки или соревнований про демку в 64к.
Для практических задач это не имеет смысла, имхо. Будешь потом жить без деления и т.п.У MS нет четкого разделения между CRT и либой поддержки конпелятора как в том же гцц. Хотя на 64-битке с этим наверное полегче будет чем на 32-битке.
З.ы. И с интринсиками типа memset вдоволь наебешься потом. Будут в рекурсию падать и т.п.
Причём конпелятор их сам юзает иногда чтобы структуры чистить. Или если цикл подходящий по смыслу увидит. Поэтому он может их позвать даже если их в коде явно нигде нет.
Помните, как Линус Торвальдс пердолился, добавляя по одной функции к своей ОС до тех пор, пока у него конпелятор не завёлся? Вот тут будет почти то же самое.
Кстати, а в «MinGW» будет проще отказаться от рантайма? Там же компилятор дёргает только «libgcc», а «libc» не трогает? Или я слишком хорошо о нём думаю?
И в «Шланге» по идее можно провернуть такой же трюк. А вот у прочих компиляторов («Борманд Си», «Ватком Си», «Цифровой Марс») библиотека монолитная, так что для её кастомизации придётся попердолиться.
А действительно, там есть длинное деление, длинное умножение, длинный сдвиг на те случаи, когда одной инструкцией сделать не получается (например, для 64-битных аргументов на 32-битке).
Fike # 0
cообщают «Открытые медиа» https://openmedia.io/news/n3/eksperty-u-organizatorov-elektronnogo-golosovaniya-est-texnicheskaya-vozmozhnost-podtasovyvat-rezultaty/
https://github.com/moscow-technologies/blockchain-voting/blob/voting2020/elec2020/ballot/resources/views/election/show.tpl#L14-L16
какой секьюрити )))
Fike # 0 ⇈
POST https://elec.2020og.ru/#complete
Cookie: laravel_session=abcdef123
ответ: HTTP/2 302 Found
location: https://elec.moscow/election/check/ длинная-длинная-цепочка-из-букв-и-цифр=
(на самом деле тут скрыт ваш номер бюллетеня, допустим, 777-ggg-aaa. Как проверить: вставить эту длинную цепочку на сайт https://www.base64decode.org/, раскодировать, потом взять из результата url и еще раз раскодировать. Нас наперстками не проведешь!)
phpBidlokoder2 # 0
nemyx # 0
Именно поэтому я за «PHP».
Fike # 0
НЕ
ВЫ
НО
СИ
МО
Fike # 0 ⇈
Fike # 0 ⇈
а нахуй был нужен блокчейн без этой функции?
nemyx # 0 ⇈
Fike # 0 ⇈
nemyx # 0 ⇈
Fike # 0
Анонимность уровня /dit.mos.ru/
bormand # 0 ⇈
bormand # 0 ⇈
И это неустранимый недостаток веба.
nemyx # 0 ⇈
Fike # 0 ⇈
bormand # 0 ⇈
bormand # 0 ⇈
MAKAKA # 0 ⇈
тогда ванишд
я просто жопой прочитал
bormand # 0 ⇈
И тебе нужны либо автономная хтмлка либо опенсурсная прога чтобы избавиться от влияния сервака и иметь возможность поревьючить код.
bormand # 0 ⇈
Дык не анонимное то вообще тупо. Подписываешь свой голос смарткартой да кидаешь в урну.
Fike # 0 ⇈
Например, блондинистый распиздяй может прийти и сказать, что он первый распиздяй, который сегодня голосует и получить бюллетень.
Рыжий распиздяй попробует так сказать, но бюллетень уже не получит, как и блондинистый не-распиздяй. Тогда он перейдет к следующему атрибуту, но если кроме "рыжий" и "распиздяй" у него есть третий атрибут, его всё еще невозможно идентифицировать.
bormand # 0 ⇈
Fike # 0 ⇈
Да, это позволит abc проголосовать сразу за двоих, но не все сразу же, я просто демонстрирую возможность нечеткой идентификации
bormand # 0 ⇈
Ты генеришь уникальный ключ. Сервак проверяет твою личность и вслепую, не видя этого ключа, подписывает его (по сути там 2 слоя RSA).
Теперь ты просто ждёшь несколько часов, подписываешь свой голос этим ключом и отправляешь его на сервак.
gost # 0 ⇈
bormand # 0 ⇈
gost # 0 ⇈
bormand # 0 ⇈
З.Ы. Но это, наверное, уже никак не решить.
bormand # 0 ⇈
А потом сервак публикует лог всех, кто получал "бюллетени". И если ты не голосовал, но внезапно нашёл в этом списке себя, то сервак в жопе - у него нет пруфа с твоей подписью.
Сервак с урной тоже публикует лог. Поэтому ты можешь проверить, что голосов в сумме не больше, чем получавших бюллетени. И можешь найти в этом логе свой голос и проверить его.
Чем больше народу сделает такие проверки - тем больше вероятность, что никто никого не наебал. Как-то так.
guest # 0 ⇈
То-есть если 86% людей срало-ебало голосование, то проверить что либо невозможно?
bormand # 0 ⇈
Поскольку голосование анонимное, ты кроме своего голоса или отказа ничего проверить не можешь.
guest # 0 ⇈
А если я не проверил, то можно наврать, да?
bormand # 0 ⇈
Если ты голосовал, то ты можешь проверить, что твой голос учтён правильно.
Если тебе похуй - то за тебя могут приписать что угодно. И без твоей помощи никто это не проверит т.к. голосование анонимное.
guest # 0 ⇈
А как он проверяет мою личность?
Если он проверяет ее посредством публичного ключа, то что мешает ему запомнить кому он какой билютень выдал?
bormand # 0 ⇈
Смарт-картой наверное. Других способов я не вижу. Смски и пароли - хуйня без неотрекаемости.
> запомнить
Дык алгоритм слепой подписи. Он не знает, какой именно ключ он подписал формируя твой бюллетень.
guest # 0 ⇈
1. знать, что это не мусор, а настоящий ключ
2. не знать, что это за ключ
gost # 0 ⇈
bormand # 0 ⇈
А в общем случае слепой подписи ты серваку кидаешь тыщу документов. И он просит дать ключи от 999 из них чтобы убедиться, что в них не хуйня. А потом вслепую подписывает оставшийся. Очень тяжёлый алгоритм, на самом деле.
guest # 0 ⇈
Или он не сможет потом по биллютеню узнать этот документ?
bormand # 0 ⇈
Ну само собой "документ" - это не вордовский файл. Осмысленный документ вслепую не подписать.
Это скорее про какие-нибудь ключи, сертификаты и прочую криптографическую хуйню.
bormand # 0 ⇈
Я серваку даю 100 рублей и мешок таких чеков. Он 999 из них вскрывает и убеждается, что там действительно написано "100 рублей". А последний вслепую подписывает.
Теперь я могу этот чек засунуть в какой-нибудь блокчейн для защиты от повторов и анонимно получить товар или услугу.
MAKAKA # 0 ⇈
bormand # 0 ⇈
MAKAKA # 0 ⇈
Он не может его расшифровать.
Но он может запомнить этот набор байт.
Или он потом не сможет по нему расшифровать мой бюллитень?
MAKAKA # 0 ⇈
мокака поняла
нужно зашифровать сообщение, и послать его на подпись, а затем убрать шифр.
Не самый простой для понимания прот
nblXOMAKAKA # 0 ⇈
MAKAKA # 0 ⇈
nblXOMAKAKA # 0 ⇈
Desktop # 0 ⇈
- в сову играл штоле?
jojaxon # 0
gost # 0 ⇈
jojaxon # 0 ⇈
bormand # 0 ⇈
MAKAKA # 0 ⇈
--Мне знакомый сервер сломал
--Хакер?
--Да нет, мудак..
nemyx # 0 ⇈
XYPO3BO3 # 0
«На один из форумов уже выложили базу паспортов (серия/номер) граждан, зарегистрировавшихся для участия в электронном голосовании по поправкам в Конституцию! Конверт в Cronos в свободном доступе», — написали авторы канала. Судя по опубликованному ими скриншоту, в файле также указан регион выдачи паспорта и сведения о том, был ли действителен документ в день голосования.
XYPO3BO3 # 0 ⇈
https://meduza.io/feature/2020/07/09/vlasti-fakticheski-vylozhili-v-otkrytyy-dostup-personalnye-dannye-vseh-internet-izbirateley
XYPO3BO3 # 0 ⇈
https://web.archive.org/web/20200701074010/checkvoter.gosuslugi.ru/degvoter.zip
Обратите внимание на домен.
jojaxon # 0 ⇈
XYPO3BO3 # 0 ⇈
jojaxon # 0 ⇈
У мну за три минуты hashcat на видюхе перебрал всё (60 MH/s).
gost # 0 ⇈
guest # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
Офтопик. Почему нелегальные базы данных чаще всего распространяются в формате файловой СУБД «Cronos Plus»?
gost # 0 ⇈
Подтверждаю этот оффтопик. Тоже удивлён, зачем использовать проприетарное тормозящее дерьмо вместо нормального «SQLite» или вообще «CSV».
guest # 0 ⇈
У меня в нулевых была база телефонов на кроносе, на рынке купленная.
jojaxon # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
guest # 0 ⇈
Там надо было еще FILES=200, иначе дос не мог столько файлов открыть
jojaxon # 0 ⇈
admin # 0 ⇈
jojaxon # 0 ⇈
admin # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
https://xss.is/threads/39453/
obnulenie.rar, ха-ха-ха.
TEH3OPHblu_nemyx # 0 ⇈
https://github.com/occrp/cronosparser
TEH3OPHblu_nemyx # 0 ⇈
https://xss.is/threads/39445/#post-241723
5 метров в архиве, 20 после распаковки.
1 190 720 записей.
Для скачивания нужна регистрация на форуме. Регистрация у меня заняла меньше минуты.
TEH3OPHblu_nemyx # 0 ⇈
admin # 0 ⇈
vistefan # 0 ⇈
vistefan # 0 ⇈
Стоит единица - воспользовался возможностью проголосовать
admin # 0 ⇈
Если за/против - был бы пиздец.
vistefan # 0 ⇈
Это стихийное говно произошло из-за того, что сначала всем было похуй, а потом друг оказалось, что пресса проводит эксперименты и пытается голосовать на разных участках и комбинировать дистанционное с реальным. Чтобы избежать такой возможности спровоцировать себя в СМИ, сделали базу тех, кто зарегистрировался на Эл. Голосование, чтобы на реальных участках смотреть, не голосовал ли уже человек, и имеет ли право.
admin # 0 ⇈
vistefan # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Эм, а это точно база зареганных, а не вообще всех жителей?)
jojaxon # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
guest # 0 ⇈
Во-вторых это многое говорит нам о технической грамотности питухов, делавших госуслуги. Когда вводите туда свой пароль -- помните, что он может случайно оказаться плейнтекстом в файле parol.txt, лежащем в document root
admin # 0 ⇈
guest # 0 ⇈
Первокурсник же понимает, что если у тебя в паспорте серия+номер это десять десятиричных цифр, то перебор даже всех вариантов на современном железе это фигня на посном масле
bormand # 0 ⇈
Голый номер паспорта никому не интересен так то. Без привязки к какой-то ещё инфе.
guest # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
guest # 0
Я готов работать ТОЛЬКО С Win32API. Что будет с точкой входа?
XYPO3BO3 # 0 ⇈
Разбери устройство CRT, тогда поймёшь.
Какой компилятор интересует? «MSVC»? Тогда у штатного линкера (link.exe) есть ключик /ENTRY:pituh, который назначает точкой входа метку pituh; ключик /NODEFAULTLIB игнорирует список библиотек по умолчанию. У cl.exe ключик /link передаёт аргументы линкеру.
По дефолту у «MSVC» точка входа нацелена на символ _mainCRTStartup, лежащий в crt0.obj или в crtexe.obj, который упакован в стандартную библиотеку. Можешь посмотреть, что эта функция обычно делает.
guest # 0 ⇈
XYPO3BO3 # 0 ⇈
https://docs.microsoft.com/ru-ru/cpp/build/reference/entry-entry-point-symbol?view=vs-2019
https://stackoverflow.com/questions/22934206/what-is-the-difference-between-main-and-maincrtstartup
С божественной сишечкой в принципе можно работать, но без argc, argv — их придётся доставать через API (GetCommandLine), без SEH.
С крестами будет жопа. Тебе придётся писать свою CRT.
guest # 0 ⇈
* Указал /ENTRY:myfun
* Отключил либы /NODEFAULTLIB
* Ругнулось на security_cookie, пришлось отключить Buffer Security Check: /GS-
Отвалились конечно всякие strlen и пр. Без всего этого завелось:)) Думал, будет быстрее (все таки не надо инициализировать CRT), но чото как-то не стало. Видимо совсем это незаметное время занимает на моем компе. Измерял ptime: в винде же нету нормального time, как в unix.
guest # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
Реальный пример точки входа из CRT (после препроцессирования, чтобы влезло в 2 к символов):
Да, именно отсюда зовётся main: А что происходит перед его вызовом, ты видишь.
guest # 0 ⇈
Вторая часть идет с виндой.
Вот из за __security_init_cookie я и вынужден был /GS-
А __tmainCRTStartup это то, что я (наивно) пытался избежать, чтобы выиграть время.
Оказалось, что это спички.
TEH3OPHblu_nemyx # 0 ⇈
Кстати, код __security_init_cookie я нашёл. Там снимаются все подряд параметры системы и ксорятся друг с другом, чтобы получилась труднопредсказуемая питушня:
guest # 0 ⇈
The UCRT is now a Windows component, and ships as part of Windows 10. The static library, DLL import library, and header files for the UCRT are now found in the Windows 10 SDK.
Я ходил по сырцам той, что идет с SDK. Видел страшный плюсовый код с лямбдами, и даже наступал в баг: одна функция для запуска внешней программы там расчитывала на наличие переменной с указанием дефолтной папки для диска в блоке переменных окружения. Для программ, запущенных не через cmd в какой-то версии win10 этой переменной не было, и все ебалось. Моя прога падала, если запустить ее через ярлычок на рабочем столе (потому что она запускала питон, а питон дергал ту самую функцию для запуска другой внешней проги) и тогда мне пришлось дебажить CRT:)
_wspawnv, =C:
TEH3OPHblu_nemyx # 0 ⇈
Я показал фрагменты из какой-то древней студии, последнюю не копал.
TEH3OPHblu_nemyx # 0 ⇈
Где ещё такое чудо, где ещё такой прогресс?
guest # 0 ⇈
При том, что есть ``PATHEXT``, то-есь знание о расшырении зашито в разных местах.
>traits::tcscpy_s
А вот если я такой сишник-няшник, дебажу свой код, и вдруг прихожу дебагом к крестовне, и у меня случается багор
bormand # 0 ⇈
Ты можешь на основе текстового файла сгенерить сишку, расставить в ней #line со ссылками на исходный текстовик, и прекрасно дебажить его и бряки ставить.
guest # 0 ⇈
Я сижу на брекпоинте в визуальном дебагере, углуюляюсь в код, прихожу в стандратную библиотеку, и вижу там C++
bormand # 0 ⇈
MAKAKA # 0 ⇈
Если я пишу на чистом си, то я как-то ожидаю в стандартной библиотеке тоже видеть только си, не?
bormand # 0 ⇈
ABI соблюдается, сишные хедера тебе выдали. Остальное - деталь реализации, на которую всем пофиг.
TEH3OPHblu_nemyx # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
Теперь будет работать быстрее.
bormand # 0 ⇈
admin # 0 ⇈
scanf подождёт непустого ввода
лучше буквы ввести
UPD: на ванишед ответил
bormand # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
Там ещё есть тонкости, связанные с многопоточной и однопоточной версией, с отладочной и релизной, с гуёвой и соснольной, с уникодной и восьмибитной. Но примерно цепочка вызовов такая.
Думай, много или мало времени это может отнять.
guest # 0 ⇈
Кстати, я не пользую wprintf, бо я не хочу превращения wide chars в однобитную хуйню.
Я пишу WriteFile прямо в STD_OUTPUT. Получается двубайтовый LE (бо интел) уникод.
В сосноли это конечно выглдит "в о т т а к", но я читаю выхлоп жабой, а там есть чарсет для 16-LE
admin # 0 ⇈
vistefan # 0 ⇈
pitux time?
3.14159265 # 0 ⇈
bormand # 0 ⇈
Для практических задач это не имеет смысла, имхо. Будешь потом жить без деления и т.п.У MS нет четкого разделения между CRT и либой поддержки конпелятора как в том же гцц. Хотя на 64-битке с этим наверное полегче будет чем на 32-битке.
bormand # 0 ⇈
Причём конпелятор их сам юзает иногда чтобы структуры чистить. Или если цикл подходящий по смыслу увидит. Поэтому он может их позвать даже если их в коде явно нигде нет.
TEH3OPHblu_nemyx # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
bormand # 0 ⇈
А список особо и не нужен. Популярные довольно быстро понадобятся, а остальные скорее всего никогда.
TEH3OPHblu_nemyx # 0 ⇈
Это мы предупреждаем компилятор, что будем реализовывать memset, чтобы он в рекурсию не свалился?
TEH3OPHblu_nemyx # 0 ⇈
https://docs.microsoft.com/en-us/cpp/preprocessor/function-c-cpp?view=vs-2019
А заодно вот это:
https://docs.microsoft.com/en-us/cpp/preprocessor/intrinsic?view=vs-2019
TEH3OPHblu_nemyx # 0 ⇈
И в «Шланге» по идее можно провернуть такой же трюк. А вот у прочих компиляторов («Борманд Си», «Ватком Си», «Цифровой Марс») библиотека монолитная, так что для её кастомизации придётся попердолиться.
bormand # 0 ⇈
В гцц кстати у меня получалось даже поддержку исключений прикрутить. Она там неплохо отвязана от рантайма и прочей сишности.
TEH3OPHblu_nemyx # 0 ⇈
guest # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈
NickPepper # 0