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

 eXeL@B —› Вопросы новичков —› Недовостановленная таблица импорта
Посл.ответ Сообщение


Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 24 января 2016 02:13 · Поправил: Dart Sergius
· Личное сообщение · #1

Доброе время суток.
Есть у меня 1 программа. Накрыта была VMProtect.
Покурив маны и скрипты - вмпрот я снял. Импорт правда скрипт восстановить не смог, но я его восстановил руками с помощью ImpRec.
Однако - есть в импорте 1-а либа, которая крайне нестабильно загружается.
Часть таблицы импорта выглядит так ( когда все хорошо )
Code:
  1. 01900914  630A4110  wininet.InternetConnectA
  2. 01900918  63025A40  wininet.HttpAddRequestHeadersA
  3. 0190091C  630A41A0  wininet.HttpOpenRequestA
  4. 01900920  63021BB0  wininet.InternetCloseHandle
  5. 01900924  6309D8A0  wininet.HttpSendRequestA
  6. 01900928  63031C80  wininet.InternetReadFile
  7. 0190092C  6303B880  wininet.InternetOpenA
  8. 01900930  0022D710  VCRUNTIM.memcpy
  9. 01900934  00224740  VCRUNTIM.__std_exception_copy
  10. 01900938  00225010  VCRUNTIM.__telemetry_main_invoke_trigger
  11. 0190093C  002250C0  VCRUNTIM.__telemetry_main_return_trigger
  12. 01900940  00224960  VCRUNTIM._CxxThrowException
  13. 01900944  002247B0  VCRUNTIM.__std_exception_destroy
  14. 01900948  0022B890  VCRUNTIM._except_handler4_common
  15. 0190094C  0022EC10  VCRUNTIM.__CxxFrameHandler3
  16. 01900950  002240E0  JMP to ucrtbase.terminate
  17. 01900954  0022DC90  VCRUNTIM.memmove
  18. 01900958  0022E210  VCRUNTIM.memset
  19. 0190095C  00282060  ucrtbase._stricmp
  20. 01900960  00281D20  ucrtbase.strcat_s
  21. 01900964  00281F10  ucrtbase.strcpy_s
  22. 01900968  002CF5D0  ucrtbase._cexit
  23. 0190096C  0027E080  ucrtbase._crt_atexit
  24. 01900970  002CC350  ucrtbase._invalid_parameter_noinfo
  25. 01900974  0027E0D0  ucrtbase._initialize_onexit_table
  26. 01900978  002CBF70  ucrtbase._seh_filter_exe
  27. 0190097C  002803A0  ucrtbase._set_app_type

Но бывает ( брякаюсь я не на EP, а на system breakpoint ) вот так:
Code:
  1. 01900914  630A4110  wininet.InternetConnectA
  2. 01900918  63025A40  wininet.HttpAddRequestHeadersA
  3. 0190091C  630A41A0  wininet.HttpOpenRequestA
  4. 01900920  63021BB0  wininet.InternetCloseHandle
  5. 01900924  6309D8A0  wininet.HttpSendRequestA
  6. 01900928  63031C80  wininet.InternetReadFile
  7. 0190092C  6303B880  wininet.InternetOpenA
  8. 01900930  0022D710
  9. 01900934  00224740
  10. 01900938  00225010
  11. 0190093C  002250C0
  12. 01900940  00224960
  13. 01900944  002247B0
  14. 01900948  0022B890
  15. 0190094C  0022EC10


Когда он заполняет правильно - программа работает. Когда нет - естественно падает. Самое интересное что без olly падает - т.е. без отладчика не может правильно заполнить таблицу импорта.
Винда свежеустановленная на виртуалку. win7 x32. Активирована. ASLR выключен.
Я могу конечно денек посидеть и написать в TLS код - чтобы он восстанавливал через GetProcAddress нужные функции ( библиотека загружается всегда! ), но сама ситуация очень странная..



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 24 января 2016 03:25 · Поправил: dosprog
· Личное сообщение · #2

Зачем обязательно TLS? - Можно просто врезку сделать и EXE_EIP на неё настроить
И кстати, ASLR-то можно и включить, а в библиотеках установить бит relocatoins_stripped. Для большей ясности






Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 24 января 2016 03:54 · Поправил: Dart Sergius
· Личное сообщение · #3

dosprog пишет:
Зачем обязательно TLS?

просто с TLS ещё не работал ) Вот и подумал - почему не попробовать.
dosprog пишет:
ASLR-то можно и включить, а в библиотеках установить бит relocatoins_stripped

в CFFExplore это флаг "Can move DLL" ? Если в библиотеке выставлять этот флаг и пытаться загружаться - то ничего ваще не выходит. Библеотека нужная мапиться сразу после нашего фала ( по адресам )...

При внимательном просмотре секции(с которого с ImpRec хватал таблицу) обнаружил там адреса... Буду разбираться куда мапиться реальная таблица импорта...
----
Импорт нашелся. В другой секции... Надо лишь взять - да бережно jmp поправить в нужную секцию.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 24 января 2016 05:32
· Личное сообщение · #4

Code:
  1. 01900930  0022D710  VCRUNTIM.memcpy

и
Code:
  1. 01900930  0022D710

1.Вы сами дописали названия айпи?
2.Если нет то адреса у вас одинаковые в заполненной и как бы в незаполненной в таких случаях просто откройте окно памяти ALT+M и закройте)))

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 24 января 2016 06:02
· Личное сообщение · #5

ClockMan, да, я нашел нормальную таблицу импорта.
У меня было 2 таблицы - 1-а сплошная, которая была выковыряна со скрипта анпака vmprotect, и вторая, которая была восстановлена с помощью ImpRec. А JMP были на "старую" ( ту которую я показал ).
А подписаны были функции потому что модули грузились по "правильным адресам".

В итоге немного говнокода на свободный участок кода, и все поправлено )
Code:
  1. <0040791C>
  2.  
  3.   mov esi, 019A3000 ; start REAL IAT
  4.   mov edi, 01900002 ; JMPs need pathed
  5.  
  6. @loop:
  7.  
  8.   mov eax, [esi] ; currest real iat
  9.   mov ebx, [edi] ; current JMP
  10.   cmp eax,0 ; end of library?
  11.   jne short @no_need_process ; no need skip end library?
  12.   add esi, 4; slip end library
  13.   @no_need_process:
  14.  
  15.   cmp ebx,0 ; check end JMP table
  16.   je short @good;
  17.  
  18.   mov [edi], esi ; fill JMP address ( JMP NOT SHORT!!! )
  19.  
  20.   add edi, 6
  21.   add esi, 4
  22.   
  23.   jmp short @loop;
  24. @good:
  25.   int 3 ; end. Save changed and reload!



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


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