Forward msvcr71.DLL

Тема в разделе "WASM.WIN32", создана пользователем AlexBond, 2 окт 2010.

  1. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Пытаюсь вживить свою библиотеку через пересылку всех функций на оригинальный msvcr71.dll, но наткнулся на проблему... Программа которая использует эту библиотеку обращается к адресам функций напрямую, а не по вызову...

    Может кто подскажет как мне вживить вызов моей функции перед msvcr71.fopen?

    Exe-шник трогать нельзя, т.к. это игра и она зашита защитой, причем для каждой страны своя.
    Поэтому единственный выход это подмена msvcr71.dll на мою, с пересылкой на оригинальную.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Положи в каталог с игрой свою msvcr71.
     
  3. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Показываю наглядно место где происходит ошибка:

    [​IMG]


    [​IMG]

    По адресу в esi неверные данные

    [​IMG]

    А должны быть следующие

    [​IMG]
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    AlexBond
    Это как обьясните.
     
  5. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Функция _acmdln это вовсе не функция а переменная (ссылка), как я понял на значение командной строки.
    Используя пересылку через jmp у меня вместо адреса переменной, лежит 0xFF2538E53400 (jmp dword ptr [$0034e538])
    В итоге при обращении к _acmdln выскакивает ошибка...

    http://msdn.microsoft.com/en-us/library/ff770586.aspx

    Как выходить из этой ситуации, я ведь не буду все 837 функций проверять... на псевдопеременные...
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    AlexBond
    Описывайте подробно. Что за адреса, почему инвалидные и что вы вобще делаете.
     
  7. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Clerk
    Я делаю перехват функции fopen из библиотеки MSVCR71.DLL, через подмену оригинальной MSVCR71.DLL своей msvcr71.dll
    методом описаным тут http://www.wasm.ru/forum/viewtopic.php?id=9285

    В моей библиотеке msvcr71.dll все функции пересылаются на копию оригинальной MSVCR71.DLL названной msvcr7.dll

    Проблема в том, что не все функции из MSVCR71.DLL являются функциями... многие являются переменными.
    А переменную нельзя переадресовать второй раз...

    Вопрос. Как обойти эту проблему?
     
  8. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Просмотрев код библиотеки msvcr71.dll следующие функции являются переменными.
    Код (Text):
    1. _wctype    $7C37A6D8
    2. ??_7exception@@6B@    $7C37A8E0
    3. ??_7bad_cast@@6B@    $7C37A900
    4. ??_7bad_typeid@@6B@    $7C37A920
    5. ??_7__non_rtti_object@@6B@    $7C37F058
    6. _aexit_rtn    $7C38B42C
    7. _fileinfo    $7C38B434
    8. __badioinfo    $7C38B438
    9. __mb_cur_max    $7C38B45C
    10. _pctype    $7C38B460
    11. _pwctype    $7C38B464
    12. __lc_clike    $7C38B4E0
    13. _iob    $7C38B4E8
    14. _timezone    $7C38C780
    15. _daylight    $7C38C784
    16. _dstbias    $7C38C788
    17. _tzname    $7C38C790
    18. _sys_errlist    $7C38C818
    19. _sys_nerr    $7C38C8C8
    20. _HUGE    $7C38C8CC
    21. _osplatform    $7C38C8D4
    22. _osver    $7C38C8D8
    23. _winver    $7C38C8DC
    24. _winmajor    $7C38C8E0
    25. _winminor    $7C38C8E4
    26. __argc    $7C38C8E8
    27. __argv    $7C38C8EC
    28. __wargv    $7C38C8F0
    29. _environ    $7C38C8F4
    30. __initenv    $7C38C8F8
    31. _wenviron    $7C38C8FC
    32. __winitenv    $7C38C900
    33. _pgmptr    $7C38C904
    34. _wpgmptr    $7C38C908
    35. _wcmdln    $7C38C90C
    36. _acmdln    $7C38C910
    37. _fmode    $7C38C918
    38. __lc_handle    $7C38C91C
    39. __lc_codepage    $7C38C934
    40. __lc_collate_cp    $7C38C938
    41. _commode    $7C38C93C
    42. _adjust_fdiv    $7C38C940
    43. __pioinfo    $7C38C960
    44. _mbctype    $7C38CA60
    45. _mbcasemap    $7C38CB80
    46. __setlc_active    $7C38CC80
    47. __unguarded_readlc_active    $7C38CC84
    Реально ли сделать пересылку на переменную?
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
  10. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    l_inc
    Как я понял идет ссылка на строку...
    Интересно реально ли это все организовать на Delphi?
    Просто у меня основной код написан там, переводить его в fasm... трудоемко...
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AlexBond
    Про Delphi ничего не знаю, но думаю, что стандартными средствами вряд ли. А вот подредактировать директорию экспорта в готовом бинарнике вполне реально.
     
  12. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    l_inc
    Попробую сделать следующую схему:
    Код (Text):
    1. Game.exe -> fopen -> msvcr71.dll -> MyDll.myfunc -> MyDll.dll -> fopen -> msvcr7.dll
    2. Game.exe -> anyfunc -> msvcr71.dll -> anyfunc -> msvcr7.dll
    может прокатит!!!
     
  13. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Спасибо l_inc ВСЁ РАБОТАЕТ!!!!
    Тема закрыта.