Как изменить дату внутри EXE-файла?

4169
FernandoSBS

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

Это окна .exe. Когда проблема возникает, я получаю сообщение. Я могу найти текст этого сообщения внутри .exeфайла, используя простую программу поиска. Но я не могу найти эту дату запуска.

Возможно, потому что есть много способов записи даты в программе, я имею в виду 18_09 17.10 17/09/2013, ...

-3
Строки в exe остаются просто закодированным текстом, но форматы даты являются двоичными типами и не будут появляться ни в каком виде текстового поиска. то, что вы просите, будет довольно сложно для кого-то, не разбираясь в отладке и бинарном исправлении файлов. Frank Thomas 10 лет назад 1
Возможно, лучшими направлениями являются следующие: 1. Вернитесь на пару лет назад к своему собственному компьютеру. 2. Фактически объясните, в чем ваша конкретная проблема, с каким программным обеспечением. Попытка взломать (скажем, разобрать) исполняемые файлы отнимает много времени и почти бесполезна. Кстати, у меня есть программное обеспечение, которое ведет себя так, и обычно я просто регрессирую дату на ПК. Doktoro Reichard 10 лет назад 0
@DoktoroReichard Знаете ли вы какую-нибудь простую программу (поэтому я могу избежать необходимости писать ее самостоятельно), которая бы изменила дату на хорошую, запустила приложение, и сразу после того, как программа обнаружит, что программа запущена, она изменит дату назад? FernandoSBS 10 лет назад 0
@FrankThomas, есть ли какая-нибудь программа, которую вы знаете, которая конвертирует дату, которую я даю, в двоичный формат, чтобы я мог найти файл для этого? это довольно просто Кроме того, какую программу мне нужно перезаписать этот двоичный код с новым двоичным кодом даты? FernandoSBS 10 лет назад 0
Я бы сказал, что разбор существующей даты является обязательным условием для ее обратной записи, но в основном вы должны прочитать двоичный файл программы, определить длину и смещение, на которых нужно перезаписать, сгенерировать новую дату, заменить из смещения на длину и записать файл вернулся снова. Frank Thomas 10 лет назад 0
@FrankThomas хорошо, но как найти дату в коде exe? Я использовал шестнадцатеричный редактор, но как мне преобразовать дату в ту, которую программа может искать? Например, 2013/12/07? FernandoSBS 10 лет назад 0
Подобные вопросы - причина, по которой мы, как группа, пытаемся убедить вас сдаться или пойти другим путем. поскольку он не знает среды выполнения и компилятора, используемых при компиляции вашего приложения, невозможно даже начать поиск. Frank Thomas 10 лет назад 1
@FernandoSBS Если это делается для того, чтобы избежать истечения срока действия лицензии (вы не указали «свою проблему»), то вы, вероятно, не найдете «жесткую» дату (двоичную или другую) в коде. (Я программист, и я бы не стал так легко;) Несмотря на это, SU не место, чтобы просить совета взломать такую ​​программу (слишком техническую и слегка неэтичную). Возможно, вам посчастливится создать пакетный файл с сохранением даты из `date / t`, установив его в` date 01-01-2013`, запустив вашу программу и установив дату обратно на `date% save_date%`. Rik 10 лет назад 1

2 ответа на вопрос

3
Doktoro Reichard

I take the chance to write this answer to advise you against messing with the executable itself. As for why, here are the reasons stated in the comments and some of mine:

  • As Rik said, most likely the developer of said program didn't hardcode the actual expiration date (as that would entail building another program as soon as a year passed). That would mean higher maintenance and support costs for said developer.
  • Even if he did hardcode the date, there is no consensus on how to store it. If the expiration date is a string, you might have some luck because as Frank said, most strings are stored as is inside an executable. This isn't a rule, however, and the string might be encrypted or, depending on how the compiler optimized the code, it might be buried inside binary text you can't easily understand.
  • Assuming you could disassemble the program, you would then need to understand the thousands of lines of code that went into the program and detect where the expiration date is stored or called from. However, and depending on country and legislation, this activity is either frowned upon or illegal.

Advices aside, I'm piggybacking on what Rik said, and expanding it a little.

You can create a batch file (as you said .exe files, I'm assuming Windows) using the following commands:

SET CUR_DATE=%DATE% DATE <insert your pretended date here> <start your program here> DATE %CUR_DATE% 

Although I haven't tested it, this supposedly does the following:

  1. Stores the current date, as given by %DATE%.
  2. Sets the PC's date to the one you want, using the DATE command.
  3. Runs the program you want.
  4. Resets the date to the current one, as soon as your program exits.

You can store this batch inside the program's directory, as such you only need to write the program's name, rather than the full path. Be consistent, however, on the date you input, as it needs to be in the same format as what your system expects. See the link about the DATE command for more info; alternatively just do echo %date% to see what format your computer expects the date you input to be.

Да уж. Это один из тех случаев, когда, если у вас есть навык, чтобы сделать это, у вас есть знания, чтобы знать, как это сделать. В старые времена на самом деле было не так сложно, если бы материал не был скрыт (каждую новую версию Dos я проходил и исправлял command.com, чтобы изменить размер среды по умолчанию), но когда мы переходим на языки более высокого уровня, вы получаете все более и более грубый в пути, и становится все труднее найти то, что вы ищете. Loren Pechtel 10 лет назад 0
Проблема в том, что я хотел бы, чтобы дата возвращалась к% DATE% так скоро, как только откроются программы. Не после того, как он закрывается. FernandoSBS 10 лет назад 0
Если это так, добавьте `start` (http://ss64.com/nt/start.html) перед названием / путем к программе. Но вы уверены, что программа будет работать после этого? Doktoro Reichard 10 лет назад 2
Да, это работает. Мне пришлось использовать netstat в ожидании 1000 мс, чтобы он заработал, так как кажется, что в BAT нет команды паузы или ожидания? FernandoSBS 10 лет назад 0
@FernandoSBS `netstat` тоже будет работать. `ping 1.1.1.1 -n 1 -w 3000> nul` - это другой способ (он будет спать 3 секунды или отрегулировать 3000 для миллисекунд). Rik 10 лет назад 1
да netstat это то, что я использовал. FernandoSBS 10 лет назад 0
@FernandoSBS Ооо, а мы забыли про `timeout 1` ?? ;) Таким образом, пакетный файл на самом деле не имеет собственного способа, но у нас уже есть 3 альтернативы. Rik 10 лет назад 0
0
Matthew

Resource Hacker ( http://www.angusj.com/resourcehacker/ ) - это бесплатный инструмент, который можно использовать для открытия и изменения кода и прочего в исполняемых файлах.

Похожие вопросы