Хламидомонада / Говнокод #25323 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
doit({txs, [Tx]}) ->
    X = tx_pool_feeder:absorb(Tx),
    Y = case X of
	    ok -> hash:doit(testnet_sign:data(Tx));
	    _ -> <<"error">>
		     end,
    {ok, Y};

Прекраснейший код на Erlang из великолепнейшей криптовалюты AMOVEO
Здесь мы видим эндпоинт для отправки транзакций в сеть, возвращающий в случае ошибки ["ok","ZXJyb3I="]
Приглядевшись можно увидеть закодированное в base64 слово «error»

Запостил: silvesterdrago silvesterdrago, (Updated )

Комментарии (70) RSS

  • я помню на приатках wow, юзали какой-то аддон, для переноса персонажей с разных серверов. он собирал всю инфу о персонаже в таблицу. буквально всю: внешний вид, ачивки, голду, инвентарь, шмотки.
    вот эти долбоебы юзали base64 чтобы таблицу зашифровать. а аддоны то пишутся на луа. то есть, весь код открытый. ну вот у меня и появился таурен с ачивками за убийство Тралла 😀
    Ответить
    • > зашифрованную
      > base64
      Помнится, на ГК кто-то проебал учётку из-за "зашифрованного" андроид студией пароля.
      Ответить
      • Кстати, что там утекло: пароль от «Яндекса»/«Гугла» или ещё от какого-то сервиса?
        Ответить
      • Ну путают люди термины «шифрование» и «кодирование». Подумаешь.

        В принципе, и «Base64» можно назвать шифрованием, только ключ всем известен («ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl mnopqrstuvwxyz0123456789+/»).
        Ответить
        • >Ну путают люди термины «шифрование» и «кодирование». Подумаешь.
          Понятно.

          Это сообщение я зашифровал с помощью UTF-8.
          Ответить
    • Да что ты, все ж знают что "Haskell" и ``Erlang`` это почти то же самое
      Ответить
      • какаято нинужная функциональная хуня для математиков-тиоретиков

        настоящие программисты используют "PHP" и хаскелей этих вагших зне 3нают
        Ответить
        • Ну извините, я то думал, что здесь смешно то, что ответ об ошибке выглядит так же, как и успешный — ["ok", <base64 encoded tx_hash|error word>]
          Ответить
          • Вы, вероятно, в первый раз тут, да? Не знаете местных мемов?
            Ответить
                • Как же заебала эта «обработка ошибок». Вот бы в каком-нибудь языке не нужно было их обрабатывать! Точно был бы за этот язык![/​color]
                  Ответить
                    • Обработал ошибки в bat. Проверь.
                      cwsdpmi
                      fasm %1.asm
                      if errorlevel 1 goto :eof
                      %1
                      :eof
                      Ответить
                      • Как насчёт полиглота bat+asm, bat+com или asm+com?

                        Точка с запятой в COM-файле означает инструкцию CMP, точка с запятой и пробел —– это CMP SP, [BX+SI]. Таким образом, комментарий в асме может быть вполне валидным кодом в COM-файле.

                        REM в COM-файле –— это PUSH DX; INC BP; DEC BP. Пробел —– это AND (ожидается байт mod R/M). Комментарий в bat-файле тоже может быть валидным кодом в COM-файле.

                        Пока в мою петушиную голову никак не может прийти, как совместить ASM и BAT.
                        Ответить
                        • Напиши бинарь который представляет собой одновременно com-файл и исходник этого же com-файла на асме.
                          Ответить
                          • Мне кажется, что эта задача по сложности сопоставима с программированием на «Malbolge».
                            Ответить
                        • > совместить ASM и BAT
                          можно нахуярить программ с именами мнемоник. Так можно даже ассемблер сделать
                          Ответить
                          • > ассемблер
                            Набор com файлов, каждый из которых умеет конпелять одну инструкцию?
                            Ответить
                            • Ога. Можно на батниках, смещение и имя выходного файла хранить в пельменных окружения, сами батники дергают db, dw, dd и пр. (вот для них, наверное, придётся com-фалы делать, а не bat, чтобы писать не-аски байты и чтобы выражения считать), которые дописывают баты в файл.
                              Ответить
                              • Можно сделать 256 файлов с байтами. Тогда и db можно написать на батниках.
                                Ответить
                                • А ещё надо как-то dw, dd и пр. расщеплять на db. Но вообще можно и на батниках, но с каким-нибудь цальцулятором.
                                  Ответить
                                    • C:\>set /a a="37*(3<<1)*(2^1)"
                                      666


                                      Ключ /A указывает, что строка справа от знака равенства является числовым
                                      выражением, значение которого вычисляется. Обработчик выражений очень
                                      прост и поддерживает следующие операции, перечисленные в порядке убывания
                                      приоритета:

                                      () - группировка
                                      ! ~ - - унарные операторы
                                      * / % - арифметические операторы
                                      + - - арифметические операторы
                                      << >> - двоичный сдвиг
                                      & - двоичное И
                                      ^ - двоичное исключающее ИЛИ
                                      | - двоичное ИЛИ
                                      = *= /= %= += -= - присвоение
                                      &= ^= |= <<= >>=
                                      , - разделитель операторов
                                      Ответить
                          • >> можно нахуярить программ с именами мнемоник

                            Я за. Для добавления новых инструкций (SSE, AVX, NEON, VFP) не нужно будет перекомпилировать ассемблер. Достаточно будет всего лишь добавить новых программ. Это настоящий unix-way!
                            Ответить
                      • >не нужно было их обрабатывать
                        Ответить
                  • В "PHP" не надо обрабатывать ошибки. Они доставляются пользовтаелю прямо в браузер в формате

                    Notice: undefined variable $razmer in /home/o/ochkolupof/kupitrusi.ru/index.php at line 3489

                    Именно потому я за "PHP"
                    Ответить
                • И начинается изба-гадальня. Большинство программистов под .net (как и вообще большинство пользователей винды) ничего не знают про свою ОС, и потому привыкли гуглить ошибки и выполнять все что там написано.

                  В итоге они три раза перезагрузились, зарегистрировали какие-то непонятные ком компоненты как им посоветовали на tomwhardware, поправили в реестре значение ключа с {9B723D37-FA2A-4491-8766-4AC054F2B811} на {9B723D37-FA2A-4591-8766-4AC054F2B811}, а ошибка все равно летит

                  подумывают переустановить винду и проверить на вирусы теперь
                  Ответить
                  • Это всё потому, что «Студия» у них «Express» или «Community Edition». Нужно «Ultimate» поставить, тогда всё исправится.
                    Ответить
                    • А теперь без сарказма. Видел, как чувак не смог скокококомпилировать свою программу на «Турбопаскале», потому что использовал плавающепитушиные типы данных double и extended. С типом real всё компилировалось, а вот с этими никак. Он сделал вывод, что это из-за того, что у него «Турбопаскаль» урезанный (самодельный репак на джвух дискетах). Искал полную версию, нашёл... и опять не компилируется.

                      А ларчик просто открывался: в исходник нужно было добавить директиву {$N+} (либо компилятор запустить с соответствующим ключом, либо в IDE указать в настройках проекта, но в исходнике как-то надёжнее). Выпилить поддержку плавающего питуха простым репаком нельзя, ибо она зашита в компиляторе и в модуле SYSTEM.TPU, без которого ничего не скомпилируется.

                      *****

                      А ещё Тарас троллил почтенную публику «Гейдева» вопросом, почему в его ассемблере сдвиг вправо есть знаковый и беззнаковый, а сдвиг влево только беззнаковый (ну точнее, знаковый якобы есть, но из-за какого-то бага компилируется в тот же опкод). Чуваки ему посоветовали достать полную версию компилятора.
                      Ответить
                      • Сдвиг влево доступен только в платной версии ассемблера
                        Ответить
                      • Питушня какая-то. А что на самом деле у Тараса было?
                        Операция сдвига влево принимает знаковость числа отдельным параметром?
                        Ответить
                        • Попробую объяснить. У сдвигов есть важное свойство: сдвиг вправо на один разряд делит число на двойку, сдвиг влево на один разряд умножает число на двойку. Хотелось бы, чтобы это работало и для положительных, и для отрицательных чисел.

                          Пример:
                          100 = 0x64 = 0b0110100;
                          50 = 0x32 = 0b0011010.

                          50 из 100 можно получить сдвигом вправо, 100 из 50 —– сдвигом влево. Освободившиеся разряды в обоих случаях заполняются нулями.

                          Теперь для отрицательных (в дополнительном коде, известном так же как two's complement):
                          -100 = 0x9c = 10011100;
                          -50 = 0xce = 11001110;

                          -50 из -100 можно получить сдвигом вправо с заполнением освободившихся разрядов единицами (т. е. слева как бы вдвигается бесконечная лента единиц).

                          -100 из -50 можно получить сдвигом влево (естественно, с потерей единиц, которые выезжают за пределы разрядности).
                          Ответить
                          • Теперь посмотрим на реализации в кокококомпиляторах.

                            В «Java» есть оператор >>>, который освободившиеся разряды заполняет нулями (беззнаковый сдвиг), и оператор >>, который в случае сдвига положительного числа так же заполняет освободившиеся разряды нулями, а в случае сдвига отрицательного числа заполняет освободившиеся разряды единицами (знаковый сдвиг).

                            Для сдвига влево в «Java» есть оператор <<, а вот оператора <<< нет.

                            В ассемблере для x86 есть беззнаковый сдвиг вправо (SHR), знаковый сдвиг вправо (SAR) и беззнаковый сдвиг влево (SHL). А вот знаковый сдвиг влево (SAL) компилируется в тот же код операции, что и SHL.

                            Вопрос: почему в «Java» нет оператора <<<, а в наборе инструкций x86 не различаются знаковый и беззнаковый сдвиг влево?
                            Ответить
                            • Это всё хорошо, но почему нет двух разных левых сдвигов?
                              В XX веке на командах решили сэкономить, чтоб вписать ОП-код с N бит?

                              Видно же, что в половине случаев ushl и sshl отличаются, как и ushr от sshr:
                              number     ushl(1)   sshl(1)
                               u  s bin   u bin  M  s bin  M EQ
                               0  0 0000  0 0000 +  0 0000 +  +
                               1  1 0001  2 0010 +  2 0010 +  +
                               2  2 0010  4 0100 +  4 0100 +  +
                               3  3 0011  6 0110 +  6 0110 +  +
                               4  4 0100  8 1000 +  0 0000 -  -
                               5  5 0101 10 1010 +  2 0010 -  -
                               6  6 0110 12 1100 +  4 0100 -  -
                               7  7 0111 14 1110 +  6 0110 -  -
                               8 -8 1000  2 0000 - -8 1000 -  -
                               9 -7 1001  2 0010 - -6 1010 -  -
                              10 -6 1010  4 0100 - -4 1100 -  -
                              11 -5 1011  6 0110 - -2 1110 -  -
                              12 -4 1100  8 1000 - -8 1000 +  +
                              13 -3 1101 10 1010 - -6 1010 +  +
                              14 -2 1110 12 1100 - -4 1100 +  +
                              15 -1 1111 14 1110 - -2 1110 +  +
                              
                              number     ushr(1)   sshr(1)
                               u  s bin   u bin  M  s bin  M EQ
                               0  0 0000  0 0000 +  0 0000 +  +
                               1  1 0001  0 0000 +  0 0000 +  +
                               2  2 0010  1 0001 +  1 0001 +  +
                               3  3 0011  1 0001 +  1 0001 +  +
                               4  4 0100  2 0010 +  2 0010 +  +
                               5  5 0101  2 0010 +  2 0010 +  +
                               6  6 0110  3 0011 +  3 0011 +  +
                               7  7 0111  3 0011 +  3 0011 +  +
                               8 -8 1000  4 0100 + -4 1100 +  -
                               9 -7 1001  4 0100 + -3 1101 +  -
                              10 -6 1010  5 0101 + -3 1101 +  -
                              11 -5 1011  5 0101 + -2 1110 +  -
                              12 -4 1100  6 0110 + -2 1110 +  -
                              13 -3 1101  6 0110 + -1 1111 +  -
                              14 -2 1110  7 0111 + -1 1111 +  -
                              15 -1 1111  7 0111 + -1 1111 -  -
                              
                              number - исходное число
                              *sh*(1) - сдвиг на 1 бит
                              u      - беззнаковое
                              s      - знаковое
                              l      - левое
                              r      - правое
                              M      - математическая корректность
                              EQ     - равенство *sh*, *sh*

                              Они что, воспользовались тем, что правые сдвиги различаются, по большей части, когда результат математически верен, а левые - только когда один из сдвигов неверен, и потому плюнули на консистентность команд и полноту области определения, прописали UB для математически неверных случаев знакового сдвига и сэкономили на ОП-коде?
                              Ответить
                              • То есть Тарас никого не троллил, это авторы компиляторов выкинули нужную операцию, просрали консистентность, усложнили написание кода - всё ради короткого номера команды в бинарном виде??
                                Ответить
                                • При сдвиге влево чисел, модуль которых превышает половину модуля числа Тараса (-63...-128 и 65...127 для байта, -16383...-32768 и 16385...32767 для 16-битного слова и т. д.) получаем арифметическое переполнение.

                                  Разработчики процессоров и компиляторов решили, что специальная операция с сохранением математического смысла (умножение на два) для таких случаев никому не понадобится. Старшие биты всё равно будут потеряны (мы и при беззнаковом сдвиге их теряем).
                                  Ответить
                        • У Тараса был Целерон без корпуса, естественно премиальные флагы Пентиума не поддерживались.
                          Ответить
            • Непредвиденный успех! Т. е. ошибки обычное дело?

              Es una equivocación pensar que todos los productos extranjeros son mejores que los nacionales...
              Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8