LINUX.ORG.RU

Выучил c++: как внедрить в бинарь свой код

 ,


0

2

Выучил я с++ и написал программу.

Теперь осталось запаковать ее и сделать первый выпуск.

Вот что я хочу: хочу, чтобы в бинарном файле можно было изменить строку. То есть бинарник будет как бы именным, с неким штампом, подписью, токеном. Я хочу типа регекспом искать в бинарнике некую строку и заменять ее на уникальную. Ну типа логина. Строка это будет например char name[10] = «holderxxxx». Вот мне этот holderxxxx нужно заменять на реальное значение, чтобы потом в коде вывести «привет name»

Как такое сделать?

★★★★
Ответ на: комментарий от rumgot

Принципиально поменяется то, что ключ для расшифровки можно будет хранить открытым текстом прямо в коде и не париться.

С другой стороны, если злобный хацкер может править бинарник, то смысла во всём этом нет никакого.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hobbit

Что мешает это на этапе сборки сделать, а не через байтодрочку?

seiken ★★★★★
()
Ответ на: комментарий от hateyoufeel

Принципиально поменяется то, что ключ для расшифровки можно будет хранить открытым текстом прямо в коде и не париться.

Те же яйца только в профиль. Если хранить открытой строкой, то ее элементарно найти и расшифровать файл. А если ключ получать через некоторую последовательность запутанных вызовов, то далеко не каждый специалист способен восстановить ключ (кроме того в криптографических библиотеках существует некоторый функционал для защиты от чтения памяти). И таким образом в данном случае главная задача - сокрытие ключа, а не выбор между симметричным/ассиметричным. Единственное преимущество ассиметричного алгоритма в данном случае в том, что даже при получении ключа, хакер не сможет подсунуть в зашифрованный файл свои значения. А вот с точки зрения защиты чтения зашифрованной информации два подхода дают однохренственную защиту.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от gobot

Да это всего лишь установка значения для переменной препроцессора, которую он потом использует в операторе print. Вручную сейчас так компилятор никто не вызывает (кроме экспериментирования и обучения разумеется). Сейчас все параметры для компилятора устанавливаются через систему управления сборкой (например CMake).

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 1)

Выучил я с++

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

anonymous
()
Ответ на: комментарий от Pavval

чувак пишет о том, что выучил язык в некой досточной для него на текущий момент мере, и как пруф (для самого себя, а не для нас) — сварганил прогу. как бы очевидно, не?

anonymous
()

Выучил я с++

Ну, теперь пора браться за PHP.

rupert ★★★★★
()
Ответ на: комментарий от aureliano15

А можно передать в командной строке.

Два чая этому господину. Зачем делать потенциальное UB ?

jo_b1ack ★★★★★
()
Ответ на: комментарий от gobot

В 90-е знакомый гуру сделал себе из nc просто petrovich commander, это еще тогда можно было в DOS

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от gobot

зачем ты слушаешь идиотов?

оптимизирующий компилятор довольно часто разные строки склеивает в одну. Типа

const char hello_world[] = "hello world";
const char world[] = "world";

вполне в секции ".data" окажутся представленными одной строкой «hello world», а указатели hello_world и world будут просто нацелены на ее разные куски. Угадай с трех раз, что произойдет, если ты sed'ом по бинарнику пройдешься.

Тебе надо гуглить в сторону включения блобов на этапе линковки. Типа такого что-то http://www.burtonini.com/blog/2007/07/13/embedding-binary-blobs-with-gcc/

demidrol ★★★★★
()
Ответ на: комментарий от anonymous

чувак пишет о том, что выучил язык в некой досточной для него на текущий момент мере, и как пруф (для самого себя, а не для нас) — сварганил прогу. как бы очевидно, не?

  1. Сам вопрос показывает что не выучил. 2. Если б пост был про пых, а не про плюсы, то это было б ещё ок. А «выучил плюсы» это вообще запрещённое словосочетание.
Pavval ★★★★★
()

NAME=holderxxxx sh cfg.sh > localcfg.c; cc localcfg.c -o localcfg.o; cc main.o localcfg.o -o main

anonymous
()
Ответ на: комментарий от pavlick

А что мешает в сорсы добавить дефайн? Мейком собирать сразу двадцать бинарей. Так и насчёт размера париться не надо

pihter ★★★★★
()
Ответ на: комментарий от pihter

Не против. Разбил на отдельные модуля для ускорения пересборки (ну вдруг там софтина жирная, хотя врядли, да). Да мы об одном и том же говорим, он хочит бинарь править, а мы отговариваем и зовем править исходники.

pavlick ★★
()
#pragma pack(push,1)

typedef struct UniqueInfo
{
	char    header[51];
        char    name[128]
}UniqueInfo;

volatile UniqueInfo uniqueInfo = {.header = "$UNIQUE_INFO_83bb1368_7783_4afd_b503_f91a64a0caa3$",
                                  .name = "anon"};
#pragma pack(pop)
anonymous
()

Выучил я с++

Скажи, как там в будущем, коронавирус кончился? Рецептом путешествия во времени и омоложения не поделишься? Просто тут народ его учит учит до пенсии и так и не успевает выучить.

peregrine ★★★★★
()
Ответ на: комментарий от gobot

Храни бинарь в виде объектного файла, рядом исходный файл со структурой , при закачке данные вбиваются в структуру, файл компилируется и линкуется с остальным и пользователю летит бинарник. Пол секунды подождёт перед закачкой.

anonymous
()
Ответ на: комментарий от peregrine

Вы вместо соли храните плейнтекст? Тогда мы идём к вам.

Соль с хэшем хранится на сервере, а на клиенте — только плейнтекст. Его, конечно, тоже можно зашифровать, но для расшифровки надо или вводить пароль, являющийся ключом, что не проще, чем просто вводить пароль (можно ещё использовать менеджер паролей, но это и кодить нужно дополнительно, и зависит от среды и менеджера паролей, и пользователь должен его установить и настроить), или просто хитро кодировать, а потом раскодировать, но это элементарно хакается в отладчике. Так что простого универсального средства для хранения зашифрованных паролей на стороне клиента нет.

aureliano15 ★★
()
Ответ на: комментарий от aureliano15

Внезапно, пароль как раз и существует, для того чтобы его вводить, а не брать с плейнтекста при наличии физического доступа к компу. Марш учить безопасность. Его и хранить не надо, для кого шифрование придумали?

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

Так я разве ж спорю? Но по условию задачи логин с паролем хранится в программе и вводится автоматически. А насколько это опасно/безопасно – вопрос к ТС’у. Я думаю, что если речь идёт о доступе к какому-то не слишком приватному аудио/видео, то слишком заморачиваться с безопасностью большого смысла нет. Вот если ТС в этом аудио/видео раскрывает узкому кругу лиц все свои счета и пин-коды, тогда другое дело. Но вряд ли он там что-то такое раскрывает. В любом случае, я исходил из условия задачи и говорил только о безопасности самой программы в плане корректной работы при любых условиях, а не об общей безопасности.

aureliano15 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.