[Uneex] vmware 3 hacking

Nikita V. Youshchenko uneex@cs.msu.su
Sat, 8 Dec 2001 22:50:40 +0300


На этот раз пришлось повозиться.

Задача: заставить vmware 3 работать со временной лицензией неограниченно 
долго.

Актуальность: теперь с vmware.com временную лицензию можно скачивать не 
более одного раза. Можно, конечно, регистритровать там новые адреса, но 
это муторно.

Отличия от взлома 2.x: теперь vmware содержит несколько программ. В 
частности, лицензию проверяет bin/vmware, а диалог с пользователем по 
части того, что лицензия неверна, ведет lib/vmware/bin/vmware-ui. Из-за 
этого старая технология, основанная на поиске в исполняемом файле 
обращений к строкам, выводимым при обнаружении просроченной лицензии, 
оказалась неприменимой.

Использованная технология взлома:
при помощи gdb и простенькой программы, общающейся с gdb, была собрана 
трасса из первых 100000 адресов команд, выполняемых vmware, в варианте с 
откатанной системной датой (до времени, когда временная лицензия была еще 
действительно), и в варианте с нормальной системной датой.
Тут неприятной проблемой оказалось то, что vmware посылает сам себе 
SIGSEGV и продолжает работать из обработчика SIGSEGV - а как определить 
адрес обработчика, неясно: gdb это не позволяет, поймать момент установки 
обработчика также не удалось, а по команде stepi она просто запускалась и 
не останавливалась. Помогла такая хитрость - watchpoint на $esp+4 - тогда 
на ближайшей инструкции push произошел останов и адрес обработчика был 
найден.

В резальтате сравнения двух трасс была найдена точка, где они начинают 
различаться. Остается заменить условный переход на безусловный ...

Итак, в файле bin/vmware надо найти последовательность байт
  8b 46 04 39 c2 77 0a 75 0d
и заменить 75 на eb

Вроде работает ...
:-)