Форум программистов, компьютерный форум CyberForum.ru

Reverse класса - C++

Восстановить пароль Регистрация
 
Brust
35 / 29 / 8
Регистрация: 16.07.2012
Сообщений: 68
03.01.2014, 08:32     Reverse класса #1
С новым годом друзья!

Реверсю один exe, больше половины востановил (благо написана она на Qt и сюдя по всему скомпилированна в том же компиляторе что и у меня, т.к декорирование импорта из dll_ок даже совпадает )
Но есть кусок проблемного для меня дизассемблерного кода в самом начале который я временно отбросил, но дальше без него уже никак:


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
.text:0040C660 ; int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
.text:0040C660 _WinMain@16 proc near                   ; CODE XREF: ___tmainCRTStartup+13Bp
.text:0040C660
.text:0040C660 var_1D4C= dword ptr -1D4Ch
.text:0040C660 var_1D48= dword ptr -1D48h
.text:0040C660 var_1D44= byte ptr -1D44h
.text:0040C660 var_1D40= byte ptr -1D40h
.text:0040C660 var_1D3C= byte ptr -1D3Ch
.text:0040C660 var_1D38= dword ptr -1D38h
.text:0040C660 var_1D34= byte ptr -1D34h
.text:0040C660 var_1D2C= dword ptr -1D2Ch
.text:0040C660 var_1D28= byte ptr -1D28h
.text:0040C660 var_1D20= dword ptr -1D20h
.text:0040C660 var_1D1C= dword ptr -1D1Ch
.text:0040C660 var_1D18= dword ptr -1D18h
.text:0040C660 var_1D14= dword ptr -1D14h
.text:0040C660 var_1D10= byte ptr -1D10h
.text:0040C660 var_4= dword ptr -4
.text:0040C660 arg_0= dword ptr  8
.text:0040C660 arg_4= dword ptr  0Ch
.text:0040C660 arg_8= dword ptr  10h
.text:0040C660 arg_C= dword ptr  14h
.text:0040C660
.text:0040C660 push    ebp
.text:0040C661 mov     ebp, esp
.text:0040C663 and     esp, 0FFFFFFF8h
.text:0040C666 mov     eax, 1D4Ch
.text:0040C66B call    __alloca_probe
.text:0040C670 mov     eax, ___security_cookie
.text:0040C675 xor     eax, esp
.text:0040C677 mov     [esp+1D4Ch+var_4], eax
.text:0040C67E mov     ecx, [ebp+arg_4]
.text:0040C681 mov     eax, [ebp+arg_0]
.text:0040C684 push    ebx
.text:0040C685 push    esi
.text:0040C686 mov     esi, [ebp+arg_8]
.text:0040C689 mov     [esp+1D54h+var_1D1C], ecx
.text:0040C68D mov     ecx, ds:?excp@@3VEXCEPTION_HANDLER@@A ; EXCEPTION_HANDLER excp ; core.dll 
.text:0040C693 push    edi
.text:0040C694 mov     [esp+1D58h+var_1D20], eax
.text:0040C698 mov     [esp+1D58h+var_1D38], esi
.text:0040C69C call    ds:?setdefaulttrap@EXCEPTION_HANDLER@@QAEXXZ ; EXCEPTION_HANDLER::setdefaulttrap(void)
.text:0040C6A2 call    sub_424C40
.text:0040C6A7 push    8                               ; unsigned int
.text:0040C6A9 mov     [esp+1D5Ch+var_1D18], offset aName; "Pro"
.text:0040C6B1 mov     [esp+1D5Ch+var_1D14], esi
.text:0040C6B5 mov     [esp+1D5Ch+var_1D2C], 2
.text:0040C6BD call    ??2@YAPAXI@Z                    ; operator new(uint)
.text:0040C6C2 mov     esi, eax
.text:0040C6C4 add     esp, 4
.text:0040C6C7 test    esi, esi
.text:0040C6C9 jz      short loc_40C6E8
.text:0040C6CB push    1040804h
.text:0040C6D0 lea     edx, [esp+1D5Ch+var_1D18]
.text:0040C6D4 push    edx
.text:0040C6D5 lea     eax, [esp+1D60h+var_1D2C]
.text:0040C6D9 push    eax
.text:0040C6DA mov     ecx, esi
.text:0040C6DC call    ds:??0QApplication@@QAE@AAHPAPADH@Z ; QApplication::QApplication(int &,char * *,int)

Конкретно для меня не ясна строка инициализации класса EXCEPTION_HANDLER::
Assembler
1
mov     ecx, ds:?excp@@3VEXCEPTION_HANDLER@@A ; EXCEPTION_HANDLER excp
.
Как может выглядеть его объявление в экспорте dll и инициализация на C++, чтобы заставить компилятор сгенерировать тоже самое?

Добавлено через 9 часов 46 минут
Мда, надо больше спать..
Оказалось все проще чем я думал
С утричка только понял что в дизасме так выглядит импорт экземляра класса из dll,
объявленный как:

C++
1
2
3
4
5
class DLL_EXPORT EXCEPTION_HANDLER {
public:
     void setdefaulttrap(void);
 };
EXCEPTION_HANDLER excp;
А при импорте инициализируется просто вызовом метода
C++
1
excp.setdefaulttrap();
P.S. Декомпилятор в IDA - ЗЛО! хотя я и раньше это знал, но в очередной раз убедился
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2014, 08:32     Reverse класса
Посмотрите здесь:

функция Reverse которая паспологает строку в обратном положении-никакого результата C++
C++ Список(List) как отсортировать по убыванию используя функции reverse(); sort(); ао убыванию
C++ Функция - Reverse(s).
C++ reverse string'a
C++ функция reverse(). ошибка несоответствия типов
C++ Reverse
C++ Reverse для части массива
Шаблон класса, параметром которого должны являться наследники определённого класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 14:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru