Сейчас на форуме: _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Проблема с анализом функций.
Посл.ответ Сообщение

Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 03 ноября 2011 22:02
· Личное сообщение · #1

Здравствуйте. Исследую одну библиотеку, в ней вызов функций идет через стек (может ошибаюсь, но не знаю как правильно назвать) пример:
Code:
  1. 1002D670          /$  6A FF         PUSH -1
  2. 1002D672          |.  68 996F0410   PUSH LicenseT.10046F99
  3. 1002D677          |.  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
  4. 1002D67D          |.  50            PUSH EAX
  5. 1002D67E          |.  83EC 48       SUB ESP,48
  6. 1002D681          |.  A1 20700610   MOV EAX,DWORD PTR DS:[10067020]
  7. 1002D686          |.  33C4          XOR EAX,ESP
  8. 1002D688          |.  50            PUSH EAX
  9. 1002D689          |.  8D4424 4C     LEA EAX,DWORD PTR SS:[ESP+4C]
  10. 1002D68D          |.  64:A3 0000000>MOV DWORD PTR FS:[0],EAX
  11. 1002D693          |.  8B06          MOV EAX,DWORD PTR DS:[ESI]
  12. 1002D695          |.  8B50 14       MOV EDX,DWORD PTR DS:[EAX+14]
  13. 1002D698          |.  57            PUSH EDI
  14. 1002D699          |.  8BCE          MOV ECX,ESI
  15. 1002D69B          |.  FFD2          CALL EDX <------------------------------------------
  16. 1002D69D          |.  84C0          TEST AL,AL
  17. 1002D69F          |.  75 3B         JNZ SHORT LicenseT.1002D6DC
  18. 1002D6A1          |.  8B06          MOV EAX,DWORD PTR DS:[ESI]
  19. 1002D6A3          |.  8B50 2C       MOV EDX,DWORD PTR DS:[EAX+2C]
  20. 1002D6A6          |.  8BCE          MOV ECX,ESI
  21. 1002D6A8          |.  FFD2          CALL EDX <------------------------------------------
  22. 1002D6AA          |.  8B10          MOV EDX,DWORD PTR DS:[EAX]
  23. 1002D6AC          |.  8B52 08       MOV EDX,DWORD PTR DS:[EDX+8]
  24. 1002D6AF          |.  8D4C24 04     LEA ECX,DWORD PTR SS:[ESP+4]
  25. 1002D6B3          |.  51            PUSH ECX
  26. 1002D6B4          |.  8BC8          MOV ECX,EAX
  27. 1002D6B6          |.  FFD2          CALL EDX<------------------------------------------

И так большинство функций. Напрягает неимоверно. Я так пониманию, что это какая-то оптимизация компилятора. В библиотеке используется Crypto++, сигнатуры применил, но распозналось очень мало функций, по моему мнению как раз через специфический вызов функций. Подскажите как перекомпилировать Crypto++, чтобы коллы были подобные тем что выше.
Peid по библиотеке говорит:
Code:
  1. Microsoft Visual C++ 8.0 DLL Method2

Visual Studio 2005?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 03 ноября 2011 22:26
· Личное сообщение · #2

Дык а что тут странного? Обычный this->Fn(...) вызов.

-----
старый пень




Ранг: 47.7 (посетитель), 17thx
Активность: 0.090
Статус: Участник

Создано: 03 ноября 2011 22:31
· Личное сообщение · #3

> Подскажите как перекомпилировать Crypto++

В привате есть инструменты, на паблике нет. Единственный - ида, дерьмо конечно, но нет альтернативы. Эта задача из области пермутации, это блек.



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 04 ноября 2011 00:54
· Личное сообщение · #4

bowrouco пишет:
Единственный - ида, дерьмо конечно, но нет альтернативы

Сорсы Crypto++ нужной версии у меня есть, но там нормальные вызовы, как в прилинкованой либе они стали не нормальными...?
r_e пишет:
Дык а что тут странного? Обычный this->Fn(...) вызов.

Если есть исходник, как его изменить чтобы получить такие вызовы? В СИ я не силен.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 04 ноября 2011 01:06
· Личное сообщение · #5

yanus0 пишет:
Если есть исходник, как его изменить чтобы получить такие вызовы?

Видимо речь идет о уровне оптимизации

http://www.tantalon.com/pete/cppopt/compiler.htm
особое внимание на ключи компилятора /O

| Сообщение посчитали полезным: yanus0

Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 04 ноября 2011 03:34
· Личное сообщение · #6

yanus0
Что-то я вообще не пойму об чем речь.
В коде выше в ESI = this на входе функции, пролог стандартный. Дальше идет вполне стандартный код с ECX = this.
Аналог на с++ был бы
sub_1002D670(esi = obj)
{
esi->Fn14(...);
esi->Fn2C(...)->Fn8(...);
...

Что это конкретно за код, можно выявить скомпилировав ту же версию crypto++ с теми же ключами (или близкими), сделав сигнатуры и применив их к коду. анализом, например, в иде.
Причем второе можно и без сигнатур, но ручной работы больше будет

-----
старый пень


| Сообщение посчитали полезным: yanus0

Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 04 ноября 2011 13:32
· Личное сообщение · #7

r_e
sendersu
Да вроде это, то что нужно. Закрывать пока не буду, сижу разбираюсь.


 eXeL@B —› Вопросы новичков —› Проблема с анализом функций.
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати