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

 eXeL@B —› Вопросы новичков —› Visual Build
Посл.ответ Сообщение


Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 09 февраля 2009 23:56 · Поправил: s0larian
· Личное сообщение · #1

Всем привет. Начал копать Visual Build Professional. В комплекте две проги: главная и консольная.

Консольная отломалась за 20 минут - в самой проге отламывается проверка eval/date и всё. Патчатся два куска:

Code:
  1. .text:004036E6                 call    sub_40416F
  2. .text:004036EB                 mov     byte ptr [ebp+var_4], 14h
  3. .text:004036EF                 test    esi, esi
  4. .text:004036F1                 jz      short check_eval


Code:
  1. .text:00403706 check_eval:
  2. .text:00403706                 mov     eax, [ebx+18h]
  3. .text:00403709                 cmp     byte ptr [eax+0F1h], 0
  4. .text:00403710                 jz      short no_eval


А вот с GUI версией просто труба. В самой проге реализован только обработчик событий (этих самых build events) который вызывается из кода DLL-ки и делает SendMessage() в главный поток. Думаю что через этот интерфейс идут только строки - то что появляется в логе. Всё остальное, похоже, реализовано в VisBuildSvr.dll и исполняется в отдельном потоке.

www.kinook.com/Download/VisBuildProEval.exe

Беда в том, что dll-ка распаковывается на лету и после первого breakpoint-a всё начинает сыпаться... Сделал dump dll-ки с PE tools. Экспорт есть, импорт тоже, но не полный - не хватает 9ти ф-ций - по одной из последних 9и dll:
rapidshare.com/files/196142284/VisBuildSvr.dll.html
rapidshare.com/files/196142685/VisBuildSvr_d.zip.html

Update 1:
Проблема была с non-bound imports - создал их заново, depends нормально всё показывает:
rapidshare.com/files/196157548/VisBuildSvr_d.dll.3-imp.zip.html

Народ, посмотрите пожалуйста - что-то я упустил - прога говорит что регистрация компонента не фачед... В dll-ке COM компонет живёт, помимо остального...

Update 2:
visbuildcmd.exe глючит начиная вот тут:
Code:
  1. .text:00404774                 push    [esp+ppv]       ; ppv
  2. .text:00404778                 mov     eax, [eax]
  3. .text:0040477A                 push    offset riid     ; riid
  4. .text:0040477F                 push    [esp+8+dwClsContext] ; dwClsContext
  5. .text:00404783                 push    eax             ; pUnkOuter
  6. .text:00404784                 push    [esp+10h+rclsid] ; rclsid
  7. .text:00404788                 call    ds:CoCreateInstance


Это ж системный вызов и должен работать - инициализировать COM компонент загрузив DLL... Хм, что-то криво в дампе?

Вылет в kernel32!InterlockedIncrement из-за кривого указателя. Вот stack в WinDBG:
Code:
  1. ChildEBP RetAddr  
  2. 0013e300 37e20555 kernel32!InterlockedIncrement+0x9
  3. 0013e338 37e18ad1 VisBuildSvr!xxx
  4. 0013e35c 37e28fc6 VisBuildSvr!xxx
  5. 0013e388 37e23655 VisBuildSvr!xxx
  6. 0013e3b4 37e1aa25 VisBuildSvr!xxx
  7. 0013e3cc 37e1ab58 VisBuildSvr!xxx


посмотрел в IDA - там куски стандартных MS библиотек... Не должно это глючить:
Code:
  1. 37E2054F ___updatetmbcinfo_0                                                                 
  2. 37E18ACC ??0_LocaleUpdate@@QAE@PAUlocaleinfo_struct@@@Z                                      
  3. 37E28FC1 int __cdecl _ismbblead(unsigned int)                                                
  4. 37E23650 __setargv_0                                                                         
  5. 37E1AA20 __CRT_INIT@12_0                                                                     
  6. 37E1AB53 int __cdecl __DllMainCRTStartup(HINSTANCE hinstDLL)                                 
  7. 37E1AC0D BOOL __stdcall DllEntryPoint(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
  8. 7C91CBA6 ntdll                                                                               
  9. 7C916173 ntdll                                                                               
  10. 7C9162D5 ntdll                                                                               
  11. ......
  12. 7752CC21 ole32                                                                               
  13. 774FFAB5 ole32                                                                               
  14. 774FFA84 ole32                                                                               
  15. 774FFAF2 ole32                                                                               
  16. 00404788 VisBuildCmd.exe                                                                     
  17. 00402EA4 VisBuildCmd.exe                                                                     
  18. 00403CE1 VisBuildCmd.exe                                                                     
  19. 0040C040 VisBuildCmd.exe                                                                     
  20. 7C816FD4 kernel32                                                                            
  21. 00000000 MEMORY                                                                              





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 10 февраля 2009 08:39
· Личное сообщение · #2

парился, парился, похоже что с импортом там как-то хитро - qu2, petools и imprec показывают разный набор ф-ций. Народ, как это решается?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 10 февраля 2009 11:06
· Личное сообщение · #3

Там длл накрыта Армой, походу. Её просто анпачить надо. А ты чо-то непонятное наколбасил, дамп снял, но ЕП не менял при этом. С импортом тоже чо-то наколбасил хитрое.
З.Ы. Забавно, КУ ещё кто-то юзает




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 10 февраля 2009 20:39
· Личное сообщение · #4

Archer, EP/OEP там одинаковые - это MS runtime - DllEntryPoint/__DllMainCRTStartup. Ну а если так, то армой накрыты только некоторые ф-ции?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 10 февраля 2009 22:39
· Личное сообщение · #5

Кто сказал, что одинаковые то? Арма сама писана на Сях, если ида опознаёт как рантайм-это не значит, что это нужная функция. По моему мнению, ОЕП=8c306, это РВА.
Стало быть, дампить на этом адресе и прикручивать импорт и релоки, стандартный анпак. Ну или тулзами попробуй типа армагеддона, если ручками лень, авось, возьмут.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 11 февраля 2009 10:26
· Личное сообщение · #6

Хммм.. похоже ты прав - помучил либу в Оле и вывалился в код тут:
Code:
  1. .text:37D2C306                 push    0Ch
  2. .text:37D2C308                 push    offset stru_37D4BC50
  3. .text:37D2C30D                 call    __SEH_prolog
  4. .text:37D2C312                 xor     eax, eax
  5. .text:37D2C314                 inc     eax
  6. .text:37D2C315                 mov     [ebp+var_1C], eax


это тоже runtime initialization.

Снял dump, почистил импорт, но беда в том, что рушится вот тут:

Code:
  1. .text:37D2C185 __CRT_INIT@12   proc near
  2. .text:37D2C185                 push    ebp
  3. .text:37D2C186                 mov     ebp, esp
  4. .text:37D2C188                 mov     eax, [ebp+arg_4]
  5. .text:37D2C18B                 cmp     eax, 1
  6. .text:37D2C18E                 push    esi
  7. .text:37D2C18F                 jnz     loc_37D2C275
  8. .text:37D2C195                 mov     eax, 94h
  9. .text:37D2C19A                 call    __alloca_probe
  10. .text:37D2C19F                 mov     esi, esp
  11. .text:37D2C1A1                 push    esi
  12. .text:37D2C1A2                 mov     dword ptr [esi], 94h
  13. .text:37D2C1A8                 call    dword ptr ds:3F5AFCh


по-моему, в последней строчке должен быть вызов HeapCreate()... посмотрел ещё по коду -- импортов не хватает...

Вот dump:
rapidshare.com/files/196674101/VisBuildSvr.dll.zip.html

А как добыть правильный импорт? ImpRec показывет, вроде, точно то же что уже есть в DLL-ке...




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 11 февраля 2009 19:40
· Личное сообщение · #7

Видимо, с анпаком ты мало дело имел.
Импрек хренота. И покажет он мусор, потому что сама таблица ИАТ вынесена вообще за пределы образа в динамически аллокаемую память, а часть импорта ещё и на переходники перенаправлена, их импрек вообще не распознает. Чтоб импрек увидел всё нормально, пошаманить придётся немного. Ещё юзается код сплайсинг, куски кода выносятся за пределы образа, дамп неполный и будет падать.
Попробуй почитать статьи про Armadillo/попробуй тулзы автоматические для неё/подожди, когда ещё кто-нить анпакнет, у меня сейчас к сожалению времени мало свободного.


 eXeL@B —› Вопросы новичков —› Visual Build
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати