Перейти к контенту

Рекомендуемые сообщения

_Призрак_, я уже общался с Kolmogorом, сейчас перевариваю всю информацию полученную от него. Мысли есть кое-какие, пробую потихоньку... Я ведь в програмировании полный "0". Кстати о "в коде адреса не поменял" - вот этот момент ещё надо у него уточнить.

 

Наковырял интересную статейку :

Динамически подключаемые библиотеки (dynamic link libraries, DLL) используются для уменьшения объема исполняемого файла, за счет выделения некоторых функций в отдельный файл. Более того, функции из DLL могут использовать разные загрузочные модули, что особенно важно для жизнедеятельности Windows (например в KERNEL32.DLL содержаться функции управления памятью процессами и потоками).

Для создания DLL в среде C++ Builder необходимо выбрать File\New\Dll при этом автоматически генерируется проект, компиляция которого и дает искомый результат. Для написания экспортируемых функций используется следующий синтаксис:

__declspec(dllexport) void nameFunc();

При компиляции, кроме прочих, создаются файлы с расширениями *.LIB и *.DLL, содержащие экспортируемые функции.

Подключение DLL в C++ Builder возможно явным и неявным способом. При неявной компоновке в секцию директив необходимо добавить строку вида:

#pragma link ”nameFile.lib”

а, в секцию прототипов добавить описание прототипа функции:

void nameFunc();

При неявной компоновке функция вызывается по имени, необходимы файлы с расширениями *.LIB и *.DLL. Библиотека подключается к процессу в момент загрузки процесса и выгружается вместе с процессом.

Явная компоновка требует использования функций WINAPI LoadLibrary() и GetProcAddress(). В данном случае функция вызывается по номеру, который ей присвоен при создании DLL. C++ Builder упорядочивает экспортируемые функции DLL в алфавитном порядке их имен. Номер функции в DLL можно получить с помощью утилиты tdump с ключом -ee.

Функция LoadLibrary() принимает в качестве параметра имя библиотеки, а возвращает переменную типа HINSTANCE. Функция GetProcAddress() имеет следующий прототип:

void *GetProcAddress (HINSTANCE, const char *);

она принимает переменную типа HINSTANCE и символическую константу, а возвращает указатель на функцию.

В приведенных листингах демонстрируется создание, неявная и явная компоновки DLL.

//Пример создания DLL #include <vcl.h> #pragma hdrstop int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)

{

return 1;

}

//Выше находится заголовок DLL, генерируется автоматически

double dblValue(double);

double halfValue(double);

__declspec(dllexport) int AreturnValue(bool);

__declspec(dllexport) int CreturnValue(bool);

__declspec(dllexport) int BreturnValue(bool);

int CreturnValue(bool i)

{

i= true;

return(2);

} int BreturnValue(bool i)

{

i= true;

return(3);

} int AreturnValue(bool i)

{

i= true;

return(1);

} double dblValue(double value) { return value * value; }; double halfValue(double value) { return value / 2.0; }

 

//Пример неявной компоновки DLL

#ifndef useDllU1H

#define useDllU1H

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

//--------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TButton *Button1;

void __fastcall Button1Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

//--------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//--------------------------------------------------------

int AreturnValue(bool);

int CreturnValue(bool);

int BreturnValue(bool);

#endif

 

//--------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "useDllU1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

#pragma link "createDllP1.lib"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

bool buff;

 

Label1->Caption=AnsiString(AreturnValue(buff));

Label2->Caption=AnsiString(BreturnValue(buff));

Label3->Caption=AnsiString(CreturnValue(buff));

}

//---------------------------------------------------------

 

//Пример явной динамической компоновки DLL

#include <vcl.h>

#pragma hdrstop

#include "dll_cb_u.h"

//--------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

HINSTANCE hinst;

 

int (*returnVa1)(bool);

int (*returnVa2)(bool);

int (*returnVa3)(bool);

//--------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)

{//Создание формы

hinst=LoadLibrary("dll_cb_c.dll");

returnVa1=(int (*)(bool))GetProcAddress(hinst,

MAKEINTRESOURCE(1));

returnVa2=(int (*)(bool))GetProcAddress(hinst,

MAKEINTRESOURCE(2));

returnVa3=(int (*)(bool))GetProcAddress(hinst,

MAKEINTRESOURCE(3));

}

//На форме имеется одна кнопка и три метки

void __fastcall TForm1::Button1Click(TObject *Sender)

{

bool buf_b;

int j;

buf_b=false;

if(returnVa1==NULL)

Label1->Caption=AnsiString("Error");

else

{

j=returnVa1(buf_B);

Label1->Caption=AnsiString(j);

}

Label2->Caption=AnsiString(returnVa2(buf_B));

Label3->Caption=AnsiString(returnVa3(buf_B));

}

MAKEINTRESOURCE — макрос для создания символической константы. Переменная типа HINSTANCE создается глобально. Загрузка библиотеки и присвоение указателей на функции производится в момент создания формы. Количество и тип параметров в описании функций (сигнатура функции) в DLL и указателя на функцию, в вызывающем модуле должны совпадать, совпадение имен не обязательно.

DLL выгружается из памяти при завершении работы вызывающего модуля. Принудительная выгрузка DLL осуществляется функцией FreeLibrary(HINSTANCE).

 

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
sabir   

1. От незнания у всякого зудит в одном месте.

2. Потрудитесь узнать что есть протектор и что случается с dll и exe если по ним прокатились этим самым протектором.

3. Есть такое мудрое изречение - не умножайте сущности без надобности.

P.S. А это товарищу iDreDу - ( Вот тут с тобой я не согласен,при декомпиляции xrGame(CoP) , декомпилировался не полностью,а в конце написал

"#error "There were 60 decompilation failure(s) on 40997 function(s)" вот,можно тогда попробовать декомпильнуть всю папку bin , потому что я так понял + подсказали он ругается на функцию,которая ссылается на исходник другого файла.) - вот это вот, некогда говорилось тому, от чего имени ты пишешь. Остальное читай выше.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

sabir,

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

2.

смотря насколько зуд сильный

 

А теперь внимание вопрос ко всем: Ну допустим у меня получилось прописать в xrGame панель артефактов которая на худ выводиться. Вылета нет. Создаю в конфигах такую панель (хоть с текстурой, хоть без неё) всё равно она не отображается на худе. Вопрос: почему ?

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Kolmogor   

Если ты просто добавил строчки со ссылками на хмл, то собственно непонятно почему панель артефактов должна выводиться :)

Кода вывода в движке то нет, его надо дописать

 

P. S.

Честно говоря вывести панель артефактов на худ гораздо проще скриптом. Определять предметы на поясе давно научились, выводить надписи/картинки на худ вообще легко. Осталось это соединить и все

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
sabir   

Kolmogor рад что ты засветился, и хочу задать тебе такой вопрос (ответ мне известен, интересно скорее будет соискателям): почему начиная с ЧН создание модов на игру затруднилось?

И вопрос ко всем: почему АМК забросила мододелание и переключилась на перенос игры на Унреал?

P.S. Волк, есть ли ответы на все твои вопросы - есть. Решаемы ли твои проблемы - решаемы. Только есть одно но! Кто-то решает все это при помощи знаний, а кто-то при помощи помогите. Я написал про протектор - теперь даю тебе в ухо - и что ты почерпнул о сим чуде? А потом вы пишите информации 0.

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

Изменено пользователем sabir

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Kolmogor   
почему начиная с ЧН создание модов на игру затруднилось?

почему затруднилось? Все ровно точно так же, как и раньше. Многие продолжают делать моды под ТЧ - то есть сейчас надо складывать выходящие моды под ТЧ/ЧН/ЗП и их явно не меньше, чем раньше. Ну или можно сравнить сколько сейчас делается новых модов под ТЧ и сколько под ЧН/ЗП.

 

почему АМК забросила мододелание и переключилась на перенос игры на Унреал?

:rolleyes:

АМК состояла, как это не странно из людей :) Часть из этих людей перестала заниматься сталкером, часть решила уйти на анрил. Ну и АМК продолжает делаться на amk-2.ru(вроде бы так сайт называется)

Изменено пользователем Kolmogor

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

sabir,

Не надоело еще?

У меня все три игры установлены. Ни в одной из них библиотеки движка не защищены никакими защитами и никак не зашифрованы. Основной загрузчик может и (был) защищен, но он никому и не интересен.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Друзья, у вас великолепные знания для редактирования движка!

 

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

 

Так-с, а куда делось сообщение о переводе шестнадцатеричных цифр в шестнадцатеричные (или все же в десятеричные)? :)

Изменено пользователем Министр

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Я имел в виду такое:

Я открыл в Айда рендер_р1. Нашел где упоминается r__detail_density. Это все находилось в такой функции:

fld ds:flt_1004C63C

or dword_10063320, 8

sub esp, 8

fstp [esp+30h+var_2C]

mov ecx, offset unk_100632F0

fld ds:flt_1004C5C0

fstp [esp+30h+var_30]

push offset aSs ; "ЪЩЩ>"

push offset aR__detail_dens ; "r__detail_density"

call ds:??0CCC_Float@@QAE@PBDPAMMM@Z ; CCC_Float::CCC_Float(char const *,float *,float,float)

push offset sub_10047D20 ; void (__cdecl *)()

call _atexit

add esp, 4

 

 

Переведя ее я понял что fld ds:flt_1004C63C и fld ds:flt_1004C5C0 задает верхний и нижний параметр плотности травы. Теперь мне их нужно изменить. Жмем на flt_1004C63C и видим такое:

.rdata:1004C63C flt_1004C63C dd 0.60000002 ; DATA XREF: sub_10001610+112r

 

 

Ага, значит задается здесь. Но нам нужно это поменять. При открытии хекс вида мы видим что выделились цифры 9A 99 19 3F. Открыв интеловский документ я понял что тут нет ассамблеровских команд. Тогда возможно это и есть число которое мне нужно - 0.60000002. Но числа в 16-ичном формате пишутся так: 0x999999ef7. В дллке я вообще х - не видел поэтому и спрашиваю

 

Или я где-то ошибся?

Изменено пользователем _Призрак_

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

_Призрак_,

в hex виде из контекстного меню выбери "Data format" -> "Single Float (32 bit)". Затем можешь редактировать прямо число с плавающей запятой. Но только учти, что IDA никогда не меняет файл. То, что ты таким образом "изменил", можно сохранить в виде файла отличий "*.dif" через "File" -> "Produce File". Затем уже нужно применять этот файл к исходной dll с помощью утилиты "bpatch", которая понимает эти файлы и которую можно найти в сети.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
_Призрак_, какой еще шанс? При отсутствии знаний, не ложатся в гроб, а изучают нужный предмет. Хотя бы основы и самые элементарные вещи, но изучают, и уж только потом переходят к практике. А даже не зная что такое Hex, лезть в такие сложные вещи как движок, по-моему очень глупо. Изменено пользователем Министр

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Будем править кривые ручки изучением. Накопал азы, так сказать (для всех и меня в том числе) :

Часть 1.

АССЕМБЛЕР И ПРОГРАММИРОВАНИЕ ДЛЯ IBM PC

 

Под редакцией Еpшова В.Г.

 

ОГЛАВЛЕНИЕ

==========

 

Предисловие переводчика

 

Предисловие

 

1. Введение в семейство персональных компьютеров IBM PC

 

Введение

Биты и байты

ASCII код

Двоичные числа

Шеснадцатеричное представление

Сегменты

Регистры

Архитектура персональных компьютеров

Основные положения на память

Вопросы для самопроверки

 

2. Выполнение программы

 

Введение

Начало работы

Просмотр памяти

Пример машинных кодов: непосредственные данные

Пример машинных кодов: определенные данные

Машинная адресация

Пример машинных кодов: определение размера памяти

Свойства отладчика

Основные положения на память

Вопросы для самопроверки

 

3. Формат языка ассемблера

 

Введение

Комментарии

Формат кодирования

Псевдокоманды

Указатели памяти и регистров

Инициализация программы

Пример исходной программы

Основные положения на память

Вопросы для самопроверки

 

4. Ассемблирование и выполнение программы

 

Введение

Ввод программы

Подготовка программы для выполнения

Ассемблирование программы

Компановка загрузочного модуля

Выполнение программы

Пример исходной программы

Файл перекрестных ссылок

Основные положения на память

Вопросы для самопроверки

 

5. Определение данных

 

Введение

Псевдокоманды определения данных

Определение байта (DB)

Определение слова (DW)

Определение двойного слова (DD)

Определение "четверного" слова (DQ)

Определение десяти байт (DT)

Непосредственные операнды

Псевдокоманда (директива) EQU

Основные положения на память

Вопросы для самопроверки

 

6. Программные COM-файлы

 

Введение

Различия между EXE- и COM-файлами

Пример COM-файла

COM-стек

Отладка

Основные положения на память

Вопросы для самопроверки

 

7. Логика и организация программы

 

Введение

Команда JMP

Команда LOOP

Флаговый регистр

Команды условного перехода

Процедуры и вызовы (CALL)

Стековый сегмент

Программа: команды длинной пересылки

Логические команды: AND, OR, XOR, TEST, NOT

Программа: изменение нижнего и верхнего регистров

Сдвиги и ротация

Организация программы

Основные положения на память

Вопросы для самопроверки

 

8. Работы с экраном I: Основные возможности

 

Введение

Команда прерывания: INT

Установка курсора

Очистка экрана

Команды экрана и клавиатуры: Базовая DOS

Ввод на экран: стандарт DOS

Программа: Ввод набора ASCII символов

Ввод с клавиатуры: Базовая DOS

Программа: Ввод имен с клавиатуры и вывод на экран

Команды экрана и клавиатуры: Расширенная DOS

Вывод на экран: Расширенная DOS

Ввод с клавиатуры: Расширенная DOS

Использование CR, LF, TAB для вывода на экран

Основные положения на память

Вопросы для самопроверки

 

9. Работа с экраном II: Расширенные возможности

 

Введение

Байт атрибутов

Прерывания BIOS

Программа: мигание, видеореверс, скроллинг

Расширенные ASCII коды

Другие команды ввода/вывода DOS

BIOS INT 16H для ввода с клавиатуры

Дополнительные функциональные клавиши

Основные положения на память

Вопросы для самопроверки

 

10. Работа с экраном III: Цвет и графика

 

Введение

Текстовый (алфавитно-цифровой) режим

Графический режим

Режим средней разрешающей возможности

Программа: Установка цвета и графического режима

Основные положения на память

Вопросы для самопроверки

 

11. Обработка строк

 

Введение

Особенности команд обработки строк

REP: Префикс повторения строки

MOVS: Пересылка строки

LODS: Загрузка строки

STOS: Сохранение строки

CMPS: Сравнение строк

SCAS: Сканирование строки

Сканирование и замена

Альтернативное кодирование

Дублирование шаблона (образца)

Программа: Выравнивание справа при выводе на экран

Основные положения на память

Вопросы для самопроверки

 

12. Арифметика I: Обработка двоичных данных

 

Введение

Сложение и вычитание

Беззнаковые и знаковые данные

Умножение

Сдвиг регистров DX:AX

Деление

Преобразование знака

Процессоры Intel 8087 и 80287

Основные положения на память

Вопросы для самопроверки

 

13. Арифметика II: Обработка ASCII и BCD данных

 

Введение

ASCII формат

Двоично-десятичный формат (BCD)

Преобразование ASCII формата в двоичный формат

Преобразование двоичного формата в ASCII формат

Сдвиг и округление

Программа: Расчет зарплаты

Основные положения на память

Вопросы для самопроверки

 

14. Обработка таблиц

 

Введение

Определение таблиц

Прямой табличный доступ

Поиск в таблице

Команда перекодировки (трансляции) (XLAT)

Программа: Вывод шестнадцатеричных и ASCII кодов

Программа: Сортировка элементов таблицы

Операторы TYPE, LENGTH и SIZE

Основные положения на память

Вопросы для самопроверки

 

15. Дисковая память I: Организация

 

Введение

Объем диска

Каталог

Таблица распределения файлов (FAT)

Основные положения на память

Вопросы для самопроверки

 

16. Дисковая память II: Функции базовой DOS

 

Введение

Управляющий блок файла: FCB

Использование FCB для создания дискового файла

Программа: FCB для создания дискового файла

Последовательное чтение дискового файла

Программа: FCB для чтения дискового файла

Прямой доступ

Программа: Прямое чтение дискового файла

Прямой блочный доступа

Программа: Прямое чтение блока

Абсолютный дисковый ввод/вывод

Другие возможности

Программа: Выборочное удаление файлов

Основные положения на память

Вопросы для самопроверки

 

17. Дисковая память III: Функции расширенной DOS

 

Введение

Строка ASCIIZ

Номер файла и коды возврата по ошибкам

Создание дискового файла

Программа: Использование номера для чтения файла

ASCII файлы

Другие функции расширенной DOS

Основные положения на память

Вопросы для самопроверки

 

18. Дисковая память IV: Команды ввода/вывода BIOS

 

Введение

Дисковые команды BIOS

Байт состояния

Программа: Использование BIOS для чтения секторов

Основные положения на память

Вопросы для самопроверки

 

19. Печать

 

Введение

Управляющие символы для печати

Использование расширенной DOS для печати

Программа: Постраничная печать с заголовками

Печать ASCII файлов и управление табуляций

Печать с использованием базовой DOS

Специальные команды принтера

Печать с использованием BIOS INT 17H

Основные положения на память

Вопросы для самопроверки

 

20. Макрокоманды

 

Введение

Простое макроопределение

Использование параметров в макрокомандах

Комментарии

Использование макро внутри макроопределения

Директива LOCAL

Подключение библиотеки макроопределений

Конкатенация (&)

Повторение: REPT, IRP и IRPC

Условные директивы

Директива EXITM

Макрокоманды, использующие IF и IFNDEF условия

Макрокоманды, использующие IFIDN условие

Основные положения на память

Вопросы для самопроверки

 

21. Связь между подпрограммами

 

Введение

Межсегментные вызовы

Атрибуты EXTRN и PUBLIC

Программа: Использование EXTRN и PUBLIC для меток

Программа: Использование PUBLIC в кодовом сегменте

Программа: Общие данные в подпрограммах

Передача параметров

Связь Бейсик-интерпретатор - ассемблер

Связь Паскаль - ассемблер

Связь C - ассемблер

Основные положения на память

Вопросы для самопроверки

 

22. Загрузчик программ

 

Введение

COMМAND.COM

Префикс программного сегмента

Выполнение COM-программы

Выполнение EXE-программы

Пример EXE-программы

Функция загрузки или выполнения программ

 

23. BIOS и DOS прерывания

 

Введение

Обслуживание прерываний

BIOS прерывания

DOS прерывания

Функции DOS INT 21H

Резидентные программы

Порты

Генерация звука

 

24. Справочник по директивам ассемблера

 

Введение

Индексная память

Команды ассемблера

Директивы ассемблера

 

25. Справочник по командам ассемблера

 

Введение

Обозначение регистров

Байт способа адресации

Двухбайтовые команды

Трехбайтовые команды

Четырехбайтовые команды

Команды в алфавитном порядке

 

Приложения

 

1. ASCII коды

2. Шестнадцатерично-десятичные преобразования

3. Зарезервированные слова

4. Режимы ассемблирования и компановки

 

Ответы на некоторые вопросы

 

 

Часть 2.

ЯЗЫК МАКРОАССЕМБЛЕРА IBM PC

(Справочное пособие)

 

Составитель: В.Н.Пильщиков (МГУ, ВМК)

ГЛАВА 1. ОСОБЕННОСТИ ПК. ВВЕДЕНИЕ В MASM.

1.1. ОПЕРАТИВНАЯ ПАМЯТЬ. РЕГИСТРЫ.

1.2. ПРЕДСТАВЛЕНИЕ ДАННЫХ. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

1.3. ПРЕДСТАВЛЕНИЕ КОМАНД. МОДИФИКАЦИЯ АДРЕСОВ.

1.4. СЕГМЕНТИРОВНИЕ

1.5. ПЕРЕХОДЫ

1.6. СТРОКОВЫЕ ОПЕРАЦИИ

1.7. СТЕК. ПОДПРОГРАММЫ.

 

 

Скачать полные тексты можно здесь:

скачать с ifolder.ru

скачать с narod.ru

 

Если автор темы посчитает нужным - добавьте в шапку все три статьи.

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
sabir   

Хорошо Колмогор поставлю вопрос иначе: зачем начиная с ЧН многие примочки были вшиты в файлы движка?

Для malandrinus - епть, у меня в системе 50 игр стоит и что? Ты хоть представляешь о чем речь идет?

Тогда грамотей скажи ка мне что сие значит: "#error "There were 60 decompilation failure(s) on 40997 function(s)". А особенно поделись секретом, как вот так безошибочно определять незащищенность файлов, особенно exe и dll. И как мне быть подскажи, кому верить, тебе, который уверяет что ничего не защищено или разработчикам которые официально заявили о протекторе???

Строгое предупреждение от администратора n6260
А ну ка, начинаем писать вежливо, при обращении к другим пользователям.

И не надо всяких "епть".

Изменено пользователем n6260

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Kolmogor   

Потому что так удобней разработчикам :) Или если оставить в конфиге, то будут какие-то глюки

Взять тот же пояс в ЧН - казалось бы зашили ограничение в 5 артов в движок - какие плохие дяди. Однако в ЧН появилось фишка, что количество доступных слотов зависит от надетого костюма - меня эта фишка радует гораздо больше, чем увеличенный пояс.

 

Тогда грамотей скажи ка мне что сие значит: "#error "There were 60 decompilation failure(s) on 40997 function(s)"

:) А что тут гадать: при декомпиляции 40997 функций было 60 ошибок. Ты бы хотя бы написал, какая программа выдала эту ошибку. И как она связана с защитой сталкера.

Что ты привязался к протектору-то. На русских сталкерах висел старфорс и разработчики говорили именно о нем. Все сталкеры были успешно крякнуты и на крякнутых никакого протектора нет. Более того xrgame.dll, которой хватает в большинстве случаев, в ТЧ и ЗП защиты нет. В ЧН был, но смотри выше. Так что malandrinus прав.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
sabir   

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

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

Какие проги выдают подобные ошибки? IDA, Periscope, Bubble Chamber, Sourcer - каждый выдал ошибки, потому что в dll-ках натыкали breakpointы, и мало того запакованы отдельные процедуры. Да что я тебе объясняю... Бывай.

P.S. Кстати, Колмогор, давно наблюдаю за твоей активностью - туманный ты человече и с загадками.

Изменено пользователем sabir

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
nuklia   

Уважаемые знатоки, а не могли бы Вы в промежутках между дебатами выложить или хотя-бы порекомендовать литературу

по IDA , ведь наверняка у вас есть свои подборки того, что легче и понятней переваривается. Может еще на примере того-же

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

страждущих и тема будет жить.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
sabir   

Не вопрос:

Интерактивный дизассемблер IDA

 

Лет пять назад мне понадобилось подправить синтаксический анализатор компилятора Turbo C 2.0 Prof, а для этого нужно было найти в немаленьком (что-то около 180 кб) по тем временам EXE-файле нужный фрагмент. Трассировать отладчиком не было никакого терпения, популярный в то время дизассемблер Sourcer его не брал по причине этой самой величины, а DisDoc, который брал, выдавал настолько "непричесанный" результат, что невольно вспоминалось из Жванецкого - "...лекарство, которое не берет микроб, а наоборот - с ним сотрудничает". В тот момент мне на глаза и попалась IDA - интерактивный дизассемблер москвича Ильфака Гильфанова с его заманчивым "объем исходного файла - не ограничен". Однако, успев уже привыкнуть к максимально вылизанным выходным текстам Sourcer'а, я после запуска IDA обнаружил на экране полное отсутствие интеллекта - как я тогда его понимал - выразившееся в нежелании дизассемблера сразу же выдавать готовый результат, как это делал Sourcer. И, поленившись вникнуть в непривычную идеологию нового инструмента (а она оказалась поистине революционной) я забросил его на целых два года - и, как понял впоследствии, потерял из-за этого кучу времени и сил. Для сравнения скажу, что вскоре после того, как я все же разобрался с IDA и в полном смысле слова полюбил ее (а ее мощность тогда была чуть ли не вполовину ниже теперешней), я снова взялся за компилятор - ради интереса, ибо в прошлый раз нашел-таки нужное место за пару дней плотной работы). IDA сделала первичное дизассемблирование минут за пятнадцать (на DX2-66), еще пара часов ушла на основное причесывание программы, после чего требуемые фрагменты отыскивались элементарно.

 

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

 

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

 

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

 

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

 

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

 

IDA не является автоматическим дизассемблером - самостоятельно выполняются только очевидные операции, вроде расшифровки программного кода, определения начал/концов функций, именования входных точек и т.п. Все остальные операции должны быть явно запрошены пользователем. Это не означает, что IDA недостаточно собственного интеллекта - она всего лишь не пытается опережать вас в анализе программы. От вас требуется лишь сформулировать направление дальнейшей работы, а всю рутинную и кропотливую работу IDA берет на себя. Например, стоит указать, что неопределенный массив данных является таблицей переходов, как IDA автоматически преобразует эти данные в таблицу адресов и запустит дизассемблирование по этим адресам. Можно сказать, что IDA работает в тесном сотрудничестве с вами - в этом и заключается ее интерактивность.

 

Фактически IDA состоит из двух почти полностью независимых подсистем - пользовательского интерфейса и фонового анализатора. Анализатор работает, как отдельный фоновый процесс - получая команды от пользователя, исследуя программу и посылая результаты обратно, где интерфейсная часть отображает их в удобном виде. Пока вы не спеша пролистываете на экране уже дизассемблированный текст - анализатор уходит дальше, и результаты его работы можно наблюдать прямо по ходу дела, когда неопределенная переменная вдруг обретает имя, шестнадцатеричный дамп превращается в текст или таблицу данных. И наоборот - команды преобразования адресов или типов данных тут же передаются анализатору, который соответствующим образом отражает их во всех связанных точках программы.

 

При загрузке программ в форматах Windows и OS/2 - NE, PE, LX - IDA автоматически определяет тип файла (EXE/DLL/VXD и т.п.), находит все DLL, на которые ссылается файл, и загружает для них таблицы входов в виде символических имен.

 

Профессиональная версия - IDA Pro - обладает и вовсе уникальными возможностями: при помощи технологии FLIRT (Fast Library Identification and Recognition Technology) она способна автоматически определять компилятор и служебные библиотеки, использованные при построении программы, и посредством специального набора сигнатур находить в программе стандартные функции из этих библиотек, тут же присваивая им соответствующие имена и атрибуты. Если версия RTL-библиотеки опознана по сигнатуре - в программе уже в самом начале анализа выделяются характерные служебные функции - printf, strcpy, malloc и им подобные. Разбираться в программе с уже найденными основными функциями RTL на порядок проще, чем в совершенно неисследованной.

 

Кроме этого, в последних версиях IDA Pro реализована поддержка локальных переменных, формируемых в стековом кадре - в каждой функции анализируются обращения к стековому кадру через BP/EBP и создается список переменных в кадре. Эти переменные аналогичны обычным статическим переменным, и с ними могут работать все операции IDA - смена имени, типа данных, создание ссылки и т.п. IDA также поддерживает структуры - заранее описанный формат структуры можно привязать к переменной, и тогда IDA будет трактовать все адреса в заданном диапазоне, как поля указанной структуры - и именованные константы (enums), имена которых могут отображаться вместо числовых констант с заданными значениями. Для программ на C++ выполняется восстановление имен перегруженных функций (demangling).

 

IDA имеет великолепную навигационную систему. Многооконный интерфейс позволяет одновременно наблюдать несколько фрагментов программы - при этом результаты изменений, сделанные в одном из окон, тут же отображаются во всех остальных. Простым нажатием Enter или щелчком мыши на операнде команды или ссылке можно перейти к месту определения операнда, метки или ссылающемуся объекту, оттуда - на другую ссылку, а потом, как угодно далеко углубившись в структуру программы, последовательным нажатием Esc вернуться к исходной точке. Можно перейти к заданной метке/переменной или сегменту, месту модификации сегментного регистра, функции, перекрестной ссылке или закладке - заранее помеченной позиции; можно искать заданное значение операнда, очередной неисследованный или, наоборот, исследованный фрагмент, фрагмент кода или данных, двоичный образец в файле или текстовую строку уже в дизассемблированном представлении (например, поиск "DX, AX" найдет все команды с этими операндами - разумеется, если все кодовые участки в программе полностью проанализированы.

 

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

 

Для того, чтобы удобно и эффективно приводить в нужный вид дизассемблируемый текст, IDA предоставляет широкий выбор команд редактирования. Наиболее употребительные команды - преобразование фрагмента в код или данные, задание типов переменных и операндов, ввод комментариев и закладок - выполняются нажатием единственной клавиши, для остальных действий предусмотрена удобная система вложенных меню. Пакеты команд можно объединять в макросы, выполняемые затем нажатием единственной клавиши.

 

IDA позволяет чрезвычайно гибко настраивать формат отображения текста на экране, разрешая или запрещая вывод отдельных полей текста - адресов, двоичного дампа, комментариев, списков перекрестных ссылок, разделительных строк, повышающих читаемость текста. Автоматический генератор имен, присваивающий имена адресам, для которых они не были заданы явно, позволяет выбирать более десятка различных форм, включая последовательную нумерацию с возможностью перенумеровки в любой момент. Для ASCII-строк автоматически создаваемые имена могут формироваться из начальных слов самой строки, когда по имени легко догадаться о содержащемся в ней тексте. Поддерживаются также строки в формате UNICODE. Цветовое выделение полей текста улучшает его читаемость и облегчает поиск нужных имен или операндов.

 

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

 

Встроенный C-подобный язык программирования IDC (у меня язык не поворачивается назвать его командным языком, ибо по мощности он почти не уступает ранним версиям полного C), содержащий более двухсот разнообразных функций, позволяет описать любой по сложности алгоритм анализа и обработки программы. В комплекте имеются также готовые IDC-программы - например, для обработки образа AWARD BIOS 4.51 или расшифровки структуры Windows VxD.

 

И наконец - после завершения исследования и "причесывания" программы ее можно вывести во внешний файл - в виде текста, ассемблерного листинга, карты компоновщика (MAP), списка различий исходного и исправленного файла (DIF) и даже исправленной версии исходного файла (EXE). В отличие от пакетных дизассемблеров, эти возможности реально нужны только для печати или перекомпиляции текста, ибо изучать структуру и работу программы несравненно удобнее в самой IDA, нежели по сгенерированному ею тексту. В ранних версиях IDA функции вывода блокировались до ввода регистрационного ключа, и многие обладатели незарегистрированных версий сильно комплексовали по этому поводу; мне же за три года обладания честно оплаченным ключом всего дважды потребовалось вывести фрагменты текста в файл, и то - для их отправки в телеконференции. Для всех программ, исследованием которых мне приходится заниматься, я храню только базы данных IDA - как наиболее информативное представление их структуры. Единственное, на мой взгляд, полезное применение функций вывода при чистом исследовании программ, не сопряженном с их модификацией - формирование карты компоновщика, из которой утилита TDMAP может сделать файл с отладочной информацией для Turbo Debugger, после чего по программе можно лазить и в TD, пользуясь символическими именами вместо адресов.

 

IDA работает под DOS, Windows 95/NT и OS/2. Для нее существует набор разработчика (SDK), позволяющий создавать дополнительные модули - дизассемблирования файлов для новых процессоров, загрузки модулей особой структуры, внесения дополнительного интеллекта и т.п. Существуют также утилиты для построения файлов сигнатур (FLAIR - Fast Library Acquisition for Identification and Recognition) и генерации списков входных точек для файлов форматов NE/LE/LX/PE.

 

В заключение можно сказать, что IDA, помимо исполняемых файлов для процессоров x86 под DOS, Windows и OS/2, может дизассемблировать код для процессоров Intel 8080, 860, 8051, Motorola 680x0, 6502, 6301, 6810, DEC PDP-11, а также модули NLM, библиотечные, архивные и объектные файлы, модули JAVA. О существовании в мире другого программного продукта, хотя бы близкого по возможностям к IDA, мне неизвестно.

 

Информация об IDA доступна на www.idapro.com и www.datarescue.com (почтовый адрес - ida@datarescue.com). Там же можно взять демонстрационную версию IDA Pro, в которой сохранена вся функциональность полной, за исключением запрета на загрузку существующих баз данных, обработки файлов более 64 кб и записи результатов в файл. Упрощенная бесплатная версия доступна на www.simtel.com/pub/simtelnet/msdos/disasm.

 

Евгений Музыченко, eugene@muzychenko.net

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

sabir, мдя, поисковик великая вещь.

но описания на мой взгляд маловато будет.

 

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

[spoiler=Описание:]

Основные пользователи нашего дизассемблера:

 

* антивирусные компании

* специалисты по информационной безопасности

* эксперты по программному обеспечению

* а также разработчики программных защит

 

Основная задача - превращение бинарного кода в читаемый текст программы - дополнена многими уникальными возможностями:

 

* распознавание стандартных библиотечных функций (технология FLIRT)

* интерактивность работы

* развитая система навигации

* система типов и параметров функций

* встроенный язык программирования IDC

* открытая и модульная архитектура

* возможность работы практически со всеми популярными процессорами (список)

* возможность работы практически со всеми популярными форматами файлов (список)

* работа со структурами данных высокого уровня: массивами, структурами, перечисляемыми типами

* встроенный отладчик для Win32

 

Типичные примеры задач, решаемые с помощью дизассемблера:

 

* анализ вирусов, троянов и других вредоносных программ

* поиск ошибок в программах

* изучение полученного кода

* валидация программ

* оптимизация программ

* разработка защит и поиск дыр в защите

 

В настоящей версии присутствует отладчик для Win32, Win64, WinCE(ARM) и Linux программ, что делает анализ таких программ еще проще и быстрей.

 

IDA Pro работает под MS Windows, Linux и Mac OS X.

 

 

русский сайт интерактивного дизассемблерра IDA Pro

 

Декомпилятор HexRays - Руководство пользователя

 

Русский форум IDA Pro

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
vecha   

sabir,

что я не разбираюсь в том, что такое старфорс, а что такое защита dll.
Ща глянул Зов Припяти. Ни на одной длл-ке нет протектора, несколько штук пожаты UPX.

Да и разрабам нет смысла вешать протектор на двиг.(ну если только они не хотят усложнить написание читов)

что в dll-ках натыкали breakpointы
Вы хоть сами поняли что сказали? Изменено пользователем vecha

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут вот появилась небольшая проблемка - хочу посоветоваться.

Я смог отредактировать дллку. Делал так:

1. Открыл дллку через Айда

2. Нашел где встречается r__detail_density

3. Нашел строку fld ds:flt_1004F8B0 которая задает верхний параметр плотности травы

4. Шелкнув на нее 2 раза я переместился на строку .rdata:1004F8B0 flt_1004F8B0 dd 0.2 ; DATA XREF: sub_10001A40+12Br

5. Перешел в ХЕКС Виев

6. Нажал дата формат - Single Float

7. Нашел в той стоке значение 0.2 и поменял его на 0.22

8. Сохранил изменение в виде dif файла

9. При помощи программы bpatch соединил дллку и .диф

10. Открыл в айда измененную дллку - изменения произошли

11. Запустил и......... Трава пропала! Вообще! Хотя если ввести в консоли r__detail_density консоль скажет что данный параметр равен 0.22

Во всей дллке я поменял только вот какие строки:

xrRender_R1.dll

0004F8B0: CD AE

0004F8B1: CC 47

0004F8B2: 4C 61

это из диф файла. читается так: оффсет, исходное число, изменение

Совершенно не понимаю почему могла пропасть трава! Ни вылета, ничего. Айда говорит что изменения приняты

Изменено пользователем _Призрак_

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти

  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

×