Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для Валеркуй
2 / 2 / 3
Регистрация: 17.06.2013
Сообщений: 122

Программа со своей компиляцией. Урезанный С++ компилятор

03.01.2015, 21:02. Показов 1087. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем смысл такой, у нас есть программа которая сама себя компилирует. т. е. с собой носит урезанный С++ компилятор.
Например прога нашла какой-нить avp.exe в процессах она взяла и создала какой-нить .h .cpp файлик. компильнула его себе ввиде dll и подключила себе.
Я не вирусоПисец, просто интересуюсь очень уж идеи у них прикольные... Например вирус который себя компилит с помощью своего ассамблера! Можно же создавать адаптационные программы! Или ИИ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.01.2015, 21:02
Ответы с готовыми решениями:

Как "прикрутить" компилятор паскаля, к своей программе на Delphi7?
Есть программа написанная на Delphi7, требуется проанализировать код из TMemo написанный на паскале, скомпилировать его и выдать результат....

Урезанный админ.
Ситуация такая, комп в локалке с доменом. при входе в систему писал что неисправен контроллер либо учётной записи не существует. (Всё...

Где найти максимально урезанный дистрибутив Windows XP?
Где можно найти максимально урезанной дистрибутив XP? Нашел было MicroXP (www.youtube.com/watch?v=S59Af1dDAAM) размером 100 МБ, но...

15
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.01.2015, 21:31
Вопрос-то в чем?

Добавлено через 2 минуты
Цитата Сообщение от Валеркуй Посмотреть сообщение
Например прога нашла какой-нить avp.exe в процессах она взяла и создала какой-нить .h .cpp файлик. компильнула его себе ввиде dll и подключила себе.
А без avp.exe в процессах файлы не создаются? А чего сразу с собой dll не таскать?
Цитата Сообщение от Валеркуй Посмотреть сообщение
Например вирус который себя компилит с помощью своего ассамблера!
бедный...
Цитата Сообщение от Валеркуй Посмотреть сообщение
Можно же создавать адаптационные программы!
А чего свой код не менять сразу, зачем какие-то сорцы, компиляторы?
0
 Аватар для Валеркуй
2 / 2 / 3
Регистрация: 17.06.2013
Сообщений: 122
03.01.2015, 21:44  [ТС]
Цитата Сообщение от Velesthau Посмотреть сообщение
А чего свой код не менять сразу
Для того что бы его поменять нужно как минимум дизассемблироваться.
Компиляции в одну dll никто не отменял...
Цитата Сообщение от Velesthau Посмотреть сообщение
А без avp.exe
Это я к слову ляпнул...
Цитата Сообщение от Velesthau Посмотреть сообщение
Вопрос-то в чем?
Нужен исходник С++ компилятора или С на худой конец.
Чтобы лишнее из него удалить, а основное оставить типа basic только компилируемый.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.01.2015, 21:53
Цитата Сообщение от Валеркуй Посмотреть сообщение
Для того что бы его поменять нужно как минимум дизассемблироваться.
Где ты, интересно, таких глупостей набрался...
Цитата Сообщение от Валеркуй Посмотреть сообщение
Нужен исходник С++ компилятора или С на худой конец.
gcc
Вперед
0
 Аватар для Валеркуй
2 / 2 / 3
Регистрация: 17.06.2013
Сообщений: 122
03.01.2015, 22:05  [ТС]
Цитата Сообщение от Velesthau Посмотреть сообщение
таких глупостей
Эм, ану-ка тыкни носом в меня как ты собрался изменять код .exe скомпилированной?
Ну например у нас есть код который выдает в командную строку "я загрузился". Каким образом ты можешь Добавить строку "я нашел avp.exe"?
Цитата Сообщение от Velesthau Посмотреть сообщение
gcc
Тяжелый, я tcc нашел, покопаюсь в нем...
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.01.2015, 22:18
Цитата Сообщение от Валеркуй Посмотреть сообщение
Эм, ану-ка тыкни носом в меня как ты собрался изменять код .exe скомпилированной?
Даже не планирую тратить на это время, горе-вирусописец.
Цитата Сообщение от Валеркуй Посмотреть сообщение
Каким образом ты можешь Добавить строку "я нашел avp.exe"?
Зависит от реализации программы. Например, изначально заложив в ее логику возможность добавления новых строк. Это будет правильнее. Либо добавив код, который при необходимости вызовет функцию вывода повторно, передав ему новый указатель на строку. Либо добавить в памяти код для повторного вызова, что тоже можно.
0
 Аватар для Валеркуй
2 / 2 / 3
Регистрация: 17.06.2013
Сообщений: 122
03.01.2015, 22:29  [ТС]
Цитата Сообщение от Velesthau Посмотреть сообщение
горе-вирусописец
Я не такой! Исключительно с целью самообразования!
Цитата Сообщение от Velesthau Посмотреть сообщение
изначально заложив в ее логику
не катит... Нужно именно взять саму exeшку и вшить туда еще 1 строку.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.01.2015, 22:35
Цитата Сообщение от Валеркуй Посмотреть сообщение
не катит... Нужно именно взять саму exeшку и вшить туда еще 1 строку.
Делай как хочешь, мне пофигу ты эту же строку будешь закладывать себе в .exe, чтобы потом положить ее в сорец, легче тебе не станет.

Добавлено через 2 минуты
Цитата Сообщение от Валеркуй Посмотреть сообщение
компильнула его себе ввиде dll и подключила себе
Опять же удобнее и скрытнее, написать свой интерпретатор, или взять готовый, встроить его в программу. Скрипт можно генерировать прямо в памяти и отдавать ему. Чем генерировать файлы, компилировать, уродство еще то.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.01.2015, 22:37
Цитата Сообщение от Валеркуй Посмотреть сообщение
Эм, ану-ка тыкни носом в меня как ты собрался изменять код .exe скомпилированной?
сплайсинг жеж

Если вкратце:

1. берем обычный чаровый массив.
2. заполняем его циферками.
3. приводим тип "массив" и к типу "указатель на функцию".
4. просим операционную систему считать что кучка байт по адресу функции - есть исполняемый машинный код.
5. запускаем функцию на выполнение.

6. И о боже! наш массифчик с циферками оказался уже откомпилированной функцией!

7. PROFFIT!!!

-------------------

Другой способ:

1. Имеем заранее известную функцию.
2. Получаем адрес функции.
3. Запрашиваем систему на запись в участок памяти, по адресу функции.
4. Читаем первые 6 байт, и запоминаем их.
5. Перетираем эти первые 6 байт на жамп на другую нашу функцию.
6. Теперь при запуске функции будет выполнена совсем другая функция (на которую сделан джамп)
7. Восстанавливаем оригинальные 6 байт.
8. Теперь при запуске функции будет исполнено её оригинальное туловище.

9. PRFIT!!!!


зы: гугли "инжект", "сплайсинг", "перехват функций".
0
 Аватар для Валеркуй
2 / 2 / 3
Регистрация: 17.06.2013
Сообщений: 122
03.01.2015, 22:51  [ТС]
Цитата Сообщение от Velesthau Посмотреть сообщение
Чем генерировать файлы, компилировать, уродство еще то.
Ну рас дело о вирусах зашло... А как же тогда передавать от пк на пк? что, дамп памяти все время иметь? Как-то не по нашему....
Цитата Сообщение от Velesthau Посмотреть сообщение
Скрипт можно генерировать прямо в памяти и отдавать ему.
А вот тут я не въехал... Вопрос переносимости, все равно нужно будет сохранять куда-то то что "генерировал" и при следующем запуске чтение байт-кода будет куда быстрей чем открывалка файликов.

Добавлено через 3 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
просим операционную систему считать что кучка байт по адресу функции - есть исполняемый машинный код.
А где по этому поводу почитать можно? т.е. получается что мы в памяти(онп же RAM память) генерируем exe файл???? А потом говорим что он есть exe?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
03.01.2015, 23:01
Валеркуй,
ты уж определись чего хочешь
а то
Цитата Сообщение от Валеркуй Посмотреть сообщение
Например прога нашла какой-нить avp.exe в процессах она взяла и создала какой-нить .h .cpp файлик. компильнула его себе ввиде dll и подключила себе.
не понятно как она будет создавать эти .h .cpp если речь не идет о декомпиляции
Цитата Сообщение от Валеркуй Посмотреть сообщение
т.е. получается что мы в памяти(онп же RAM память) генерируем exe файл????
поскольку речь идет о exe подозреваю что для винды все эти прилуды
для винды exe файл и исполняемый код в памяти это разные вещи
по поводу внутреннего устройства винды можно почитать Рихтера, Русиновича, Касперски
у последнего книга есть "Компьютерные вирусы изнутри и снаружи" и много статей в журнале "Хакер"
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.01.2015, 23:06
Цитата Сообщение от Валеркуй Посмотреть сообщение
А где по этому поводу почитать можно?
В интернетах.
Я указал по каким ключевым словами нужно гуглить.

Полагаю так же, что ваши шансы прокачаться по теме резко возрастут, если вы приобщитесь к высокой культуре вирусологов.

Цитата Сообщение от Валеркуй Посмотреть сообщение
т.е. получается что мы в памяти(онп же RAM память) генерируем exe файл????
Нет.

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

Инструкции процессора - это тупо какие то циферки.
Все что делает компилятор - переводит текстовые закорючки высокоуровневого языка программирования вот в эти вот циферки.

Например, если вы пользуетесь вижал-студией, то вы можете скомпилировать простейшую функцию, поставить на неё бряку, и в отладчике брякнуться. А потом кликнуть "перейти к ассемблеру", и увидить эти циферки.

То есть, фактически откомпилированный код ни что иное, как простая последовательность цифр.


Вы можете вручную создать эту последовательность. И сказать: эта последовательность - моя функция. Запусти мне мою функцию.

И она запустится. Если там будет чача - приложение рухнет.
Если что-то осмысленное - будет работать.

Вообще, если вы задаете подобные вопросы, то вам нужно изучать ассемблер.
И прописаться в тематическом разделе, а не здесь.

То что вы хотите - выходит за рамки одного лишь с++, это затрагивает ассемблер, это затрагивает системное программирование.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
03.01.2015, 23:07
Цитата Сообщение от Валеркуй Посмотреть сообщение
Вопрос переносимости, все равно нужно будет сохранять куда-то то что "генерировал" и при следующем запуске чтение байт-кода будет куда быстрей чем открывалка файликов.
Пиши, куда хочешь. Можешь хоть в копию своего же .ехе скрипт запихнуть: в область данных, в ресурсы. И копировать обновленный .ехе.

Добавлено через 15 секунд
Цитата Сообщение от Валеркуй Посмотреть сообщение
т.е. получается что мы в памяти(онп же RAM память) генерируем exe файл????
Нет, просто патчим память.
0
 Аватар для Валеркуй
2 / 2 / 3
Регистрация: 17.06.2013
Сообщений: 122
03.01.2015, 23:17  [ТС]
Теска...
Цитата Сообщение от ValeryS Посмотреть сообщение
ты уж определись чего хочешь
Я просто хотел сказать чтобы вирус(о чем это я? Образовательные цели... себя пересобрал с учетом добавления функционала. Например есть обычный string с "SS01" типа "spyscreen01" зашел в гугль, нагугль код какой-то взял свои исходники понял что такого модуля нету взял слизал код с сайта, взял свой код и вместе все это скомпилилось в полноценный вирус. Пусть простят меня анти-вири.
Цитата Сообщение от ValeryS Посмотреть сообщение
по поводу внутреннего устройства винды
Нет, я думал что из памяти RAM которая, можно
Цитата Сообщение от hoggy Посмотреть сообщение
2. заполняем его циферками.
3. приводим тип "массив" и к типу "указатель на функцию".
4. просим операционную систему считать что кучка байт по адресу функции - есть исполняемый машинный код.
т.е. в памяти получается будет висеть отдельная программа?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.01.2015, 23:24
Цитата Сообщение от Валеркуй Посмотреть сообщение
т.е. в памяти получается будет висеть отдельная программа?
Нет. То есть в памяти получается, будет висеть отдельная кучка байт, которую система разрешила исполнять, как машинный код.

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

Грубо говоря, если в рантайме вы создали массив циферок и толкнули его как функцию - значит в рантайме вы создали функцию.

-----------------------------------------

Никогда больше не говорите фраз типа "мы в памяти создали программу".
Возьмите книги по ассемблеру, и системному программированию.

Через полгода будете произносить фразы типа "форкнул процесс... "
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
03.01.2015, 23:31
Цитата Сообщение от Валеркуй Посмотреть сообщение
себя пересобрал с учетом добавления функционала.
ищи "саммодифицируищиеся программы"
ты примерно представляешь как работает компилятор?
как работает ОС
ну и наконец как работает процессор
В каком кольце крутится пользовательский код а в каком код ОСи(драйвера)
Цитата Сообщение от Валеркуй Посмотреть сообщение
Нет, я думал что из памяти RAM которая, можно
А что такое RAM? страницы памяти? куда грузится исполняемый код?
это не ДОС сейчас у каждой задачи своя память, и чаще всего из одного процесса к другому не достучишся
и как ты собираешься сохранять модифицируемую программу, файл открыт его система открыла при запуске, писать никто не даст
Вот когда будешь знать ответы на эти вопросы, тогда и сможешь ответить на свой вопрос
В общем случае ответ можно
но геморрой еще тот, нужно прекрасно знать ОС, архитектуру, ассемблер
И то что пойдет под виндой не пойдет под линуксом, про Мак вообще отдельная песня
и пока пишешь дырки разработчики могут закрыть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.01.2015, 23:31
Помогаю со студенческими работами здесь

Программа, находящая в своей базе ссылки
Помогите пожалуйста, нужна программа, которая может искать в заданной базе предложение или ссылку и выводить текст, который будет присвоен...

Программа для перевод своей валюты
У меня есть программа. Для вычисления моей валюты. Мне нужно сделать после 15.000.000 скидку, без скидки программа делит число на 0,0002 со...

Программа компилятор
Помогите с программой - скачал исходники а разобраться не могу. Как эти исходники компилируют сами себя ?

Программа для создание своей сборки Windows XP.
Искал на форуме, ничего путного не нашел... Я часто переустанавливаю Windows XP, хочу создать свою ОС, со всоими драйвверами и...

Программа находящая ссылки в своей базе данных
Помогите пожалуйста, нужна программа, которая может искать в заданной базе предложение или ссылку и выводить текст, который будет присвоен...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru