Скальпель, зажим... Инструменты для залезания внутрь

Все об исправлении прог =) обучающий раздел - как где то чо то поправить если вдруг очень нужно, в общих чертах для различных сфер
Правила форума
ЗАПРЕЩЕНО размещать материалы по взлому конкретных прог и тем более выкладывать взломанные =) этот раздел для объяснения в общих чертах что да как примерно) для обучения так сказать, без конкретики
Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Пт сен 11, 2009 11:31 pm

Список прог, выложенных в этой теме:
Распаковщик EXE-файлов LookFor - http://blackstrip.ru/toolz/lookfor.rar 700 Кбайт
Просматривальщик связей EXE-шников с DLL-библиотеками Dependency Walker - http://blackstrip.ru/toolz/depwalk.rar 165 Кбайт
Декомпилятор Delphi-программ DeDe - http://depositfiles.com/files/3104147 6,5 Мбайт
16-ричный редактор/дизассемблер Qview - http://blackstrip.ru/toolz/qview.rar 150 Кбайт
W32Dasm дизассемблер/отладчик - http://blackstrip.ru/toolz/w32dasm893.rar 500 Кбайт
Декомпилятор/дизассемблер явы DJ Java Decompiler - http://depositfiles.com/files/3024027 1,68 Мбайт
Редактор/просматривальщик окон в системе и компонентов на них - http://blackstrip.ru/toolz/wincrack.exe 207 КБайт


Вступление

Наверное почти каждому человеку, который давно работает на компе, иногда хотелось поправить чтоб нибудь в какой нибудь программе =) или в мобильном мидлете.

Самая безобидная цель - например, исправить коды софт-клавиш для мобильной игры, чтобы перенести ее с сонерика на сименс например.
Цель пообиднее - сделать чтоб прога работала в триале не 14 дней, а всегда. Или чтобы убрать напоминания что ее надо купить. Или убрать накладывающуюся жирную надпись DEMO на получающуюся картинку-результат. Или сделать чтоб игра из испытательной версии стала полной версией. И всё такое.

В этой теме опишу свои (не хай-лвл) знания, но их достаточно чтобы в общих чертах понять что и как. Кто что знает - добавляйте тоже =)

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Пт сен 11, 2009 11:51 pm

Взлом комповских прог (Windows)

Современные проги могут быть написаны (программистами-казуалами, не хардкорщиками) на Microsoft Visual Studio или на Borland Delphi. Могут конечно быть написаны и злобными программерами на ассемблере, но обычно это только вставки специальные, которые должны быстро работать. Да и виндоус современный очень не любит сырой процессорный код, всякие тама привилегии нужны, или в супердрайвер этот код пихать, драйверам то можно быть на низком уровне. На кобыле к этому виндоусу не подъедешь, особенно старые проги от этого страдают, которые в win98 например спокойно работали +)

Проги, написанные на Microsoft Visual Studio

Microsoft Visual Studio всегда славился вспомогательными библиотеками. Например версия 6.0 (года 98 выпуска где-то) к Visual Basicoвским прогам приматывала всегда внешнюю msvbvm60.dll (наверное, все эту библиотеку по названию знают). Потому что прога от VB была не чистым кодом, а специальным кодом для интерпретатора (виртуальной машины, MicroSoft VisualBasic VirtualMachine 6.0 - это и есть msvbvm60.dll походу). И в такую прогу влезть внутрь было трудно. Взломать ее тоже =) С++ные проги тогда еще бывали почти в чистом коде, хотя и там msvcrt библиотека была. но я тогда еще не знал ни что такое си, ни что такое ява.

А сейчас - вообще Visual Studio перешло на ".NET"-технологию, и все проги теперь похожи на те которые раньше в VB делались. Похожи тем, что они не в чистом коде, а в специальном для интерпретатора языке. Язык весьма похож на яву (если не сказать больше). Поэтому чтоб раскрыть внутренности таких прог - нужные специальные декомпиляторы. Разумеется тут как и в яве сразу придумали "обфускаторы" - программы, которые портят код так, чтоб потом его после декомпиляции читать было почти никак =) ну я этим делом декомпиляции .NET-прог пока не увлекался.

Проги, написанные на Borland Delphi

Borland - прекрасная фирма, выпускающая среду разработки Delphi - это язык с паскалеобразным синтаксисом. Ранее он назывался Турбо-паскаль, был сначала в досе, потом в Вин 3.1, потом в 95 появилась для виндоуса оконная Delphi 1.0 и пошло поехало.

Последняя нормальная версия, проги которой в нормальном ассемблерном коде написаны - это Delphi 7. Позже нее была версия 8 и возможно еще более поздние (за ними уже не следил). Все версии начиная с 8 - это уже .NET, поэтому здесь некоторые проблемы со взломом как у Microsoft Visual Studio прог. Но более ранние версии (7 и раньше) - делают человеческие проги =)

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 12:12 am

Шаг 1 - анализ взламываемой проги.

Ну симптомы смотрим. Например, запускаем игру - она просит "Вставьте диск". К примеру, видим, что она это выдает на виндоусовском окне сообщения (MessageBox), кроме того она пытается залезть на диск, а там другой диск, она его крутит крутит, а потом выдает эту месагу. Запоминаем всё это =) это потом будет важно

Шаг 2 - распаковка исполняемого файла

Самый простой случай - надо поправить EXE-файл проги/игры. Бывают случаи посложнее - прога например просит регистрационный код ввести, а когда вводишь какой нить код - то прога лезет в какую нить свою dll библиотеку, и оттуда вызывает процедуру проверки. Тогда там сложно отследить это. Но про это как нить потом. Сейчас рассмотрим простейший случай - явно в EXE-файле надо исправить что то, чтоб игра диск не просила =)

Прога для виндоуса имеет так называемый MZ и PE-форматы обычно. Это стандартный для exe файлов MZ-заголовок с рядом полей-параметров, потом маленький досовский ассемблерный кусок. Тот самый кусок, который при запуске этой проги в досе выведет нечто типа "This program must be run under Win32". И потом PE-заголовок (Portable Executable кажись обозначает).

Именно в PE-заголовке содержится много полезной информации, в частности "секции" - куски exe-файла. Каждая секция имеет свое имя. И самое главное здесь пожалуй - EXE-файл может быть запакован. Когда он запакован, то вместо нормального ассемблерного кода в нем белиберда (это как txt в rar запаковать, а потом rar открыть прям в блокноте и попытаться прочитать текст). Надо сперва распаковать. Чем?

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 12:32 am

Распаковать можно распаковщиком. Есть много запаковщиков для EXE-файлов. Они в результате делают тоже EXE-файл. Но этот файл меньше раза в три по размеру чем исходный, а при его запуске - сначала быстро запускается процедура распаковки, достает из exe эту белиберду (тело архива) и выкидывает в оперативную память уже в распакованном виде (нормальный ассемблерный код) и передает на него управление. Пользователь этого не замечает, ему кажется что exe-шник запускается как обычно =)

Бывают у некоторых запаковщиков "мертвые" степени сжатия. Сжатые таким образом файлы разжать трудно. Тогда есть проги типа ProcDump, которые сливают прям из оперативы распакованный код exe. Но зачастую результат такого слива - exe-шник кривого размера с поломанной структурой заголовков и секций =) там потом чото ручками надо править. это бывает нелегко) Поэтому всегда хорошо бы если прога поддастся распаковщику и распакуется сама)

Давным давно я собрал ряд распаковщиков в одну прогу, сделал как бы оболочку для них. Вот она оболочка, в комплекте ряд распаковщиков.
Вес 700 Кбайт. http://blackstrip.ru/toolz/lookfor.rar

вот можно ею любой exe-шник открыть. она сравнит имена секций с некоторыми, которые оставляют после себя запаковщики и попытается определить чем запакован exe-шник. Например, вот на скрине видно что моя прога Sequence Viewer запакована запаковщиком UPX =)
Изображение

далее надо нажать "Распаковать" и выбрать один из распаковщиков, далее в зависимости от распаковщика делать действия (для AsPack например - еще раз выбрать exe-шник, для upx - просто смотреть на процесс распаковки). распакованный exe-шник в зависимости от распаковщика может быть положен или рядом с запакованным exe-шником, или поверх него, или вообще в корень диска с: =) если после распаковки окно распаковщика быстро пропадает, и экзешника нигде нету - или оно не распаковалось, или гдето лежит, или можете вообще вручную влезть в llokfor-овскую папку packer и самому запустить любой из распаковщиков. Также можете если ничо не помогает - посмотреть в lookfor-е имена секций, списать их на бумажку, и всякие хитрые названия секций (не code, не data) - поискать в инете запаковщик и распаковщик соответственно =)

В общем каким то хитрым образом вы получили распакованный exe-шник. Или он просто и поначалу не был запакован. (Проверить это легко - ЛЮБЫМ редактором ресурсов, например Restorator-ом влезть в exe-шник и посмотреть встроенные в него картинки, тексты и т.п, если будет написано что файл поврежден - значит запакован). Вот пример моего же секвенс-вьювера, открытого ресторатором:
Изображение

Как видите "ресурс поврежден (вероятно вследствие запаковки или шифрования)". Значит запакован =) или не до конца докачали если)) но тогда и exe-шник запускаться не должен если он действительно битый.

Что же делать теперь? Когда у нас есть распакованный чистый exe-файл =)

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 12:34 am

Шаг 3 - Определение на чем же был этот exeшник спрограммирован =)

Здесь понадобится редактор/просматривальщик ресурсов - например "Restorator" буду использовать (у кого нету его - поищите в интернете, он небольшой по размеру, ну мегабайта 3-4 весит)

Также понадобится стандартная программа "Dependency Walker", которая поставлялась со старыми версия MS Visual Studio. Вот архив с этой прогой http://blackstrip.ru/toolz/depwalk.rar 165 Кбайт всего весит. Далее по тексту буду назвать ее DV.

Открыв экзешник в рестораторе - можно по некоторым признакам узнать на чем была написана прога.

Признак 1: Си и Ассемблер - если в рестораторе в категориях Dialog (собственно там лежат файлы окон, написано где в окне кнопки всякие расположены и какие на них надписи), Menu (тут структуры меню лежат) - видны обычные тексты наподобие таких:

Вот окно проги Dependendy Walker
Изображение

А вот меню проги Dependendy Walker
Изображение

То это значит что прога использует стандартный интерфейс Windows, стандартные окна и меню - и она написана на чем то простом, скорее на Си, но может и на ассемблере.

Признак 2: Дельфи - если в рестораторе в экзешнике видна категория RCData, а в ней DVCLAL, PACKAGEINFO, и потом всякие TFORM1, TFORM2, или любые другие могут быть - то это скорее всего прога, написанная на Дельфи.

Кроме того, если включить в рестораторе наверху режим просмотра-правки ресурсов в текстовом виде и увидеть вот такие тексы внутри этих TFORM1 - со словами TForm и прочей дельфийской лабудой - значит это точно Дельфи!

Изображение

Признак 3: Си - если в DV видна ссылка на MSVCRT библиотеку - это явно сишная прога. Вот например виндосовский проводник имеет такую ссылку +) писали его на си.

Изображение

Признак 4: Старый Visual Basic - если в DV видна ссылка на библиотеку MSVBVM60.dll - эта прога написана на Visual Basicе.

Изображение

Признак 5: Новое Visual Studio (т.е. новый VB, C++ или C#) - если в DV видна ссылка на .NET-библиотеку MSCOREE.DLL - эта прога написана на .NETовском Visual Studio

Изображение

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

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 2:57 pm

Шаг 4 - взлом программ, написанных на Дельфи. Декомпиляция и дизассемблирование

Итак, если вы обнаружили категорию ресурсов RCData, а в ней всякие TFORM1, причем в них текст явный от форм дельфи - то надо ломать ее через Delphi Decompiler (далее ДД). Про него на форуме отдельная тема viewtopic.php?f=27&t=20

Вот на depositfiles выложил DelphiDecompiler (а то жирноват, место на хостинге не хочу забивать) http://depositfiles.com/files/3104147

Если вкратце - запускаем DeDe. Жмем кнопку со значком открытой папки. Выбираем нашу прогу (буду декомпилировать свою InetWatch для примера). И жмем Process.

Изображение

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

Изображение

Далее ДД выдирает напрямую из памяти все классы и формы (окна) программы. Дожидаемся окончания выдирания. Появится сообщение Dump successful (т.е. выдирание успешно завершено).

Изображение

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

Изображение
Изображение

Вторая найдет ссылки на дельфийские стандартные процедуры, компоненты и т.п. и выделит их комментариями (чтоб понятней было по исходнику что где в проге находится и что вообще там происходит). Тоже жмем Yes.

Изображение
Изображение

Теперь надо выдранное и обработанное тело проги сохранить на винт. Выбираем вкладку Project наверху окна ДД. Выбираем папку куда будем сохранять исходники. И жмем Create files.

Изображение

Все. Теперь в папке готовый дельфийский проект. Открываю его например в Дельфи 7.

Изображение

Как видно - теперь во-первых полностью доступно окно проги. Кроме того компоненты окна связаны с процедурами в тексте проги. Только сам текст конечно не в виде дельфийских команд (а то жирно было б, если б так проги вскрывать и превращать в исходники), а в виде ассемблерных команд с комментариями. На этом последнем скрине я открыл процедуру, которая вызывается по клику на строку. Как видно из кода ассемблера - запихиваются параметры функции и собственно сама API функция ShellExecuteA вызывается, запускает URL http://blackstrip.ru, а система такую ссылку вызывает в internet explorere. Т.е. при клике на нее в окне программы пользователю открывается мой сайт в отдельном окне =)

После такой декомпиляции в исходнике видны примерные процедуры (пусть даже иногда со страшными названиями типа proc06DF6483). И видно что в проге происходит.

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

Слева от процессорных ассемблерных команд - 16-ричный код в виде байтов.
например команда E8 9F 55 FB FF - означает call ShellExecuteA.

Теперь бум ломать =) Самое тупое действие, которое я смог придумать здесь - не дать например в этой процедуры вызывать мою страницу blackstrip.ru. Как видите в процедуре сохраняются по очереди параметры (в обратном порядке) и потом вызывается API ShellExecuteA, после чего команда ret (то есть return, возврат) означает завершение процедуры и выход из нее.

Вот мы эту команду ret щас перетащим в самый верх процедуры =) и тогда как тока будет переходить управление в эту процедуру - сразу будет команда ret, и процедура будет сразу завершаться, а до сохранения параметров и вызова shellexecutea дело не дойдет)

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

Было

procedure TForm1.Label5Click(Sender : TObject);
begin
(*
0047288C 6A01 push $01
0047288E 6A00 push $00
00472890 6A00 push $00


Станет первый байт C3, а остальное нам неважно. Поэтому будет

0047288C C301 ret + мусор, до которого выполнение не будет доходить, поэтому все равно что тут будет
0047288E 6A00 push $00 и это теперь все равно
00472890 6A00 push $00 и это тоже, и все до конца процедуры терь не нужно, но пусть формально останется в экзешнике

Итак надо поправить всего 1 байт. Как? С помощью 16-ричного редактора! Об этом в следующем посте.

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 4:05 pm

Шаг 5 - правка ассемблерных команд в экзешнике

В той дельфийской проге мы хотели заменить в начале процедуры 1 байт всего. И, таким образом, сделать так, чтобы при нажатии на строку со ссылкой http://blackstrip.ru ничего не происходило и internetexplorer бы не запускался.

Воспользуемся прогой QVIEW. Версия проги 2.69.03, сделана была аж 26 июня 1998 года =) недавно ей 10 лет исполнилось, летом.

Очень удобная прога. Вот она в архиве 150 Кбайт всего http://blackstrip.ru/toolz/qview.rar , причем была сделана русскими, поэтому там документация на русском. Вот ее страница в инете http://enlight.ru/qview/main.htm даже работает еще) там кстати еще 2.80 версия есть поновей. Ну и 2.69 пойдет норм.

Лирическое отступление - БЫСТРОЕ открывание файлов. Как?

Итак, все проги, которыми вы хотите чото открывать - обычно умеют открывать файлы из командной строки. Винда умеет быстро кормить их этими файлами. Попробуйте тыкните на любом файле правой кнопкой мыши - откроется меню, в нем будет пункт "Отправить" - и в нем всякий бред типа флешдисков, дискет и т.п. Вот туда же можно напихать ярлыков прог =) лезьте на ваш диск, где виндоус стоит, там папка в корне диска Documents and Setting, в ней папки с названиями ваших сеансов, найдите ваш сеанс (у мя эта папка Blackstrip). В ней внутри есть СКРЫТАЯ папка SendTo. Вот туда сразу пихайте такие ярлыки как "Блокнот", "QVIEW" и даже можно от DeDE ярлык. Теперь любой файл, экзешник или текст - сразу мона открыть "отправив" ее по правой кнопке мыши в нужную вам прогу. Ибо все вставленные в SendTo ярлыки появятся в меню "Отправить" в виде пунктов.

Лирическое отступление закончилось. Теперь о том как править наш InetWatch.exe

Наверняка тот InetWatch который вы скачаете на blackstrip.ru распаковать вам не удастся (ибо он запакован намертво upx-ом). Поэтому вот вам для эксперимента - незапакованный InetWatch http://blackstrip.ru/toolz/iw.exe 600 Кбайт качайте его, ща бум "ломать" процедуру вызывания blackstrip.ru по клику на ссылку в окне.

Итак - смотрим еще раз на эту картину в дельфи

Изображение

Берем бумажку и списываем коды, которые слева от ассемблерных команд.

Они в файле прям по очереди идут. У нас получается прям с начала процедуры:

6A 01 6A 00 6A 00 68 AC 28 47 00 6A 00

Надо найти эту последовательность и поправить первый байт на С3.

Отправляем наш iw.exe в QVIEW (теперь уже по правой кнопке и Отправить, если вы прочитали лирическое отступление и сделали ярлыки быстрого доступа в папке SendTo). Открывается вот такое досовское окно. Мона на весь экран его натянуть через Alt+Enter (но на некоторых виндах это может немного подвешивать комп, особенно при выходе из проги этой). Но и в окне норм видно вроде.

Изображение

Слева это 16-тиричные коды байт, справа собственно символы, обозначающие эти байты.

Жмем F7 - это, как видно из строки внизу экрана Search - то есть поиск. Откроется вот такое окно. Тыкаем в поле HEX и вводим нашу 16-тиричную последовательность байт 6A 01 6A 00 6A 00 68 AC 28 47 00 6A 00. И жмем Enter.

Изображение

Кувья находит нам эту последовательность и выделяет ее.

Изображение

Жмем теперь Shift+F7 - это как видно будет при нажатии Shiftа "NextSr" - то есть искать далее =) Зачем? А за тем чтоб убедиться что такая последовательность только одна. Можно ведь было взять не такую длинную 6A 01 6A 00 6A 00 68 AC 28 47 00 6A 00, а от нее кусок 6A 01 6A 00 например. И тогда увидите что таких коротких последовательностей - в файле море. Поэтому ВСЕГДА берите последовательность подлиннее, и чтоб в нее входили не только дубовые везде встречающиеся push pop ret, а желательно что нибудь уникальное например ссылку на вызов конкретной процедуры или ссылку на переменную (как здесь я взял ссылку на строку ' http://blackstrip.ru ').

Итак, видим при "поиске далее" что таких последовательностей больше нет.

Изображение

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

Изображение

Но как видите если первые три push еще нормальные, то потом какая то короткая команда. А это потому что 16-битный дизассемблер включен - внизу строчка команд, и около F2 видите 16 горит черным, а 32 серое выключенное. Чтоб переключить на 32 битный - жмем F2. Сразу команды станут нормальными, а внизу около F2 загорится 32.

Изображение

Терь точно видим - ага это то что нам надо. Переходим к правке байтов. Жмем 2 раза F4. Первый раз - переход в текстовый режим, второй раз - в 16тиричный просмотр. Чтоб править байты - надо включить командой Alt+F3 режим правки. Вот на скрине удерживаю Alt - и нажал F3 и внизу около F3 написано "Edit ON" - значит режим правки включен. Если нажать второй раз F3, при этом продолжая держать Alt - то будет Edit OFF и т.д.

Кроме того, после того как включилось Edit ON - в выделенном байте замигал курсор. Можно править

Изображение

Вписываем в наш первый байт код С3. Измененный байт станет зеленым, а курсор перескочит на следующий.

Изображение

Теперь жмем Alt+F9 (удерживая Alt можно прочитать что это команда UpdateAll - она сохраняет измененный файл обратно на диск). Всё, байт обратно стал серым, но остался с кодом С3. Файл сохранен. Причем Qview интересно сохраняет файлы - дата изменения в свойствах файла останется прежней, то есть вы можете править файлы старых дат, и они останутся со старыми датами, никто по дате не узнает что файл поправили =)

Изображение

Теперь можете нажать ESC. Qview закроется. И запустить поправленный iw.exe - при нажатии на ссылку http://blackstrip.ru в правом верхнем углу проги ничего не будет происходить. А вот при нажатии на эмблему с рысью - будет (т.к. для нее отдельная процедура вызова страницы, чуть пониже той которую мы правили).

Вот так в 16-ричном редакторе можно править нужные байты. И так можно ломать дельфийские проги.

В некоторых случаях в проге бывает проверка кода - и после нее, например, переход условный "если успешно" то туда, а "если неуспешно" то сюда. Тогда там команды ассемблера jz, jnz, je и прочие. Ну эт кто ассемблер знает - тот поймет на что их надо править =)

например было "прыгай туда если 0" - эту команду можно переправить на jnz в том же Qview в режиме дизассемблера: кнопкой Tab перейти на столбец команд и прям поправить jz на jnz, оно само после нажатия Enter обратно сассемблируется и проставит нужные байты в 16-ричном виде, останется только Alt+F9 нажать чтоб сохранить.

Также можно ненужные условные переходы забивать на корню командой NOP (нет операции) - это команда-пустышка. Любой код можно забить этими байтами - и процессор при выполнении просто проскочит их. Для примера, можно было не С3 тянуть вверх, а всю процедуру:

6A 01 6A 00 6A 00 68 AC 28 47 00 6A 00 A1 0C 4A 47 00 8B 00 8B 40 30 50 E8 9F 55 FB FF C3

превратить в пустышку с командой ret в конце

90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 C3

и был бы эффект такой же =)

но сильно увлекаться убиванием команд не надо. в процедурах например все push которые были - должны уравновеситься pop-ами. И если забить много pushей или наоборот pop-ов - то при многократном вызывании этой процедуры произойдет или переполнение стека (много pusheй, мало popов), или наоборот.

Вот так вот править можно проги.

А теперь о том, как декомпилировать и вообще ломать проги, написанные на Си и Ассемблере.

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 4:08 pm

Шаг 6 - взлом программ, написанных на Си и Ассемблере.

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

Процесс взлома - во многом похож на взлом дельфийских прог. Надо:
1) Увидеть симптомы (например, игра выдает сообщение об отсутствии диска в приводе, или прога выдает сообщение о неправильном регистрационном коде и т.п.)
2) Найти место в программе где она решает ДЕЛАТЬ ЧТОТО или НЕ ДЕЛАТЬ.
3) Переправить это место так, как удобно нам

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

Есть похожие на ДеДе дизассемблеры, но для таких "простых" в плане кода прог.

Есть IDE - Interactive Disassembler - эта штука подробно дизассемблирует и снабжает комментариями лежащие на жестком диске экзешники (и для доса, и для винды, и для других даже систем, даже классы явы может превратить в ява-ассемблерный код, но об яве позже). Может работать как отладчик.

Есть SoftICE - дизассемблер-отладчик, работающий в режиме реального времени. Т.е. он работает напрямую с запущенными прогами. В нем можно поставить на перехват любую функцию Windows API или вообще любую функцию из любой DLL библиотеки, и таким образом отловить вывод сообщения, например, "о ненайденном диске" - и далее пошагово отлаживать прогу, или вернуться назад чтоб еще раз пройти это место, или просто лазить по ассемблерному коду проги. Можно даже исправлять прогу в памяти (разумеется на винчестере она останется старая, но можно сразу посмотреть как бы она работала если какой нить фрагмент был бы поправлен). Можно править флаги, регистры в процессе отладки.

При этом можно получить в этом же режиме реального времени байт-код всех команд и сразу списать их на бумажку, чтоб потом править. Очень удобная программа. Один минус - она очень привередливая, чуть что не так в виндоусе (конфликты с антивирусом, какие нить стремные драйвера) - сразу может спровоцировать "синие экраны смерти" или вообще зарубить винды =) Поэтому с ней лучше баловаться на отдельном чистом виндоусе, используя его как платформу для отладки(взлома) разных прог.

Еще есть W32Dasm - маленький, но очень удобный дизассемблер-отладчик - он вроде даже бесплатный. Поэтому выкладываю вот в архиве http://blackstrip.ru/toolz/w32dasm893.rar всего 500 Кбайт. Он по размеру копеечный, но подобно DeDe расставляет в программе комментарии. Кроме того можно открыть прогу, спокойно расставить где надо брейкпоинты (точки останова) и далее запустить ее в пошаговом или обычном режиме.

Есть Microsoft CodeView - для досовских программ (иногда и такие требуется ломать) как отлаживающая штука. Например в комплекте с Visual Basicом для доса поставлялась она. Тоже удобная, грузишь прогу, пошагово бегаешь в ней, или по точкам останова, все флаги процессора, регистры править мона и т.п. Ее лучше совместно с IDE использовать, когда досовские проги правишь.

Чтоб чото ломать с помощью этих прог - надо хотя бы примерно знать ассемблер и устройство программ в виндах и в досе =)

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 7:08 pm

Шаг 7 - взлом программ, написанных на Java

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

Прога сама - в JAR-файле обычно. Это на самом деле ZIP файл. Его спокойно винраром например можно распаковать - и там уже будут файлы проги.

Есть JAD - Java Decompiler, в виде одного exe-шника, и даже в JavaSDK для мобил кажись лежит. Но он работает через командную строку.

Для него один чел сделал оболочку удобную - получился DJ Java Decompiler. Вот про него тема viewtopic.php?f=27&t=15 Раньше он был бесплатный. Потом более поздние версии оболочки стали платные. Но вот эта http://depositfiles.com/files/3024027 еще бесплатная была, поэтому выложил ее для всех. Она без ограничений каких либо. И функций в ней и так очень много.

В ней можно в опциях выставлять ДЕКОМПИЛЯТОР или ДИЗАССЕМБЛЕР. Дело в том что явовские проги транслируются из ява-кода в ява-ассемблер, и именно в виде ява-ассемблера их уже ест и выполняет ява-виртуальная машина. Поэтому при взломе и исправлении таких прог приходится иметь дело с ява-ассемблером.

Для меня лично удобнее ДЕКОМПИЛИРОВАТЬ в DJ JavaDecompilere, затем смотреть в проге что и как, где чо поправить, можно там же отдизассемблировать разок. А потом ДИЗАССЕМБЛИРОВАТЬ уже в IDE - Interactive Disassembler-е, и там уже списывать коды байтов которые надо править. Потому что в IDE есть режим HEX-View - и по выбранной дизассемблированной ява-команде IDE сразу может сказать где этот байт в коде, показав это в 16-ричном просмотрщике файлов. Очень удобно оттуда сразу списывать последовательности байтов.

В яве для мобил - прога состоит из файлов *.class - классов. Обычно в проге несколько (или несколько десятков) классов. Поэтому обычно чтобы догадаться где место, которое надо исправить - приходится декомпилировать по очереди классы, и смотреть примерно что внутри.

Если хотим править коды клавиш - они в обработчиках событий keyPressed keyReleased keyRepeated. Если хотим править что нить при старте проги - лезем в стартовый класс (его название обычно прописано в jad файле, а также внутри jar в файле MANIFEST.MF), и от него шагаем в другие классы вручную. Если хотим править что нить в отрисовке экрана графической проги - то в процедуре paint.

Сами проги, как и .NETовские проги - обфусцируются (т.е. код портится так, чтоб ява его выполняла хорошо, а вот человеку чтоб было непонятно что где в коде, это защита от чужих глаз, от взлома). Поэтому дело это трудное - взлом явы. Декомпилированный код - только для просмотра, обратно из него прогу чаще всего не соберешь. Поэтому тут шаги такие:
1) просмотр в DJ Java Decompiler декомпилированных классов, выявление примерных мест правки, подозрительных переменных, которые наверное надо править.
2) изучение всех необходимых классов в в DJ Java Decompiler , уже нацеливание и конкретный поиск нужных переменных или команд, которые надо править
3) просмотр в IDE дизассемблированного кода. Выписывание нужных для правки последовательностей
4) правка в Qview файлов *class
5) запаковка исправленных class-ов обратно в jar-файл проги

Аватара пользователя
blackstrip
Админ
Сообщения: 984
Зарегистрирован: Ср янв 02, 2008 1:42 pm
Откуда: Подольск
Контактная информация:

Re: Скальпель, зажим... Инструменты для залезания внутрь

Сообщение blackstrip » Сб сен 12, 2009 7:43 pm

"Взлом" программ на лету в оперативке =) для сильно лоховских программ (редко такие, но бывают)

Некоторые программисты наивно думают, что если сделать кнопку неактивной - то на нее никто уже никогда не нажмет =)

Для таких прог я сделал свою прогу давным-давно (уже даж исходники потерял, вместе с исходниками lookfor-а). Эту прогу я обозвал WinCrack.

Скачать WinCrack: http://blackstrip.ru/toolz/wincrack.exe
Вес 207 КБайт

Изображение

Вот она такая вот как на скрине. Выдает окно, в нем список окон в системе которые. Я там тогда рекурсию чото не смог сделать, поэтому сделал вложенные циклы. Из-за этого прога ловит не все окна, кнопки, флашки, а только до 7 уровня. Т.е. рабочий стол - 1 уровень, потом на нем окно - 2 уровень. На нем рамка с полосами прокрутки - 3 уровень. В ней кнопка - 4 уровень =) Ну 7 уровней почти всегда хватает.

Покажу как она работает на примере калькулятора виндов. Запускаем калькулятор. И из WinCrack "берем" мишень и перетаскиваем на окно калькулятора (эта фича работает с ЛЮБЫМИ компонентами окон, но только если они активные, а если неактивные - то или вручную в списке искать в wincrack, или воспользоваться системой поиска по конкретному столбцу - она справа вверху в wincrack-е).

После перетаскивания и отпускания на заголовке калькулятора - внизу проги появится выбранная строка таблицы с окном этим:

Изображение

Если нажать справа "Редактор меню" - откроется редактор. Здесь можно проставить на нужные пункты меню флажки, или сделать их например активными если они неактивны (и на них не нажать никак).

вот пример с пунктом "О программе"

Изображение

Кроме того в WinCrack собственно есть редактор свойств выбранного компонента. Вот он - например тут я ввел в заголовок окна проги "хренкулятор". И в самом окне заголовок поменялся. (разумеется это все только в оперативке, при перезапуске калькулятора он снова станет обычным).

Изображение

Ну аналогично я повыставлял флажки "Доступный" и "Видимый" дла разных компонентов =) еще калькулятор позволил мне ширину окна поменять. Но вот расположение кнопок он менять не дает. А бывают вообще проги, которым плевать на меню, на кнопки, они чо хошь дают с собой делать. И ладно там если это бесплатные проги. Но когда какой нить пункт "закрыт" тем что он просто серый - то так и просится он чтоб WinCrackом его открыть и чтоб можно было нажать на него =)

вот какой хренкулятор

Изображение

после перезапуска все восстанавливается. действует прога только в оперативной памяти. но этого достаточно чтоб иногда включить какие то скрытые возможности, или посмотреть какие на окне спрятаны кнопки (ведь они могут быть невидимы, но WinCrack всех их увидит и добавить в свой список). Также этой прогой можно смотреть какие окна в системе висят, они тоже могут быть скрыты. а WinCrackом - просто выберите строку с этим окном, потом редактор вызовите и там поставьте флажок Видимый - и увидите что это за окно.

Работают эти фичи с редактированием меню, всякими кнопками и т.п. - только на стандартных компонентах Windows. Могут быть кнопки, которые какие нибудь красивые - на самом деле они картинки, которая прога меняет: при нажатии одну рисует, при отпускании другую. И такие кнопки уже могут не подчиняться Windows-овским правилам. И их разблокировать WinCrack вероятно не сможет. Тоже самое касается меню в программах - только стандартные меню можно этой прогой править в плане активности/неактивности пунктов, установки флажков и т.п.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость