РЕ-пакеры и Vista

Тема в разделе "WASM.BEGINNERS", создана пользователем maestro-ant, 10 окт 2008.

  1. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    Здрасте. Постил уже этот вопос на кряклабе, но ответа так и не получил. Я написал упаковщик РЕ-файлов и вот появилась проблемка, выдает ошибку в Висте если ImageBasse упакованого файла не равен 400000h.

    Мой упаковщик работает по такому принципу: У стаба ImageBasse всегда 400000h. Стаб распаковывает в памяти файл по нужному адресу и передает управление на него. А если базы разные у стаба и у файла, то правит PE.ImageBasse и LDR_MODULE.BaseAddress, LDR_MODULE.EntryPoint, LDR_MODULE.SizeOfImage на тот который у оригинала должен быть.

    В ХР работает. В висте вываливается с ошибкой гдето в средине кернел при обработке уже оригинального файла.

    Ребята кто сталкивался подскажите че неправильно делаю. Если что могу дать ехе для наглядности.
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Адрес исключения какой ?
     
  3. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Давай.
     
  4. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    Вот пример http://www.fileuploader.cn/download.php?0611507e222914a26f498c68acdda9fc В архиве два файла. Оригинал и покрытый упаковщиком. Для наглядности я упростил.. и выбросил процедуру упаковки.

    Падает при выполнении ф-ии MessageBox в оригинальном файле.
    Но если база пакуемого файла такая же как и у стаба - то все гуд.
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    может в релоках дело
     
  6. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    KeSqueer
    Пальцем в небо? )
     
  7. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    maestro-ant
    обламывается при загрузке user32. Vista - гавно.
     
  8. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    litrovith
    Маладец, трассировать в ольге умеешь, видимо, кнопка F7 у тебя вс
     
  9. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    litrovith
    Маладец, трассировать в ольге умеешь, видимо, кнопка F7 у тебя всё же работает.

    Фраза
    Как раз и говорит, что падает "там" ;)
     
  10. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Малин, дубль вышел, да еще с кнопкой наошибся - F8 :)
     
  11. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    nester7, а там других функций нету ;). А что так сложно посмотреть в чём проблема?
    Самое простое решение - налету править свой стаб чтоб его ImageBasse совпадал с ImageBasse файла.

    nester7
    Ctrl+F9
     
  12. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Так что же ты нажал Ctrl+F9? Он и без тебя знает, что оно падает,
    он не знает _почему_. Давай варианты, анализируй дамп, выдвигай
    теории и т.п.

    Я тож могу так тыкать ;)

    Интересно, почему у него не работает (точнее, почему именно в висте, а он в 2к пробовал?).
    Я тут пас - сейчас не могу в силу эээ... некоторых причин.
     
  13. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Значится так. Когда твой код получает управление, карта памяти выглядит вот так:

    Код (Text):
    1. ...
    2. 00400000   00001000   pack_sim              PE header     Imag 01001002         R         RWE
    3. 00401000   00001000   pack_sim   .code      code          Imag 01001002         R         RWE
    4. 00410000   0037F000                                       Map  00041002         R         R         \Device\HarddiskVolume1\Windows\System32\locale.nls
    5. 75E30000   00001000   kernel32              PE header     Imag 01001002         R         RWE
    6. ...
    Далее, в базонезависимом стабе, ты выгружаешь все, что находится в окресностях оригинальной базы, ака 0х500000.
    А там у нас locale.nls, в область которого, после вызова MessageBoxA, идет обращение:

    Код (Text):
    1. >   kernel32.dll!_GetWindowsLocaleData@4()  + 0x24 bytes
    2.     kernel32.dll!_MakeLocHashNode@4()  + 0xf bytes 
    3.     kernel32.dll!_SetupSystemLocaleHashNode@0()  + 0x3e bytes  
    4.     kernel32.dll!_CheckSpecialLocales@4()  - 0x1db70 bytes 
    5.     kernel32.dll!_NlsValidateLocale@12()  + 0xf bytes  
    6.     kernel32.dll!_CompareStringW@24()  + 0x1c bytes
    7.     kernel32.dll!FSPErrorMessages::CConfig::IsRestrictedProcess()  + 0x3e bytes
    8.     kernel32.dll!FSPErrorMessages::CConfig::IsDisabled()  + 0x6a bytes 
    9.     kernel32.dll!FSPErrorMessages::CMessageMapper::LazyInitialize()  - 0x26af5 bytes   
    10.     kernel32.dll!FSPErrorMessages::CMessageMapper::NotifyLoadStringResource()  + 0x76 bytes
    11.     kernel32.dll!_RealWerpNotifyLoadStringResourceEx@20()  + 0x27 bytes
    12.     kernel32.dll!_RealWerpNotifyLoadStringResource@16()  + 0x21 bytes  
    13.     kernel32.dll!_LoadStringBaseExW@20()  + 0x9d bytes 
    14.     user32.dll!_MessageBoxWorker@4()  + 0xc9 bytes 
    15.     user32.dll!_MessageBoxTimeoutW@24()  + 0x7f bytes  
    16.     user32.dll!_MessageBoxTimeoutA@24()  + 0xa1 bytes  
    17.     user32.dll!_MessageBoxExA@20()  + 0x1b bytes   
    18.     user32.dll!_MessageBoxA@16()  + 0x45 bytes 
    19.     00501011() 
    20.     kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes   
    21.     ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes  
    22.     ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes
    В функции kernel32.dll!_GetWindowsLocaleData@4() идет обращение по адресу 0х006524СС.
     
  14. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    nester7 спасибо.
    тоесть выходит я затираю нужную винде память.
     
  15. Gefahrlich

    Gefahrlich New Member

    Публикаций:
    0
    Регистрация:
    12 янв 2010
    Сообщения:
    1
    как же всё-таки решить эту проблему??
     
  16. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Gefahrlich
    maestro-ant
    В данном случае после образа упаковщика загрузчик маппит что ему не лень (файл локали).
    Расширяй размер образа чтобы он был не меньше того что ты распаковываешь и не нужно никакого анмапа.
     
  17. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Я именно так и решил подобную проблему, за счет увеличения виртуального размера последней секции. Но все равно мне кажется что это не айс.