|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 5, 2004 11:58:43 Кто сумеет идентифицировать функцию импортируемую из kernel32.dll она ( Unknown_Kernel32_function ) встречается в таком контексте порядка 20 раз в файле ( листинг получен в IDA, файл PE с поврежденной таблицей импорта, но это с большой вероятностью ф-я из kernel32, Unknown_Kernel32_function - имя данное мною ) call CString::~CString() mov eax,[esi+4] push ebx push eax call dword ptr ds:Unknown_Kernel32_function push ebx mov edi,eax call operator delete(void) и в таком виде call CString::~CString() mov edx,[esi+4] push esi push edx call dword ptr ds:Unknown_Kernel32_function push esi call operator delete(void) Или у кого-то есть какие-то соображения которые сумеют сузить круг "подозреваемых" функций. |
|
|
Дата: Май 5, 2004 12:29:28 unintruder А внутри у нее что? |
|
|
Дата: Май 5, 2004 13:29:02 пройдись отладчиком по этому месту, увидишь куда тебя кинет этот call dword ptr ds:Unknown_Kernel32_function |
|
|
Дата: Май 5, 2004 15:17:50 Внимание !!! Файл с поврежденной таблицей импорта. Потому в отладчике я вижу call ds:[Адрес из таблицы импорта] и в результате вызов кода ( случайного ??? ). Но по этому адресу должна быть по всей видимости функция из kernel32.dll. Я так думаю, потому что рядом с этой функцией в таблице импорта функции из kernel32 (т.е. это секция импорта из нее). |
|
|
Дата: Май 5, 2004 18:24:15 Возми оригинальный файл и посмотри что именно вызывается в этих местах. А если оригинального нет, то попробуй аналогичную прогу на VC написать и посмотреть что компилер туда впихнет... |
|
|
Дата: Май 5, 2004 18:32:36 Мля, ну как дети, поставил бряк на этот неизвестный CALL добился срабатывания, зашёл в CALL и увидел что за функция. |
|
|
Дата: Май 5, 2004 18:53:10 Мля, ну как дети, поставил бряк на этот неизвестный CALL добился срабатывания, зашёл в CALL и увидел что за функция. а я что сказал? |
|
|
Дата: Май 5, 2004 19:04:36 Посмотреть в отладчике и т.п не выйдет, прога запакована NETHASP-4 и ключа у меня нет. Есть только распакованный дамп. При это на XP стартует, на всем другом нет, нужно править таблицу импорта. там где должен быть адресс функции из kernel32 стоит снятый с фонаря адрес, именно по нему сейчас и работает call, а мне нужно туда подставить адрес функции. Практически вся таблица импорта уже восстановлена, вопрос только в этой функции. Как еще объяснить я не знаю, всем спасибо. |
|
|
Дата: Май 5, 2004 19:10:52 Уточнение - стартует только на XP без SP и т.п. ( видимо именно на такой конфе распаковывали прогу ) |
|
|
Дата: Май 5, 2004 19:24:44 Ты дал мало информации. Хорошо, вижу деструктор. Где замангленое имя деструктора? По нему можно было бы восстановить второй параметр. А так - ну что из этого убогого клочка кода можно сказать? Функция принимает два параметра, один из которых 80% является указателем на какую-то область памяти, которая потом высвобождается, причем не функцией. Сколько, как ты думешь, функций из kernel32 попадают под это определение? |
|
|
Дата: Май 5, 2004 20:15:13 Ну запускай тогда на XP(no SP) и смотри куда ведёт указанный тобой неизвестный CALL. |
|
|
Дата: Май 6, 2004 09:24:08 Копаю в другом направлении. Решил заменить все вызовы этой функции call dword ptr ds:[00042402B] ;[00042402B] - таблица импорта содержит 0044A789h адрес из секции .protect. Идея заменить все вызовы ф-и прямым переходом на нужный код, а затем в таблицу импорта "вписать" произвольную подходящую ф-ю из kernel32.dll (все равно обращения не будет) меняю на прямой вызов по адресу 0044A789h ( Image base 400000 ) call 0004A789h. Проделываю это в HexView. Запускаю полученный файл и прерываю сразу на входе и вижу что в памяти код отличается от исходного не только этими вызовами, т.е. заменяя только эту инструкцию ( размер совпадает ), получаю разный код в памяти ? В частности присутствует инструкция in и код естественно падает, в исходном файле такого нет. Почему ? по логике я сделал все верно и код должен остаться рабочим. |
|
|
Дата: Май 6, 2004 10:53:50 unintruder Откуда берется значение в esi в обоих фрагментах, а во втором еще и ebx. |
|
|
Дата: Май 6, 2004 16:05:05 Volodya Кажется, таких функций не очень много :) all В первом примере мы сохраняем результат функции, а во втором - нет. Значит ф-ция возвращает что-нибудь вроде BOOL или DWORD. Потом, второй аргумент - адрес, но по нему расположена не строка (из второго примера). ИМХО под описание подходит InterlockedExchange :-) В аттаче список функций экспортируемых из kernel32.dll, которые берут 2 аргумента (надеюсь, полный) 1116778195__fpro_k32.rar |
|
|
Дата: Май 7, 2004 05:56:49 vaskovich подходит InterlockedExchange Вторым параметром InterlockedExchange является новое значение. Далее оно используется как параметр operator::delete, значит оно - указатель на некий блок памяти. Объясни, зачем куда-то (первый параметр InterlockedExchange) записывать указатель на тут же освобождаемый блок памяти. Потом, второй аргумент Не факт, что аргументов всего два, умные компиляторы могут помещать параметры в стек заранее. В первом примере мы сохраняем результат функции, а во втором - нет. Значит ф-ция возвращает что-нибудь ... В аттаче список функций экспортируемых из kernel32.dll, которые берут 2 аргумента Можно исключить из списка функции ничего не возвращающие. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.102 |