Можно ли понять из дизасемблированого кода
От: Павел_  
Дата: 17.12.07 21:35
Оценка:
Можно ли понять из дизасемблированого кода, какие параметры принимает функция и что должно возращать?
Есть библиотека с набором функций, доки утеряна, может есть способ узнать что должно получать и возращать функция.
Спасибо.

Exported fn(): WINEDV_GetDeviceData — Ord:000Eh
:11028910 8B442404 mov eax, dword ptr [esp+04]
:11028914 50 push eax
:11028915 E8C66BFEFF call 1100F4E0
:1102891A 83C404 add esp, 00000004
:1102891D 85C0 test eax, eax
:1102891F 7437 je 11028958
:11028921 8B4008 mov eax, dword ptr [eax+08]
:11028924 85C0 test eax, eax
:11028926 7508 jne 11028930
:11028928 B8E5FFFFFF mov eax, FFFFFFE5
:1102892D C21000 ret 0010



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:11028926(C)
|
:11028930 8B401C mov eax, dword ptr [eax+1C]
:11028933 85C0 test eax, eax
:11028935 7508 jne 1102893F
:11028937 B8F8FFFFFF mov eax, FFFFFFF8
:1102893C C21000 ret 0010



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:11028935(C)
|
:1102893F 8B4C2410 mov ecx, dword ptr [esp+10]
:11028943 8B10 mov edx, dword ptr [eax]
:11028945 51 push ecx
:11028946 8B4C2410 mov ecx, dword ptr [esp+10]
:1102894A 51 push ecx
:1102894B 8B4C2410 mov ecx, dword ptr [esp+10]
:1102894F 51 push ecx
:11028950 8BC8 mov ecx, eax
:11028952 FF525C call [edx+5C]
:11028955 C21000 ret 0010



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:1102891F(C)
|
:11028958 83C8FF or eax, FFFFFFFF
:1102895B C21000 ret 0010


:1102895E 90 nop
:1102895F 90 nop
Re: Можно ли понять из дизасемблированого кода
От: Programador  
Дата: 17.12.07 22:06
Оценка:
Здравствуйте, Павел_, Вы писали:

П_>Можно ли понять из дизасемблированого кода, какие параметры принимает функция и что должно возращать?

П_>Есть библиотека с набором функций, доки утеряна, может есть способ узнать что должно получать и возращать функция.
П_>Спасибо.

берет адрес какогото класса
П_>:11028910 8B442404 mov eax, dword ptr [esp+04]
наверно это и есть Device


проверяет пару полей
П_>:11028921 8B4008 mov eax, dword ptr [eax+08]
П_>:11028924 85C0 test eax, eax


П_>:11028930 8B401C mov eax, dword ptr [eax+1C]

П_>:11028933 85C0 test eax, eax

какието инит коды возврата при неудаче


зовет виртуальную функцию

П_>:11028943 8B10 mov edx, dword ptr [eax]

П_>:11028952 FF525C call [edx+5C]


передает ей 3 параметра свои последние

П_>:1102893F 8B4C2410 mov ecx, dword ptr [esp+10]

П_>:11028945 51 push ecx
П_>:11028946 8B4C2410 mov ecx, dword ptr [esp+10]
П_>:1102894A 51 push ecx
П_>:1102894B 8B4C2410 mov ecx, dword ptr [esp+10]
П_>:1102894F 51 push ecx

вобщем ничего понять нельзя
Re[2]: Можно ли понять из дизасемблированого кода
От: Павел_  
Дата: 17.12.07 22:25
Оценка:
Спасибо за ответ, попробывал IDA pro
Я так понимаю, функция 4 аргумента

.text:11002E60 public SOG_DllInit
.text:11002E60 SOG_DllInit proc near
.text:11002E60
.text:11002E60 arg_0 = dword ptr 4
.text:11002E60 arg_4 = dword ptr 8
.text:11002E60 arg_8 = dword ptr 0Ch
.text:11002E60 arg_C = dword ptr 10h
.text:11002E60 arg_10 = dword ptr 14h
.text:11002E60
.text:11002E60 push esi
.text:11002E61 push edi
.text:11002E62 push offset aDllinit ; "DllInit"
.text:11002E67 call sub_11002F70
.text:11002E6C mov edi, [esp+0Ch+arg_8]
.text:11002E70 or ecx, 0FFFFFFFFh
.text:11002E73 xor eax, eax
.text:11002E75 add esp, 4
.text:11002E78 repne scasb
.text:11002E7A not ecx
.text:11002E7C sub edi, ecx
.text:11002E7E mov eax, ecx
.text:11002E80 mov esi, edi
.text:11002E82 shr ecx, 2
.text:11002E85 mov edi, offset FileName ; "DLLINIT.INI"
.text:11002E8A rep movsd
.text:11002E8C mov ecx, eax
.text:11002E8E xor eax, eax
.text:11002E90 and ecx, 3
.text:11002E93 rep movsb
.text:11002E95 mov edi, [esp+8+arg_4]
.text:11002E99 or ecx, 0FFFFFFFFh
.text:11002E9C repne scasb
.text:11002E9E not ecx
.text:11002EA0 sub edi, ecx
.text:11002EA2 mov edx, ecx
.text:11002EA4 mov esi, edi
.text:11002EA6 shr ecx, 2
.text:11002EA9 mov edi, offset aDllinit_cnf ; "DLLINIT.CNF"
.text:11002EAE rep movsd
.text:11002EB0 mov ecx, edx
.text:11002EB2 and ecx, 3
.text:11002EB5 rep movsb
.text:11002EB7 mov edi, [esp+8+arg_0]
.text:11002EBB or ecx, 0FFFFFFFFh
.text:11002EBE repne scasb
.text:11002EC0 not ecx
.text:11002EC2 sub edi, ecx
.text:11002EC4 mov eax, ecx
.text:11002EC6 mov esi, edi
.text:11002EC8 mov edi, offset aAuftrag_ini ; "AUFTRAG.INI"
.text:11002ECD shr ecx, 2
.text:11002ED0 rep movsd
.text:11002ED2 mov ecx, eax
.text:11002ED4 xor eax, eax
.text:11002ED6 and ecx, 3
.text:11002ED9 rep movsb
.text:11002EDB mov edi, [esp+8+arg_C]
.text:11002EDF or ecx, 0FFFFFFFFh
.text:11002EE2 repne scasb
.text:11002EE4 not ecx
.text:11002EE6 sub edi, ecx
.text:11002EE8 mov edx, ecx
.text:11002EEA mov esi, edi
.text:11002EEC mov edi, offset unk_1107BB00
.text:11002EF1 shr ecx, 2
.text:11002EF4 rep movsd
.text:11002EF6 mov ecx, edx
.text:11002EF8 and ecx, 3
.text:11002EFB rep movsb
.text:11002EFD mov edi, [esp+8+arg_10]
.text:11002F01 or ecx, 0FFFFFFFFh
.text:11002F04 repne scasb
.text:11002F06 not ecx
.text:11002F08 sub edi, ecx
.text:11002F0A mov eax, ecx
.text:11002F0C mov esi, edi
.text:11002F0E mov edi, offset byte_1107BB20
.text:11002F13 shr ecx, 2
.text:11002F16 rep movsd
.text:11002F18 mov ecx, eax
.text:11002F1A mov eax, dword_1107BAF4
.text:11002F1F and ecx, 3
.text:11002F22 and eax, 0FFh
.text:11002F27 rep movsb
.text:11002F29 pop edi
.text:11002F2A pop esi
.text:11002F2B retn 14h
.text:11002F2B SOG_DllInit endp
Re[3]: Можно ли понять из дизасемблированого кода
От: MShura  
Дата: 18.12.07 12:38
Оценка:
Здравствуйте, Павел_, Вы писали:

П_>Спасибо за ответ, попробывал IDA pro

П_>Я так понимаю, функция 4 аргумента

Судя по всему таки 5

char aDllInitIni[] = "DLLINIT.INI";
char aDllInitCnf[] = "DLLINIT.CNF";
char aAuftrag_ini[] = "AUFTRAG.INI";

void SOG_DllInit( const char* arg0, const char* arg4, const char* arg8, const char* argC, const char* arg10 )
{
  sub_11002F70( "DllInit" )
  memcpy( aDllInitIni, arg8, strlen( arg8 ) + 1 );
  memcpy( aDllInitCnf, arg4, strlen( arg4 ) + 1 );
  memcpy( aAuftrag_ini, arg0, strlen( arg0 ) + 1 );
  memcpy( unk_1107BB00, argC, strlen( argC ) + 1 );
  memcpy( byte_1107BB20, arg10, strlen( arg10 ) + 1 );
}
Re[4]: Можно ли понять из дизасемблированого кода
От: pva  
Дата: 19.12.07 00:01
Оценка: 1 (1)
Здравствуйте, MShura, Вы писали:

П_>>Спасибо за ответ, попробывал IDA pro

П_>>Я так понимаю, функция 4 аргумента

MS>Судя по всему таки 5


Странно у вас HexRays работает Или это вы сами расписали?
Судя по retn 14h аргументов действительно 5. Но судя по тому, что eax не восстанавливается сигнатура будет вида "int fn", а не void.
newbie
Re: Можно ли понять из дизасемблированого кода
От: gear nuke  
Дата: 19.12.07 03:43
Оценка:
Здравствуйте, Павел_, Вы писали:

П_>Exported fn(): WINEDV_GetDeviceData — Ord:000Eh


Эта функция — просто экспортируемая С обёртка на С++ библитотекой. Возвращает код ошибки, а тип аргументов по ней не скажешь, придётся разбираться с реализацией (концептуальных сложностей быть не должно, MSVC (6?) без /GL).
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: Можно ли понять из дизасемблированого кода
От: MShura  
Дата: 19.12.07 08:26
Оценка: 1 (1)
pva>Странно у вас HexRays работает Или это вы сами расписали?
Что такое HexRays и умеет ли оно работать с текстом IDA не знаю.
Расписал сам, Copy+paste — дело нехитрое.

pva>Судя по retn 14h аргументов действительно 5. Но судя по тому, что eax не восстанавливается сигнатура будет вида "int fn", а не void.

Не заметил в конце работу с eax.

unsigned int dword_1107BAF4;
size_t/(unsigned char) SOG_DllInit(...._
{
  ...
  return (unsigned char)(dword_1107BAF4);
}
Re[2]: Можно ли понять из дизасемблированого кода
От: Павел_  
Дата: 19.12.07 14:46
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Павел_, Вы писали:


П_>>Exported fn(): WINEDV_GetDeviceData — Ord:000Eh


GN>Эта функция — просто экспортируемая С обёртка на С++ библитотекой. Возвращает код ошибки, а тип аргументов по ней не скажешь, придётся разбираться с реализацией (концептуальных сложностей быть не должно, MSVC (6?) без /GL).


да MSVC 6 версия, откуда узнали? =)
Re[3]: Можно ли понять из дизасемблированого кода
От: gear nuke  
Дата: 19.12.07 16:53
Оценка:
Здравствуйте, Павел_,

После некоторой практики, обычно определяется интуитивно. Если же анализировать, то борланд не умеет вроде с esp работать (хотя я его мало видел), а для более поздних MSVC оптимизатор плох.

.text:11002F1A mov eax, dword_1107BAF4
.text:11002F1F and ecx, 3
.text:11002F22 and eax, 0FFh

2 из этих команд на современных процессорах можно заменить одной.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[6]: Можно ли понять из дизасемблированого кода
От: pva  
Дата: 19.12.07 17:55
Оценка: 1 (1)
Здравствуйте, MShura, Вы писали:

pva>>Странно у вас HexRays работает Или это вы сами расписали?

MS>Что такое HexRays и умеет ли оно работать с текстом IDA не знаю.
Это плаг к иде — www.hexblog.com
Пока еще сырой, конечно, но с подобным бы справился без проблем.
newbie
Re[7]: Можно ли понять из дизасемблированого кода
От: MShura  
Дата: 19.12.07 18:41
Оценка:
pva>>>Странно у вас HexRays работает Или это вы сами расписали?
MS>>Что такое HexRays и умеет ли оно работать с текстом IDA не знаю.
pva>Это плаг к иде — www.hexblog.com
pva>Пока еще сырой, конечно, но с подобным бы справился без проблем.

Вы для себя покупали или контора платила?
50 тыщ на одну лицензию кажется дороговато для личного пользования.

P.S. Когда-то контора покупала IDA на несколько лицензий.
Сейчас меня всё устраивает и в старой версии.
Re[8]: Можно ли понять из дизасемблированого кода
От: pva  
Дата: 19.12.07 21:23
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Вы для себя покупали или контора платила?

MS>50 тыщ на одну лицензию кажется дороговато для личного пользования.
Да уж, 2к за оловянный молоток — это перебор. Но современные технологии дошли до такого, что ознакомиться с продуктом можно не прибегая к оплате.

MS>P.S. Когда-то контора покупала IDA на несколько лицензий.

MS>Сейчас меня всё устраивает и в старой версии.
Кесарю, как говорится, кесарево...
newbie
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.