Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
dqrest
4 / 4 / 0
Регистрация: 06.01.2012
Сообщений: 115
#1

Как изменять значения переменной уже скомпилированного кода

18.10.2012, 11:04. Просмотров 1635. Ответов 10
Метки нет (Все метки)

Всем привет)есть код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class MyClass
{
int i;
public:
MyClass()
{
i=100;
}
~MyClass(){}
void changeI()
{
  i=-100;
}
};
 
 
void main()
{
 MyClass x;
 x.changeI();
}
Допустим, вот мы скомпилировали этот код на MS VS 2010. У нас есть .exe, вот этот exe мы как только отработал мы его закрываем. Как и что нужно сделать чтобы при исполнении метода changeI(), чтобы при последующих вызовах exe, в конструкторе присваивалось i=-100??? Следующее основное требование:1) значение, которое хранит переменная i секретная, нет должно быть таких простых способов узнать ее значение. 2)реестр использовать нельзя, иначе переменную можно удалть 3) в файл(неважно, бинарный, зашифрованный и т.п.) тоже выгружать нельзя , можно ваще узнать и удлать.
4)не хотелось бы заново перекомпилить прогу

Есть какие-нить идеи?подскажите путь, куда нужно копать!!!Плиз)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 11:04
Ответы с готовыми решениями:

Странные значения уже инициализированной переменной
std::cout << "Введите кол-во городов\n"; std::cin >> N; city *A = new city;...

Изучение структуры скомпилированного кода на C++
Не подскажете, где можно прочитать про преобразования С++ кода в АСМ, к...

Раздельный native unit test для проекта скомпилированного как Debug и как Release
Используя условную компиляцию версия Debug и Release может существенно...

Как сделать,чтоб после выполнения программа выполнялась заново и считывала значения уже с другого файла
#include "stdafx.h" #include "algorithm" // для min, max #include "iostream"...

Как происходит присвоение значения переменной?
Здравствуйте. Какие способы присвоения значения существуют? Расскажите...

10
OhMyGodSoLong
~ Эврика! ~
1245 / 994 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
18.10.2012, 11:14 #2

Не по теме:

Ваша паранойя беспочвенна.


Значение вашей переменной можно узнать из exe-файла, если он не зашифрован/запакован.

Если он зашифрован/запакован, то узнать нельзя, но, соответственно, увеличивается геморрой по его изменению.

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

Ах да, альтернативный индусский вариант: храните чиселку у себя на сервере и запрашивайте её через сеть.
1
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
18.10.2012, 11:18 #3
Цитата Сообщение от dqrest Посмотреть сообщение
которое хранит переменная i секретная, нет должно быть таких простых способов узнать ее значение.
Дизасемблер отменили???
Цитата Сообщение от dqrest Посмотреть сообщение
)не хотелось бы заново перекомпилить прогу
ищи самомодифицируюшиеся программы
но уровень разработчика должен быть достаточно высок
кроме языка ты должен знать ОС ФС и прочие вкусности

Добавлено через 2 минуты
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Если он зашифрован/запакован, то узнать нельзя,
щас еще
просто
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
увеличивается геморрой по
отладчик дизасемблер дамп памяти
"Что один человек сделал, другой завсегда сломать может"(с) кузнец "Формула любви"
1
dqrest
4 / 4 / 0
Регистрация: 06.01.2012
Сообщений: 115
18.10.2012, 11:35  [ТС] #4
Понял. Значит в гугле нужно искать темы по тегу "свмомодифицирующие программы"???
0
Kastaneda
Jesus loves me
Эксперт С++
4823 / 2997 / 345
Регистрация: 12.12.2009
Сообщений: 7,559
Записей в блоге: 2
Завершенные тесты: 1
18.10.2012, 11:52 #5
Цитата Сообщение от ValeryS Посмотреть сообщение
ищи самомодифицируюшиеся программы
Похоже имеется ввиду самомодифицирующийся код, а это ни чем не поможет. Это когда в момент исполнения программа меняет свой код (который находится в ОЗУ), сам исполняемый файл от этого не меняется.

Как вариант - открывать программу как файл для записи, и писать по заранее известному адресу (там, где лежит переменная) новое значение. Но этого нельзя сделать в момент выполнения программы, поэтому можно создать отдльный процесс, которые сделает это после того, как программа закроется.
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
18.10.2012, 11:53 #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
(который находится в ОЗУ), сам исполняемый файл от этого не меняется.
а как же вирусы????
потом если порыться в старых форумах (еше Fido шные news группы) то там постоянно обсуждался вопрос "программа которая сама себя перезаписывает"
0
Kastaneda
Jesus loves me
Эксперт С++
4823 / 2997 / 345
Регистрация: 12.12.2009
Сообщений: 7,559
Записей в блоге: 2
Завершенные тесты: 1
18.10.2012, 11:54 #7
Цитата Сообщение от Kastaneda Посмотреть сообщение
по заранее известному адресу (
а можно искать по какому-нибудь magic number.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
а как же вирусы????
Не понял, при чем здесь вирусы. Программа, которая перезаписывает свой исполняемый файл и самомодифицирующийся код это разные вещи.
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
18.10.2012, 11:56 #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не понял, при чем здесь вирусы.
При том что они уже лет десять перезаписывают сами себя и при этом самомодифицируются
0
Kastaneda
Jesus loves me
Эксперт С++
4823 / 2997 / 345
Регистрация: 12.12.2009
Сообщений: 7,559
Записей в блоге: 2
Завершенные тесты: 1
18.10.2012, 11:56 #9
Пример сомомодифицирующегося кода
Код
//псевдокод
[some_address] = (b = a - c); 

some_address:
    a = b + c;
исполняемый файл же от этого не изменится.
0
ValeryS
Модератор
7215 / 5478 / 682
Регистрация: 14.02.2011
Сообщений: 18,530
18.10.2012, 12:00 #10
Цитата Сообщение от Kastaneda Посмотреть сообщение
исполняемый файл же от этого не изменится.
а вот когда ты его модифицировал перепиши исполняемый файл(не спрашивай как, я никогда этим не занимался) но такое возможно
как вариант программа состоит из двух файлов exe и dll модифицируем dll (файл на чтение/запись)
загружаем dll, выполняем код внутри dll выгружаем, ну и т.д
0
Kastaneda
18.10.2012, 12:38     Как изменять значения переменной уже скомпилированного кода
  #11

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
но такое возможно
Я ж не утверждаю обратное. конечно возможно.

0
18.10.2012, 12:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 12:38
Привет! Вот еще темы с ответами:

Как сложить все значения одной переменной
Задание: "Даны натуральные числа от 1 до 50.Найти сумму тех из них которые...

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

Функция: изменение значения определенного разряда восьмибитного числа на 1 и на 0 (остальные разряды не изменять)
Написать функции, изменяющие значение определенного разряда восьмибитного числа...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru