Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как определить точку входа в программу если дизасемблируешь неизвестный *.exe

3.0K
29 июня 2006 года
Oxaid
63 / / 02.04.2006
Все дебагеры при дизасемблировании выводят кучу всего не относящегося к программе(ну относящегося, ну короче не то что надо). Это что библиотечные функции? И как на начало программы попасть.
Написал на C++ программку в три строчки. Долго щелкал F7 в IDA, но так и не нашел, где же мой c = a + b. Посмотрел в студии там хоть код с ассемблерным сопоставляется.
398
30 июня 2006 года
Alexandoros
630 / / 21.10.2005
Ты не забывай, что твоя с++ прога с собой еще и рантайм, для тебя скрытый тянет. Хочеш голую прогу - отрубай рантайм.
7.8K
30 июня 2006 года
DrCoder
106 / / 27.01.2006
[QUOTE=Oxaid]...Долго щелкал F7 в IDA, но так и не нашел ...[/QUOTE]
а кто сказал, что анализ дизассемблерного кода это легкое дело ? -я вот однажды анализировал код генерации серийника в WinZip, так там сам алгоритм был размазан на столько, что до сих пор не догоняю, как мне терпения хватило на это дело, что уже говорить о полном анализе всей проги
3.0K
30 июня 2006 года
Oxaid
63 / / 02.04.2006
И никто не заметил, что я описался. IDA дизассемблер, но не дебагер.F7 там не потискаешь. Это я спутал с Turbo debuger. Полез туда от безысходности.
А вы бы лучше не писали как это гиморно, а написали бы возможные пути. Ну, или где почитать про это.
279
30 июня 2006 года
bave
456 / / 07.03.2004
Так ты пользуйся то для этой цели как раз дебагером, а НЕ дизасемблером.
Дебагер то как раз при отладке сам точку входа найдёт и тебе покажет.
1.8K
30 июня 2006 года
k3Eahn
365 / / 19.12.2005
[quote=Oxaid]И никто не заметил, что я описался. IDA дизассемблер, но не дебагер.F7 там не потискаешь. Это я спутал с Turbo debuger. Полез туда от безысходности.
А вы бы лучше не писали как это гиморно, а написали бы возможные пути. Ну, или где почитать про это.[/quote]
В IDA есть встроенный отладчик.
[quote=bave]Так ты пользуйся то для этой цели как раз дебагером, а НЕ дизасемблером.
Дебагер то как раз при отладке сам точку входа найдёт и тебе покажет.[/quote]
По ходу аффтар хочет, чтобы дебаггир делал останов на main/WinMain.
3.0K
30 июня 2006 года
Oxaid
63 / / 02.04.2006
Ну, насчет отладчика в IDA я не знал (опыта мало), но дело не в этом. Просто я хочу научиться разбираться в чужом коде, если он, например, написан криво. Одно дело, когда сам напишешь на асме прогу. Тут все понятно. Сразу видно, где начало, где конец. А если прога левая. Где вообще можно прочитать про это? Ну а в общем случае, наверное, да - нужно определить место нахождения main/WinMain.
261
01 июля 2006 года
ahilles
1.5K / / 03.11.2005
для определения точки входа в программу есть lordPE открываешь с помошью него программу и смотришь RVA точки входа.
а насчёт дизассемблирования : ты бы ещё на дельфи программу написал бы и просмотрел бы её, там вообще никаких концов не найдёшь (без DeDe вообще ничего не сделаешь).
260
01 июля 2006 года
Ramon
1.1K / / 16.08.2003
Сие соурс, который компилился
 
Код:
int main()
{
    int a = 1;
    int b = 2;
    int c = a + b;

    return c;
}


А сие получаем Идой
Точка входа видна сразу, не так ли?
Код:
.text:00401060                 public start
.text:00401060 start           proc near
.text:00401060
.text:00401060 var_20          = dword ptr -20h
.text:00401060 var_1C          = dword ptr -1Ch
.text:00401060 var_18          = dword ptr -18h
.text:00401060 ExceptionInfo   = dword ptr -14h
.text:00401060 var_4           = dword ptr -4
.text:00401060
.text:00401060                 push    ebp
.text:00401061                 mov     ebp, esp
.text:00401063                 push    0FFFFFFFFh
.text:00401065                 push    offset unk_422020
.text:0040106A                 push    offset sub_4026C0
.text:0040106F                 mov     eax, large fs:0
.text:00401075                 push    eax
.text:00401076                 mov     large fs:0, esp
.text:0040107D                 add     esp, 0FFFFFFF0h
.text:00401080                 push    ebx
.text:00401081                 push    esi
.text:00401082                 push    edi
.text:00401083                 mov     [ebp+var_18], esp
.text:00401086                 call    ds:GetVersion
.text:0040108C                 mov     dword_427C7C, eax
.text:00401091                 mov     eax, dword_427C7C
.text:00401096                 shr     eax, 8
.text:00401099                 and     eax, 0FFh
.text:0040109E                 mov     dword_427C88, eax
.text:004010A3                 mov     ecx, dword_427C7C
.text:004010A9                 and     ecx, 0FFh
.text:004010AF                 mov     dword_427C84, ecx
.text:004010B5                 mov     edx, dword_427C84
.text:004010BB                 shl     edx, 8
.text:004010BE                 add     edx, dword_427C88
.text:004010C4                 mov     dword_427C80, edx
.text:004010CA                 mov     eax, dword_427C7C
.text:004010CF                 shr     eax, 10h
.text:004010D2                 and     eax, 0FFFFh
.text:004010D7                 mov     dword_427C7C, eax
.text:004010DC                 push    0
.text:004010DE                 call    sub_402450
.text:004010E3                 add     esp, 4
.text:004010E6                 test    eax, eax
.text:004010E8                 jnz     short loc_4010F4
.text:004010EA                 push    1Ch
.text:004010EC                 call    sub_4011C0
.text:004010F1                 add     esp, 4
.text:004010F4
.text:004010F4 loc_4010F4:                             ; CODE XREF: start+88j
.text:004010F4                 mov     [ebp+var_4], 0
.text:004010FB                 call    sub_401E50
.text:00401100                 call    ds:GetCommandLineA
.text:00401106                 mov     dword_429620, eax
.text:0040110B                 call    sub_401C30
.text:00401110                 mov     dword_427C64, eax
.text:00401115                 call    sub_401720
.text:0040111A                 call    sub_4015D0
.text:0040111F                 call    sub_4011F0
.text:00401124                 mov     ecx, dword_427C98
.text:0040112A                 mov     dword_427C9C, ecx
.text:00401130                 mov     edx, dword_427C98
.text:00401136                 push    edx
.text:00401137                 mov     eax, dword_427C90
.text:0040113C                 push    eax
.text:0040113D                 mov     ecx, dword_427C8C
.text:00401143                 push    ecx
[COLOR="Red"].text:00401144                 call    sub_401005[/COLOR]
.text:00401149                 add     esp, 0Ch
.text:0040114C                 mov     [ebp+var_1C], eax
.text:0040114F                 mov     edx, [ebp+var_1C]
.text:00401152                 push    edx
.text:00401153                 call    sub_401230
.text:00401158
.text:00401158 loc_401158:                             ; DATA XREF: .rdata:00422024o
.text:00401158                 mov     eax, [ebp+ExceptionInfo]
.text:0040115B                 mov     ecx, [eax]
.text:0040115D                 mov     edx, [ecx]
.text:0040115F                 mov     [ebp+var_20], edx
.text:00401162                 mov     eax, [ebp+ExceptionInfo]
.text:00401165                 push    eax             ; ExceptionInfo
.text:00401166                 mov     ecx, [ebp+var_20]
.text:00401169                 push    ecx             ; int
.text:0040116A                 call    sub_4013C0
.text:0040116F                 add     esp, 8
.text:00401172                 retn
.text:00401172 start           endp ; sp = -34h


Смотрим на то, что вызывается из этой функции, все что выше sub_401005, явно носит служебный характер и даже не напоминает то, что мы написали. А вот sub_401005 заслуживает внимания, ибо ей пердается список аргументов коммандной строки. Значит это наш клиент(функция "main"), далее после вызова sub_401005 идет обработка исключений.

Смотрим саму sub_401005:
Код:
sub_401005      proc near               ; CODE XREF: start+E4p
.text:00401005
.text:00401005 var_4C          = dword ptr -4Ch
.text:00401005 var_C           = dword ptr -0Ch
.text:00401005 var_8           = dword ptr -8
.text:00401005 var_4           = dword ptr -4
.text:00401005
.text:00401005                 jmp     loc_401010
.text:00401005 ; ---------------------------------------------------------------------------
.text:0040100A                 align 10h
.text:00401010
.text:00401010 loc_401010:                             ; CODE XREF: sub_401005j
.text:00401010                 push    ebp
.text:00401011                 mov     ebp, esp
.text:00401013                 sub     esp, 4Ch
.text:00401016                 push    ebx
.text:00401017                 push    esi
.text:00401018                 push    edi
.text:00401019                 lea     edi, [ebp+var_4C]
.text:0040101C                 mov     ecx, 13h
.text:00401021                 mov     eax, 0CCCCCCCCh
.text:00401026                 rep stosd
[COLOR="#ff0000"].text:00401028                 mov     [ebp+var_4], 1
.text:0040102F                 mov     [ebp+var_8], 2
.text:00401036                 mov     eax, [ebp+var_4]
.text:00401039                 add     eax, [ebp+var_8]
.text:0040103C                 mov     [ebp+var_C], eax
.text:0040103F                 mov     eax, [ebp+var_C][/COLOR]
.text:00401042                 pop     edi
.text:00401043                 pop     esi
.text:00401044                 pop     ebx
.text:00401045                 mov     esp, ebp
.text:00401047                 pop     ebp
.text:00401048                 retn
.text:00401048 sub_401005      endp ; sp =  4


И видим всем знакомые константы в локальных переменных и возвращаемое значение.
3.0K
01 июля 2006 года
Oxaid
63 / / 02.04.2006
Ramon:

Хорошо ты все расписал. Теперь все очевидно. Но все – таки, как отличить служебную информацию от необходимой? Исходников ведь может и не быть. Короче говоря, как найти то, что нужно и отбросить то, что не нужно?
260
01 июля 2006 года
Ramon
1.1K / / 16.08.2003
В первую очередь нужна точка привязки, т.е. откуда начинать раскручивать цепочку(ячейка памяти, системный вызов, инструкция процессора и т.д) И эта точка как правило специфична для каждой задачи.

PS: Все упирается в логику, умение анализировать и ,конечно же, опыт.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог