Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как избавиться от перехвата ф-ций АПИ


Автор: Romikgy 31.8.2006, 11:18
Если я не туда запостил , извеняйте , вроде такой вообще нет ветки, хотя могу и ошибаться  smile 

Смысл такой , вирус завелся, перехватывает 3 ф-ции апи FindFirstFile, Module32First, RegEnumValue, 
сам он сделан в dll , как мне программно (самому написать) или другим ПО, избавится от этой dll ? 
Тоесть убрать ее из запуска, вирус (хотя возможно это трой) этот ничем не видится smile  кроме проги AVZ

Автор: Quadr0 31.8.2006, 11:31
...

Автор: Yanis 31.8.2006, 11:36
Цитата(Romikgy @  31.8.2006,  12:18 Найти цитируемый пост)
кроме проги AVZ 

Потому что это крутая прога smile 
Там на закладке параметры поиска есть опции "Блокировать работу RootKit User-Mode" и "Блокировать работу RootKit Kernel-Mode". Попробуй их включить. AVZ сразу заволнуется, что типа это вредно для системы... Не обращай внимания, просто потребуется перезагрузка на всякий случай.
Возможно после поиска перехват функций вирём деактивируются.
А ещё поставь себе ProcessXP Руссиновича и посмотри кто подгружает эту dll.

Добавлено @ 11:39 
А самое простое это отнести винт к другу и удалить эту либу от него. Конечно, если винт не в RAID'е стоят как в моём случае smile

Автор: Romikgy 31.8.2006, 11:42
Ща попробуем

Автор: Yanis 31.8.2006, 11:44
Ещё может помочь включение AVZGuard перед сканированием.... Надо пробовать.

Автор: Teran 31.8.2006, 12:40
Цитата(Romikgy @  31.8.2006,  11:18 Найти цитируемый пост)
как мне программно (самому написать) или другим ПО, избавится от этой dll 

ищи в эту "злую" dll подключенную к процессам и отсоединяй ее от просессов тогда hook исчезнет

Автор: Romikgy 31.8.2006, 14:27
Teran, ты читал мой первый пост?
Цитата(Romikgy @  31.8.2006,  10:18 Найти цитируемый пост)
перехватывает 3 ф-ции апи FindFirstFile, Module32First, RegEnumValue, 

ниочем не говорит?

Цитата(Yanis @  31.8.2006,  10:36 Найти цитируемый пост)
Там на закладке параметры поиска есть опции "Блокировать работу RootKit User-Mode" и "Блокировать работу RootKit Kernel-Mode"

этого не нашел smile но если запускаю с драйвером и обращаюсь к реестру , авз просто закрывает и все smile

Автор: Yanis 31.8.2006, 14:39
Romikgy
Цитата(Yanis @  31.8.2006,  12:36 Найти цитируемый пост)
А ещё поставь себе ProcessXP Руссиновича и посмотри кто подгружает эту dll.

А это пробовал?

Автор: Romikgy 31.8.2006, 14:59
нет ща поищу его

Добавлено @ 15:04 
чет найти не могу, да и вроде этож для ХР , а у мя на машине 2000 стоит

Автор: BUGOR 31.8.2006, 15:15
Если апи перехватываются в режиме пользователя, то на 99% это сплайсинг(ну или исправление экспорта, что вряд ли), т.е. замена первых пяти байт вначале этих функций на прыжок. Так, что просто определи адреса этих функций в памяти процесса и проверь равен ли первый байт 55h, если равен, то это не сплайсингsmile Тогда надо чекать значение в таблице экспорта, но это уже гемор... 

Автор: dumb 31.8.2006, 15:40
Цитата(BUGOR @  31.8.2006,  15:15 Найти цитируемый пост)
Так, что просто определи адреса этих функций в памяти процесса и проверь равен ли первый байт 55h, если равен, то это не сплайсинг

большинство экспортируемых системой функций начинаются с сигнатуры 8b,ff - mov edi,edi. push ebp потом идет.

Добавлено @ 15:53 
не во всех системах, естественно. вроде как с SP2 пошла такая пьянка - вставлять 5 экстра-нопов перед функциями и эту "пустышку". видать будут делать фиксы на лету - call/jmp xx;jmp $-7;

Автор: Romikgy 31.8.2006, 16:16
BUGOR, вот что АВЗ сказал 
Код

1.1 Searching for user-mode API hooks
 Analysis kernel32.dll, export table found in section .text
Function kernel32.dll:FindFirstFileA (168) intercepted, method APICodeHijack.JmpTo
Function kernel32.dll:FindFirstFileW (171) intercepted, method APICodeHijack.JmpTo
Function kernel32.dll:FindNextFileA (177) intercepted, method APICodeHijack.JmpTo
Function kernel32.dll:FindNextFileW (178) intercepted, method APICodeHijack.JmpTo
Function kernel32.dll:Module32First (508) intercepted, method APICodeHijack.JmpTo
Function kernel32.dll:Module32FirstW (509) intercepted, method APICodeHijack.JmpTo
Function kernel32.dll:Module32Next (510) intercepted, method APICodeHijack.JmpTo
Function kernel32.dll:Module32NextW (511) intercepted, method APICodeHijack.JmpTo
 Analysis ntdll.dll, export table found in section .text
 Analysis user32.dll, export table found in section .text
 Analysis advapi32.dll, export table found in section .text
Function advapi32.dll:RegEnumValueA (412) intercepted, method APICodeHijack.JmpTo
Function advapi32.dll:RegEnumValueW (413) intercepted, method APICodeHijack.JmpTo
 Analysis ws2_32.dll, export table found in section .text
 Analysis wininet.dll, export table found in section .text
 Analysis rasapi32.dll, export table found in section .text
 Analysis urlmon.dll, export table found in section .text
 Analysis netapi32.dll, export table found in section .text

и вот 
Код

1.2 Searching for kernel-mode API hooks
 Driver is successfully loaded
 SDT found (RVA=06DFA0)
 Kernel ntoskrnl.exe located in the memory at the address 80400000
   SDT = 8046DFA0
   KiST = 804742B8 (248)
Function ZwClose (18) intercepted (8044F9A8->BFFE6028), hook a347bus.sys
Function ZwCreateKey (23) intercepted (804B2483->BFFE5FE0), hook a347bus.sys
Function ZwCreatePagingFile (27) intercepted (804ED9AF->BFFD9B00), hook a347bus.sys
Function ZwEnumerateKey (3C) intercepted (804B292D->BFFDA5DC), hook a347bus.sys
Function ZwEnumerateValueKey (3D) intercepted (804B2A70->BFFE6120), hook a347bus.sys
Function ZwOpenFile (64) intercepted (80498755->BFFD9B40), hook a347bus.sys
Function ZwOpenKey (67) intercepted (804B2E28->BFFE5FA4), hook a347bus.sys
Function ZwQueryKey (8B) intercepted (804B2FC0->BFFDA5FC), hook a347bus.sys
Function ZwQueryValueKey (9B) intercepted (804B3138->BFFE6076), hook a347bus.sys
Function ZwSetSystemPowerState (D1) intercepted (8048CC97->BFFE5550), hook a347bus.sys
Functions checked: 248, intercepted: 10, restored: 0

но от корнел мода , я уже избавилься , остался юзер мод

Добавлено @ 16:24 
Цитата(BUGOR @  31.8.2006,  14:15 Найти цитируемый пост)
99% это сплайсинг

а что это ?
и это 
Код

SDT found (RVA=06DFA0)
 Kernel ntoskrnl.exe located in the memory at the address 80400000
   SDT = 8046DFA0
   KiST = 804742B8 (248)

что?
smile
говорит еще вот что
Код

C:\WINNT\system32\msvcrt64.dll>>> Neural network: file with probability 99.81% appears
 like a typical  keyboard/mouse events trap
Note: Do NOT delete suspicious files, send them for analysis  (see FAQ for more details),  
because there are lots of useful hook DLLs

Автор: Yanis 31.8.2006, 17:29
Цитата(Romikgy @  31.8.2006,  17:16 Найти цитируемый пост)
msvcrt64.dll

Вот это, что за файл? Проверь его вот на этом сайте
http://www.virustotal.com/en/indexf.html
Там используются все известные антивирусы.

Цитата(Romikgy @  31.8.2006,  17:16 Найти цитируемый пост)
а что это ?

Это метод перехвата в режиме пользователя API функций.

Автор: Romikgy 31.8.2006, 18:43
Цитата(Yanis @  31.8.2006,  16:29 Найти цитируемый пост)
Вот это, что за файл? Проверь его вот на этом сайте

с удавольствием его бы проверил да его на винте найти не могу, имхо это и есть троян/вирус, и себя же прячет smile

Автор: Alexeis 31.8.2006, 18:46
Romikgy, А если снять с него (msvcrt64.dll) дамп и проверить его?

Автор: Romikgy 31.8.2006, 18:56
Цитата(alexeis1 @  31.8.2006,  17:46 Найти цитируемый пост)
А если снять с него (msvcrt64.dll) дамп и проверить его?

как это сделать?

Автор: BUGOR 31.8.2006, 21:02
Цитата

большинство экспортируемых системой функций начинаются с сигнатуры 8b,ff - mov edi,edi. push ebp потом идет.


Ок, проверяй, чтобы первым байтом небыл опкод команды JMP - E9h. 

Цитата

А если снять с него (msvcrt64.dll) дамп и проверить его?


А что это нам даст? Не понимаю. Проверить мы можем и в памяти. 

Цитата

1.2 Searching for kernel-mode API hooks
 Driver is successfully loaded
 SDT found (RVA=06DFA0)
 Kernel ntoskrnl.exe located in the memory at the address 80400000
   SDT = 8046DFA0
   KiST = 804742B8 (248)
Function ZwClose (18) intercepted (8044F9A8->BFFE6028), hook a347bus.sys
Function ZwCreateKey (23) intercepted (804B2483->BFFE5FE0), hook a347bus.sys
Function ZwCreatePagingFile (27) intercepted (804ED9AF->BFFD9B00), hook a347bus.sys
Function ZwEnumerateKey (3C) intercepted (804B292D->BFFDA5DC), hook a347bus.sys
Function ZwEnumerateValueKey (3D) intercepted (804B2A70->BFFE6120), hook a347bus.sys
Function ZwOpenFile (64) intercepted (80498755->BFFD9B40), hook a347bus.sys
Function ZwOpenKey (67) intercepted (804B2E28->BFFE5FA4), hook a347bus.sys
Function ZwQueryKey (8B) intercepted (804B2FC0->BFFDA5FC), hook a347bus.sys
Function ZwQueryValueKey (9B) intercepted (804B3138->BFFE6076), hook a347bus.sys
Function ZwSetSystemPowerState (D1) intercepted (8048CC97->BFFE5550), hook a347bus.sys
Functions checked: 248, intercepted: 10, restored: 0


А вот на это стоит обратить внимание, похоже на какой-то руткит. 

Цитата

BUGOR, вот что АВЗ сказал 


Ну вот, значит это и есть сплайсинг.

Автор: Alexeis 31.8.2006, 21:20
Цитата(Romikgy @  31.8.2006,  18:56 Найти цитируемый пост)
как это сделать? 

Да много есть разных програмок, например lordpe.

Цитата(BUGOR @  31.8.2006,  21:02 Найти цитируемый пост)
А что это нам даст? Не понимаю. Проверить мы можем и в памяти. 

Предложили проверить на вирус мощным онлайн антивирусом, он ведь не будет память проверять, а дамп снял, сохранил на диск и пожалуйста можно отправлять куда угодно, проверять чем угодно.

Автор: Romikgy 1.9.2006, 08:58
Цитата(BUGOR @  31.8.2006,  20:02 Найти цитируемый пост)
Ок, проверяй, чтобы первым байтом небыл опкод команды JMP - E9h. 

А хде смотреть этот опкод?
Цитата(BUGOR @  31.8.2006,  20:02 Найти цитируемый пост)
А вот на это стоит обратить внимание, похоже на какой-то руткит. 


Цитата(Romikgy @  31.8.2006,  15:16 Найти цитируемый пост)
но от корнел мода , я уже избавилься , остался юзер мод

Ответ на данное утверждения имхо ясен
Цитата(alexeis1 @  31.8.2006,  20:20 Найти цитируемый пост)
Да много есть разных програмок, например lordpe.

спасибо ща попробую (сначало найти это) smile

Автор: dumb 1.9.2006, 09:02
Цитата(Romikgy @  31.8.2006,  16:16 Найти цитируемый пост)
hook a347bus.sys

этот "руткит" - драйвер "алкоголя".

Цитата(Romikgy @  31.8.2006,  18:43 Найти цитируемый пост)
с удавольствием его бы проверил да его на винте найти не могу, имхо это и есть троян/вирус, и себя же прячет

его, возможно, уже и нет... пристрелили или сам убился smile
самое простое - грузануться с cd со свежим ав-набором. а так - глянуть, куда ведет перехват и отстрелить в сэйф-моде руками.

Автор: Romikgy 1.9.2006, 10:02
Цитата(dumb @  1.9.2006,  08:02 Найти цитируемый пост)
этот "руткит" - драйвер "алкоголя".

спасиб за инфу значит снова включу smile
Цитата(dumb @  1.9.2006,  08:02 Найти цитируемый пост)
его, возможно, уже и нет... пристрелили или сам убился

нет сам к сожалению он не убился smile
Цитата(dumb @  1.9.2006,  08:02 Найти цитируемый пост)
а так - глянуть, куда ведет перехват и отстрелить в сэйф-моде руками. 

в сейф моде он тоже активен smile
Цитата(alexeis1 @  31.8.2006,  20:20 Найти цитируемый пост)
Да много есть разных програмок, например lordpe.

по инфе от данного чела alexeis1, с помощью lordpe нашел место нахождения троя , идентификация его Generic.ZWR , нашел его в консоли можно наверное навернуть , но его наверное держат все процессы, так что просто не получится , хотя эксперементы оставлю на начало следующей недели

Автор: Yanis 1.9.2006, 10:20
Цитата(Romikgy @  1.9.2006,  11:02 Найти цитируемый пост)
но его наверное держат все процессы

Я уже писал как проверить какие процессы его держат smile

Автор: Romikgy 1.9.2006, 10:25
Yanis, не хочу показатся грубым , но я тоже писал , что у троя этого есть перевхат ф-ций которые просматривают, кто держит dll 

Автор: BUGOR 1.9.2006, 10:40
Romikgy, посмотри какие первые 5 байт оригинальные у перехватываемых функций в твоей системе, далее восстанови их и спокойно юзай как написал Yanis. Т.о. образом собсно ты и избавишься от перехвата.

Автор: Romikgy 1.9.2006, 11:01
BUGOR, сколько раз просить 
Цитата(BUGOR @  1.9.2006,  09:40 Найти цитируемый пост)
посмотри какие первые 5 байт оригинальные у перехватываемых функций в твоей системе

ХДЕ посмотреть ???

Автор: Yanis 1.9.2006, 11:09
Цитата(Romikgy @  1.9.2006,  11:25 Найти цитируемый пост)
Yanis, не хочу показатся грубым , но я тоже писал , что у троя этого есть перевхат ф-ций которые просматривают, кто держит dll

Ни одна из тех функций, которые у тебя перехвачены не должна повлиять на роботу ProcessXP в определении процесса, который владет описателем вирусного файла.

Автор: Romikgy 1.9.2006, 11:20
Цитата(Yanis @  1.9.2006,  10:09 Найти цитируемый пост)
ProcessXP

его ссылки для скачивания я не нашел, и он только для ХР или нет? У мя 2000

Автор: _hunter 1.9.2006, 11:34
http://www.sysinternals.com/Utilities/ProcessExplorer.html
есть и для 2к

Автор: Romikgy 1.9.2006, 11:44
_hunter, это у мя есть , и оно никого не видит smile

Автор: Yanis 1.9.2006, 11:47
Romikgy
Так если ты знаешь какой файл неможешь удалить, то поищи (Ctl+F) кто его держит.

Автор: Romikgy 1.9.2006, 11:56
Yanis, опять 25 ....
Цитата(Yanis @  1.9.2006,  10:47 Найти цитируемый пост)
ты знаешь какой файл неможешь удалить, то поищи (Ctl+F) кто его держит.


Цитата(Romikgy @  31.8.2006,  10:18 Найти цитируемый пост)
перехватывает 3 ф-ции апи FindFirstFile, Module32First, RegEnumValue, 

еще раз повторюсь , перехват этих ф-ций не дает:
1. найти его файл
2. найти к каким процессам он прицеплен
3. найти где в реестре он ся прописал
!!!!
юзая АВЗ я нашел его место положение на диске !
юзая 
Цитата(Romikgy @  1.9.2006,  09:02 Найти цитируемый пост)
с помощью lordpe нашел место нахождения троя , идентификация его Generic.ZWR

сделал дамп этой dll и определил что за зверь,
буду пытатся снести его руками , хотя есть опасения что dll прописалась как чтото системное и может при простом удалении привести к краху системы!!!!
(у меня был такой вирус уже , так прописался как дебаг процесс к эксплореру и после удаления его эксплорер перестал вообще запускатся , а такой вариант неприемлем, т.к. машина рабочая на стоит спец ПО , стопорить ее нежелательно)

Автор: BUGOR 1.9.2006, 12:26
Цитата

ХДЕ посмотреть ???


Ну всё по-порядку... Берём тот же LordPE(хотя я предпочитаю PETools, обе программы можно найти на cracklab.ru), открываем. PE Editor, там выбирай kernel32.dl
Далее накидаем небольшое приложение:

ShowMessage(IntToHex(dword(GetProcAddress(GetModuleHandle('kernel32.dll'), 'FindFirstFileA')),8));

Которое вернёт нам адресс перехватываемой FindFirstFileA в памяти. Т.к. база кернела есть константа, то благо во всех приложениях этот адресс будет одним. 

---------------------------
Project1
---------------------------
77E7A10D
---------------------------
OK   
---------------------------

В LordPE нажимай FLC, выбирай VA(virtual address), вводи туда 77E7A10D и жми do. LerdPE покажет внутрифайловый оффсет этой функции, а чуть ниже и первые байты.


Автор: Romikgy 1.9.2006, 12:49
Цитата(BUGOR @  1.9.2006,  11:26 Найти цитируемый пост)
cracklab.ru

на любую закачку 
Код

Not Found

The requested URL /cracklab/_dl/pe/PETools.rar was not found on this server.
Apache/2.0.52 (Win32) PHP/4.4.2 Server at 208.66.194.6 Port 80


Добавлено @ 12:51 
Цитата(BUGOR @  1.9.2006,  11:26 Найти цитируемый пост)
база кернела есть константа,

во всех версиях виндов?

Автор: dumb 1.9.2006, 12:57
вариант лечения:

hiew32 c:\windows\system32\advapi32.dll
enter, f8, f9
найти RegEnumValueW и перейти на начало этой функции.
оставляем открытым, чтобы потом списать оригинальный стаб функции.

ollydbg c:\windows\regedit.exe
alt-f1: bpx RegEnumValueW
f9(брякнется на первом вызове), f7(входим в функцию)
там будет какой-нибудь хлам вроде jmp xx или push xxx,ret
заменяем хлам на оришинальный код.

далее спокойно работаем в регедите, вырезая места с упоминаниями злой dll. сомневаюсь, что она следит за снятием хука, так что все должно получиться.

Автор: Yanis 1.9.2006, 13:06
Цитата(Romikgy @  1.9.2006,  12:56 Найти цитируемый пост)
еще раз повторюсь , перехват этих ф-ций не дает:
1. найти его файл
2. найти к каким процессам он прицеплен
3. найти где в реестре он ся прописал

Моя активность в теме вызвана тем, что у меня тоже была такого рода зараза. Причём файл невозможно было найти обычными способами, но Total Commander видел этот файл среди прочих в директории Windows\Sytem32. При помощи ProcessXp я находил кто держит этот файл и убивал эти процессы. Затем просто удалил этот файл... Сам теперь жалею...

Автор: Romikgy 1.9.2006, 13:06
Цитата(dumb @  1.9.2006,  11:57 Найти цитируемый пост)
ollydbg

что это?

Автор: dumb 1.9.2006, 13:10
Цитата(Romikgy @  1.9.2006,  13:06 Найти цитируемый пост)
что это? 

http://ollydbg.de/

Автор: Romikgy 1.9.2006, 13:11
Цитата(Yanis @  1.9.2006,  12:06 Найти цитируемый пост)
но Total Commander видел этот файл среди прочих в директории Windows\Sytem32

не видит
Цитата(Yanis @  1.9.2006,  12:06 Найти цитируемый пост)
Сам теперь жалею... 

что поделится , у мя есть дамп этой либы

Автор: Romikgy 1.9.2006, 13:27
Цитата(dumb @  1.9.2006,  11:57 Найти цитируемый пост)
hiew32

скачал говорит
Код

;
;       Hiew release VII files list
;

      FILES.LST - This file !
    LICENSE.TXT - License Information
   REGISTER.TXT - Registration info
    FILE_ID.DIZ - General info

      CAH32.EXE - Program for unlocking *.$$$ into *.EXE
     HIEW32.$$$ - Locked Hiew

    EDUMP32.EXE - Dump for NE/LE/LX/PE/ELF files 
    LDUMP32.EXE - Dump for OMF/COFF libraries
    DEXEM32.EXE - Manipulator for dual executables 

      HIEW7.INI - INI file
      HIEW7.HLP - Help file (press F1 to view)
      HIEW7.ORD - Ordinal names
       HIEW.VMM - VMM/VxD call names for LE modules
       HIEW.XLT - Translation tables
    HIEW_RU.TXT - Russian README
    HIEW_EN.TXT - English README
        SEN.ASC - Public PGP key

             *******


а как распаковать?

Автор: Yanis 1.9.2006, 13:38
Цитата(Romikgy @  1.9.2006,  14:11 Найти цитируемый пост)
что поделится , у мя есть дамп этой либы 

Не не надо smile Да к том же его трудно завтавить работать.

Автор: BUGOR 1.9.2006, 14:14
Romikgy, зачем тебе хью я не понимаю... я же написал как с помощью LordPE узнать оригинальные байты на EntryPoint функции... 
http://wasm.ru/baixado.php?mode=tool&id=44

Автор: Romikgy 1.9.2006, 15:28
Yanis, сильно хочешь я те позже достану саму dll smile

Добавлено @ 15:40 
BUGOR, ниче понять не могу вот то что дал 
Цитата(BUGOR @  1.9.2006,  13:14 Найти цитируемый пост)
LordPE

Код

->Import Table
   1. ImageImportDescriptor:
    OriginalFirstThunk:  0x00018772
    TimeDateStamp:       0xFFFFFFFF
    ForwarderChain:      0xFFFFFFFF
    Name:                0x00018726  ("ADVAPI32.DLL")
    FirstThunk:          0x00001000

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x0184       "RegCloseKey"
    0x019E       "RegOpenKeyExW"
    0x018C       "RegDeleteKeyW"
    0x0192       "RegEnumKeyExW"
    0x01B3       "RegSetValueExW"
    0x018A       "RegCreateKeyW"
    0x01A9       "RegQueryValueW"
    0x0195       "RegEnumValueW"
    0x01A8       "RegQueryValueExW"
    0x00F4       "GetUserNameW"
    0x0193       "RegEnumKeyW"
    0x019F       "RegOpenKeyW"
    0x018E       "RegDeleteValueW"
    0x01A3       "RegQueryInfoKeyW"
    0x0189       "RegCreateKeyExW"
    0x00E9       "GetTokenInformation"
    0x0167       "OpenProcessToken"
    0x016F       "PrivilegeCheck"
    0x016C       "OpenThreadToken"
    0x0119       "LookupPrivilegeValueW"
    0x01A7       "RegQueryValueExA"
    0x019D       "RegOpenKeyExA"

   2. ImageImportDescriptor:
    OriginalFirstThunk:  0x000187CE
    TimeDateStamp:       0xFFFFFFFF
    ForwarderChain:      0xFFFFFFFF
    Name:                0x00018734  ("KERNEL32.DLL")
    FirstThunk:          0x0000105C

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x0163       "GetQueuedCompletionStatus"
    0x02CC       "TerminateThread"
    0x02CB       "TerminateProcess"
    0x003D       "CreateIoCompletionPort"
    0x0254       "ResumeThread"
    0x008C       "ExitProcess"
    0x0289       "SetCurrentDirectoryW"
    0x0290       "SetEvent"
    0x0150       "GetPrivateProfileStringW"
    0x0188       "GetTimeFormatW"
    0x0131       "GetLocaleInfoW"
    0x010E       "GetDateFormatW"
    0x00DB       "GetCommandLineW"
    0x0109       "GetCurrentProcess"
    0x0190       "GetVersionExW"
    0x0209       "OpenEventW"
    0x01CD       "IsBadCodePtr"
    0x0198       "GetWindowsDirectoryW"
    0x032C       "lstrcmpiA"
    0x0043       "CreateMutexW"
    0x01C5       "InitializeCriticalSection"
    0x0257       "RtlUnwind"
    0x012F       "GetLocalTime"
    0x019C       "GlobalAlloc"
    0x004D       "CreateThread"
    0x02FD       "WaitForSingleObject"
    0x032A       "lstrcmpW"
    0x01A3       "GlobalFree"
    0x00BF       "FormatMessageW"
    0x01C9       "InterlockedExchange"
    0x029C       "SetLastError"
    0x012D       "GetLastError"
    0x0048       "CreateProcessW"
    0x010C       "GetCurrentThreadId"
    0x011D       "GetEnvironmentVariableW"
    0x010A       "GetCurrentProcessId"
    0x0035       "CreateEventW"
    0x028F       "SetErrorMode"
    0x0139       "GetModuleFileNameW"
    0x0166       "GetStartupInfoA"
    0x01FE       "MoveFileW"
    0x01DF       "LoadLibraryA"
    0x0230       "RaiseException"
    0x018A       "GetUserDefaultLCID"
    0x01D0       "IsBadReadPtr"
    0x013A       "GetModuleHandleA"
    0x01E2       "LoadLibraryW"
    0x0153       "GetProcAddress"
    0x00A6       "FindFirstFileW"
    0x0333       "lstrcpynW"
    0x00AD       "FindNextFileW"
    0x009F       "FindClose"
    0x0123       "GetFileAttributesW"
    0x01A5       "GlobalGetAtomNameW"
    0x001E       "CloseHandle"
    0x006F       "EnterCriticalSection"
    0x01DE       "LeaveCriticalSection"
    0x0182       "GetThreadPriority"
    0x0186       "GetTickCount"
    0x0327       "lstrcatW"
    0x010B       "GetCurrentThread"
    0x02B4       "SetThreadPriority"
    0x018B       "GetUserDefaultLangID"
    0x032D       "lstrcmpiW"
    0x02C3       "Sleep"
    0x0202       "MultiByteToWideChar"
    0x018F       "GetVersionExA"
    0x0171       "GetSystemDirectoryW"
    0x0336       "lstrlenW"
    0x013B       "GetModuleHandleW"
    0x01E9       "LocalFree"
    0x01E5       "LocalAlloc"
    0x0330       "lstrcpyW"
    0x0249       "ReleaseMutex"
    0x016D       "GetSystemDefaultLCID"
    0x00C3       "FreeLibrary"
    0x02A6       "SetProcessShutdownParameters"
    0x0162       "GetProfileStringW"

   3. ImageImportDescriptor:
    OriginalFirstThunk:  0x0001890A
    TimeDateStamp:       0xFFFFFFFF
    ForwarderChain:      0xFFFFFFFF
    Name:                0x00018742  ("GDI32.DLL")
    FirstThunk:          0x00001198

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x020E       "TranslateCharsetInfo"
    0x01FA       "SetTextColor"
    0x012D       "GetDeviceCaps"
    0x004A       "CreateRectRgnIndirect"
    0x017A       "GetTextExtentPointW"
    0x0159       "GetObjectW"
    0x0012       "BitBlt"
    0x01D4       "SetBkColor"
    0x00A3       "ExtTextOutW"
    0x003B       "CreateFontIndirectW"
    0x0122       "GetClipBox"
    0x0129       "GetDCOrgEx"
    0x0054       "DeleteObject"
    0x002B       "CreateCompatibleDC"
    0x002A       "CreateCompatibleBitmap"
    0x01CE       "SelectObject"
    0x0051       "DeleteDC"
    0x0167       "GetStockObject"

   4. ImageImportDescriptor:
    OriginalFirstThunk:  0x00018956
    TimeDateStamp:       0xFFFFFFFF
    ForwarderChain:      0xFFFFFFFF
    Name:                0x0001874C  ("USER32.DLL")
    FirstThunk:          0x000011E4

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x01E7       "PostThreadMessageW"
    0x00BD       "EndPaint"
    0x00A7       "DrawEdge"
    0x000C       "BeginPaint"
    0x00D5       "ExitWindowsEx"
    0x01CA       "ModifyMenuW"
    0x023C       "SetMenuDefaultItem"
    0x0089       "DeleteMenu"
    0x003B       "ClientToScreen"
    0x01A3       "LoadIconW"
    0x020A       "RemovePropW"
    0x0248       "SetPropW"
    0x00DA       "FindWindowW"
    0x01CF       "MsgWaitForMultipleObjects"
    0x0008       "AppendMenuW"
    0x0059       "CreatePopupMenu"
    0x0123       "GetMenuDefaultItem"
    0x017A       "InsertMenuItemW"
    0x0293       "UnregisterHotKey"
    0x01FE       "RegisterHotKey"
    0x0264       "SetWindowTextW"
    0x022C       "SetCursorPos"
    0x00A8       "DrawFocusRect"
    0x00CA       "EnumDisplaySettingsW"
    0x00F1       "GetClassNameW"
    0x01E0       "PaintDesktop"
    0x0291       "UnregisterClassW"
    0x0027       "CharNextW"
    0x0144       "GetShellWindow"
    0x01C8       "MessageBoxW"
    0x0031       "CharUpperBuffW"
    0x0240       "SetMenuItemInfoW"
    0x0275       "SwitchToThisWindow"
    0x018F       "IsHungAppWindow"
    0x017C       "InternalGetWindowText"
    0x00BE       "EndTask"
    0x00A6       "DrawCaptionTempW"
    0x01C2       "MessageBeep"
    0x00DF       "GetActiveWindow"
    0x01E5       "PostQuitMessage"
    0x0191       "IsMenu"
    0x0128       "GetMenuItemInfoW"
    0x00D2       "EnumWindows"
    0x0261       "SetWindowRgn"
    0x01CE       "MoveWindow"
    0x021C       "SendMessageTimeoutW"
    0x0214       "SendDlgItemMessageW"
    0x018E       "IsDlgButtonChecked"
    0x0033       "CheckDlgButton"
    0x0002       "AdjustWindowRectEx"
    0x0272       "SubtractRect"
    0x0220       "SetActiveWindow"
    0x02B4       "wsprintfW"
    0x0285       "TranslateAcceleratorW"
    0x0287       "TranslateMessage"
    0x0098       "DispatchMessageW"
    0x02AB       "WaitMessage"
    0x019B       "LoadAcceleratorsW"
    0x019D       "LoadBitmapW"
    0x021F       "SendNotifyMessageW"
    0x025F       "SetWindowPlacement"
    0x0017       "CallWindowProcW"
    0x0104       "GetDlgCtrlID"
    0x0221       "SetCapture"
    0x0045       "CopyRect"
    0x01A5       "LoadImageW"
    0x008E       "DestroyIcon"
    0x01AD       "LoadMenuW"
    0x0145       "GetSubMenu"
    0x0208       "RemoveMenu"
    0x01F9       "RegisterClassW"
    0x0189       "IsChild"
    0x0197       "IsZoomed"
    0x0126       "GetMenuItemID"
    0x010A       "GetFocus"
    0x0146       "GetSysColor"
    0x028C       "UnionRect"
    0x00D3       "EqualRect"
    0x0166       "GetWindowThreadProcessId"
    0x0175       "InflateRect"
    0x01F5       "RedrawWindow"
    0x00F3       "GetClientRect"
    0x01E2       "PeekMessageW"
    0x01BE       "MapWindowPoints"
    0x024C       "SetScrollPos"
    0x0205       "RegisterWindowMessageW"
    0x00BF       "EnumChildWindows"
    0x017B       "InsertMenuW"
    0x0156       "GetWindow"
    0x00B7       "EnableMenuItem"
    0x0234       "SetForegroundWindow"
    0x0281       "TrackPopupMenu"
    0x00EC       "GetClassInfoExW"
    0x0087       "DefWindowProcW"
    0x01F8       "RegisterClassExW"
    0x005B       "CreateWindowExW"
    0x0199       "KillTimer"
    0x011C       "GetLastActivePopup"
    0x0196       "IsWindowVisible"
    0x0192       "IsRectEmpty"
    0x024B       "SetScrollInfo"
    0x0141       "GetScrollInfo"
    0x0193       "IsWindow"
    0x01D7       "OffsetRect"
    0x017D       "IntersectRect"
    0x0276       "SystemParametersInfoA"
    0x0190       "IsIconic"
    0x015F       "GetWindowPlacement"
    0x0149       "GetSystemMetrics"
    0x01B0       "LoadStringW"
    0x024A       "SetRectEmpty"
    0x01EE       "PtInRect"
    0x0257       "SetTimer"
    0x0260       "SetWindowPos"
    0x0160       "GetWindowRect"
    0x0249       "SetRect"
    0x0090       "DestroyWindow"
    0x017E       "InvalidateRect"
    0x0296       "UpdateWindow"
    0x0100       "GetDC"
    0x026F       "ShowWindow"
    0x0207       "ReleaseDC"
    0x015B       "GetWindowLongW"
    0x01A1       "LoadCursorW"
    0x022A       "SetCursor"
    0x0138       "GetParent"
    0x0233       "SetFocus"
    0x00FF       "GetCursorPos"
    0x02B0       "WindowFromPoint"
    0x020E       "ScreenToClient"
    0x00E6       "GetAsyncKeyState"
    0x00BB       "EndDialog"
    0x025E       "SetWindowLongW"
    0x021D       "SendMessageW"
    0x0105       "GetDlgItem"
    0x00B9       "EnableWindow"
    0x0025       "CharNextA"
    0x015A       "GetWindowLongA"
    0x012F       "GetMessagePos"
    0x0270       "ShowWindowAsync"
    0x010B       "GetForegroundWindow"
    0x012A       "GetMenuState"
    0x0282       "TrackPopupMenuEx"
    0x008F       "DestroyMenu"
    0x0277       "SystemParametersInfoW"
    0x0102       "GetDesktopWindow"
    0x0019       "CascadeWindows"
    0x027B       "TileWindows"
    0x01E4       "PostMessageW"
    0x021A       "SendMessageCallbackW"
    0x0148       "GetSystemMenu"
    0x0125       "GetMenuItemCount"
    0x0115       "GetKeyState"
    0x0194       "IsWindowEnabled"

   5. ImageImportDescriptor:
    OriginalFirstThunk:  0x00018BC2
    TimeDateStamp:       0xFFFFFFFF
    ForwarderChain:      0xFFFFFFFF
    Name:                0x00018758  ("SHLWAPI.DLL")
    FirstThunk:          0x00001450

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x01D3
    0x00A9
    0x002A       "PathFindFileNameW"
    0x005E
    0x001C       "PathCombineW"
    0x00EC
    0x00B1       "SHRegGetUSValueW"
    0x00F1
    0x00F4
    0x0164
    0x00F5       "StrStrIW"
    0x0062       "PathRemoveArgsW"
    0x0066       "PathRemoveBlanksW"
    0x00D3       "StrCmpNIW"
    0x008A       "SHDeleteKeyW"
    0x01CC
    0x00F6       "StrStrW"
    0x0032       "PathGetArgsW"
    0x007E       "PathUnquoteSpacesW"
    0x00D7       "StrCpyW"
    0x00A4
    0x00A5
    0x0118       "wnsprintfW"
    0x00CC
    0x00FA       "StrToIntW"
    0x0104
    0x0016       "PathAppendW"
    0x000A
    0x0036       "PathGetDriveNumberW"
    0x0026       "PathFileExistsW"
    0x0076       "PathStripToRootW"
    0x00CF       "StrChrW"
    0x006A       "PathRemoveFileSpecW"
    0x00CA       "StrCatBuffW"
    0x0124
    0x003C       "PathIsDirectoryW"
    0x0028       "PathFindExtensionW"
    0x0008
    0x0009
    0x0117
    0x00AD       "SHRegGetBoolUSValueW"
    0x00BB       "SHRegSetUSValueW"
    0x00AE
    0x00AC
    0x01B5
    0x00C1       "SHSetValueW"
    0x0096       "SHGetValueW"
    0x0010
    0x019D
    0x00D0       "StrCmpIW"
    0x0099       "SHOpenRegStream2W"
    0x015A
    0x01B1

   6. ImageImportDescriptor:
    OriginalFirstThunk:  0x00018C9A
    TimeDateStamp:       0xFFFFFFFF
    ForwarderChain:      0xFFFFFFFF
    Name:                0x00018764  ("COMCTL32.DLL")
    FirstThunk:          0x00001528

    Ordinal/Hint API name
    ------------ ---------------------------------------
    0x0141
    0x0144
    0x0142
    0x0140
    0x0145
    0x014C
    0x0003       "CreatePropertySheetPageW"
    0x0183
    0x0150
    0x014E
    0x0148
    0x004E       "PropertySheetW"
    0x0147
    0x0146
    0x003A       "ImageList_Remove"
    0x0023       "ImageList_Destroy"
    0x003C       "ImageList_ReplaceIcon"
    0x0030       "ImageList_GetIcon"
    0x0032       "ImageList_GetImageCount"
    0x003D       "ImageList_SetBkColor"
    0x0022       "ImageList_Create"
    0x0031       "ImageList_GetIconSize"
    0x0151
    0x0181
    0x019D
    0x019A
    0x0182
    0x019C
    0x0046       "InitCommonControlsEx"
    0x0143
    0x0149

из нормально эксплорера, где здесь точка входа/адрес

Автор: BUGOR 1.9.2006, 16:03
Запускаешь делфи вписываешь туда одну строку кода:
Код

ShowMessage(IntToHex(dword(GetProcAddress(GetModuleHandle('kernel32.dll'), 'FindFirstFileA')),8));


Вместо FindFirstFileA имя любой апи, ну ессно той, что перехватывается в данном случае.
Вылазит сообщение с адресом этой функции. Запоминаем его. У меня вылезло вот что:
---------------------------
Project1
---------------------------
77E7A10D
---------------------------
OK   
---------------------------


Открываем LordPE и жмём PE Editor, выбираем kernel32.dll, далее в появившемся окошке жмём кнопку "FLC", в поле VA вводим то, что нам выдал ShowMessage, нажимаем DO и внизу в окошечке лицезреем оригинальные байты на точке входа функции:
http://img106.imageshack.us/img106/5263/scrqs5.jpg

Автор: Romikgy 1.9.2006, 16:29
пнятно сиба

Автор: Girder 1.9.2006, 22:06

M
Girder
Прекращаем оффтоп!

Автор: RideX 3.9.2006, 21:13
Посмотреть экспортируемую функцию любого загруженного модуля можно без лишних извратов и левых тулз, а только средствами Delphi, например, так:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  hModule: THandle;
  arr: array[1..32] of byte;
  buff: String;
  i: integer;
begin
  hModule := GetModuleHandle('user32.dll');
  CopyMemory(@arr, GetProcAddress(hModule, 'MessageBoxA'), SizeOf(arr));
  for i := 1 to SizeOf(arr) do
    buff := buff + IntToHex(arr[i], 2) + ' ';

  Memo1.Lines.Append(buff);
end;


Или через родной дизассемблер Delphi путём вызова интересующей ф-ции, например:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
  MessageBoxA(0, 'lpText', 'lpCaption', MB_ICONINFORMATION);
end;


Поставив breakpoint и остановившись на нём, жмём Ctr+Alt+C, чтобы попасть в окно CPU встроенного отладчика:
Код

Unit1.pas.28: MessageBoxA(0, 'lpText', 'lpCaption', MB_ICONINFORMATION);
0044E1D4 6A40            push $40
0044E1D6 68E8E14400      push $0044e1e8
0044E1DB 68F4E14400      push $0044e1f4
0044E1E0 6A00            push $00
0044E1E2 E85587FBFF      call MessageBoxA
Unit1.pas.29: end;


Далее просто трассируем по F7, пока не попадем в системную библиотеку:
Код

USER32.MessageBoxA:
77D7050B 8BFF            mov edi,edi
77D7050D 55              push ebp
77D7050E 8BEC            mov ebp,esp
77D70510 833D1C04D97700  cmp dword ptr [$77d9041c],$00

Автор: dumb 4.9.2006, 09:41
Цитата(RideX @  3.9.2006,  21:13 Найти цитируемый пост)
Посмотреть экспортируемую функцию любого загруженного модуля можно без лишних извратов и левых тулз, а только средствами Delphi

"без лишних извратов и левых тулз" ты увидишь уже похуканный код. "левые тулзы" же показывают оригинальный код.

Автор: Romikgy 4.9.2006, 14:23
Все избавился , от этого зверя , с танцами и бубнами, 
и в безопасном режиме + коммандная строка, удалось залезть в реестр и все поправить smile
Тема закрыта smile Всем еще раз сенкс smile

Автор: RideX 4.9.2006, 22:42
Цитата(dumb @  4.9.2006,  12:41 Найти цитируемый пост)
"без лишних извратов и левых тулз" ты увидишь уже похуканный код. "левые тулзы" же показывают оригинальный код.

Ты ошибаешься, я увижу то, что захочу увидеть smile , запишу в любой процесс, в т.ч. системный (не говоря уже о DLL) то что захочу, и, как я уже раньше говорил, "без лишних извратов и левых тулз". Просто вообще-то это форум по программированию в Delphi, а не по реверсу, так что хью, петулз и лордпе вроде здесь как не к месту. Ну, и чтобы не оффтоп, в заключении приведу небольшой примерчик только на чтение ф-ции из памяти и соответствующую ей из файла с диска:
Код

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.ReadOnly   := True;
  Memo1.WordWrap   := False;
  Memo1.ScrollBars := ssBoth;
  Memo1.Font.Name  := 'Courier New';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  hModule         : THandle;
  pProcAddr       : Pointer;
  szProcName      : PChar;
  szFileName      : array[0..MAX_PATH + 1] of Char;

  pDOSHeader      : PImageDosHeader;
  pFileHeader     : PImageFileHeader;
  pNtHeader       : PImageNtHeaders;
  pOptionalHeader : PImageOptionalHeader;
  pSECTHeader     : PImageSectionHeader;

  hFile, hFileMap : THandle;
  pFileMap        : Pointer;
  RVA, FileOffset : DWORD;
  buff            : String;
  arr             : array[0..15] of byte;
  i               : integer;
begin
  szProcName := 'MessageBoxA';
  hModule   := GetModuleHandle('user32.dll');
  GetModuleFileName(hModule, @szFileName, MAX_PATH);
  pProcAddr := GetProcAddress(hModule, szProcName);
  RVA := DWORD(pProcAddr) - hModule;

  hFile := CreateFileA(szFileName, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
            nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if hFile = INVALID_HANDLE_VALUE then
    Exit;

  hFileMap := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil);
  pFileMap := MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);

  pDOSHeader := PImageDosHeader(pFileMap);
  pNtHeader := Pointer(DWORD(pDOSHeader) + DWORD(pDOSHeader._lfanew));
  pFileHeader := @pNtHeader.FileHeader;
  pOptionalHeader := @pNtHeader.OptionalHeader;

  pSECTHeader :=  PImageSectionHeader(DWORD(pNtHeader) + SizeOf(TImageNtHeaders));

  for i := 1 to pNtHeader.FileHeader.NumberOfSections do begin
    if RVA > pSECTHeader.VirtualAddress + pSECTHeader.Misc.VirtualSize then
      Inc(pSECTHeader);
  end;

  FileOffset := RVA - pSECTHeader.VirtualAddress + pSECTHeader.PointerToRawData;

  with Memo1.Lines do begin
    Append(szFileName);
    Append('--');
    Append('ImageBase:           ' + IntToHex(pOptionalHeader.ImageBase, 8));
    Append('AddressOfEntryPoint: ' + IntToHex(pOptionalHeader.AddressOfEntryPoint, 8));
    Append('NumberOfSections:    ' + IntToHex(pNtHeader.FileHeader.NumberOfSections, 8));
    Append('--');
    Append('ProcName:            ' + szProcName);
    Append('ProcAddress:         ' + IntToHex(DWORD(pProcAddr), 8));
    Append('RelativeAddress:     ' + IntToHex(RVA, 8));
    Append('FileOffset:          ' + IntToHex(FileOffset, 8));
    Append('--');
    Append('Section name:        ' + PChar(@pSECTHeader.Name));
    Append('VirtualAddress:      ' + IntToHex(pSECTHeader.VirtualAddress, 8));
    Append('PointerToRawData:    ' + IntToHex(pSECTHeader.PointerToRawData, 8));
    Append('VirtualSize:         ' + IntToHex(pSECTHeader.Misc.VirtualSize, 8));
    Append('--');
    Append('Entry of function: memory vs file');
  end;

  CopyMemory(@arr, pProcAddr, SizeOf(arr));
  for i := 0 to SizeOf(arr) - 1 do
    buff := buff + IntToHex(arr[i], 2) + ' ';
  Memo1.Lines.Append(buff);

  buff := '';
  CopyMemory(@arr, Pointer(DWORD(pFileMap) + FileOffset), SizeOf(arr));
  for i := 0 to SizeOf(arr) - 1 do
    buff := buff + IntToHex(arr[i], 2) + ' ';
  Memo1.Lines.Append(buff);

  UnmapViewOfFile(pFileMap);
  CloseHandle(hFileMap);
  CloseHandle(hFile);
end;

end.


Понятно что всё можно автоматизировать и усовершенствовать, это для наглядности, выведет информацию в таком виде:
Код

C:\WINDOWS\system32\user32.dll
--
ImageBase:           77D30000
AddressOfEntryPoint: 00010EB9
NumberOfSections:    00000004
--
ProcName:            MessageBoxA
ProcAddress:         77D7050B
RelativeAddress:     0004050B
FileOffset:          0003F90B
--
Section name:        .text
VirtualAddress:      00001000
PointerToRawData:    00000400
VirtualSize:         0005EDA7
--
Entry of function: memory vs file
8B FF 55 8B EC 83 3D 1C 04 D9 77 00 74 24 64 A1 
8B FF 55 8B EC 83 3D 1C 04 D9 77 00 74 24 64 A1 


Автор: Romikgy 4.9.2006, 23:00
RideX, а в чужом процессе можно ли как то поменять адресса вызовов ф-ций?

Автор: RideX 4.9.2006, 23:28
Цитата(Romikgy @  5.9.2006,  02:00 Найти цитируемый пост)
в чужом процессе можно ли как то поменять адресса вызовов ф-ций?

Вызов одной API заменить на другую? В принципе можно изменить абсолютно всё, даже константы (пример кода недавно давал),  только делать это нужно внимательно, так при подмене API функции не забывать передавать ей "новые", правильные параметры, помнить о типе возвращаемого значения, если оно используется, следить чтобы код "не поломался", т.е. чтобы, например, "старая", но нужная инструкция процессора не "разорвалась".

Автор: Romikgy 5.9.2006, 00:10
это понятно , я имел ввиду, есть хукнутая ф-ция, как мне взяв ее реальный адресс из файла , и поменять на реальный , а не хукнутый? допустим в regedit

Автор: dumb 5.9.2006, 00:44
RideX,
- можно взять клещи или гвоздодер и выдернуть гвоздь.
- изврат, левые тулзы! можно взять микроскоп и в лучшем виде рассмотреть гвоздь!
- пардон, но...
- вы ошибаетесь! возму вот микроскоп, скую мини-девайс для извлечения гвоздей. и вообще, я все могу.

Цитата(Romikgy @  31.8.2006,  11:18 Найти цитируемый пост)
как мне программно (самому написать) или другим ПО, избавится от этой dll ?

время, потраченное на анализ такого рода ситуации с помощью подручных средств, отличается от времени, потраченного на разработку какого-либо своего средства, на порядки. а если сдампить захочу по ходу, подебажить, пофиксить? smile

а сэмпл добротный.

Автор: dumb 5.9.2006, 04:44
Цитата(Romikgy @  5.9.2006,  00:10 Найти цитируемый пост)
есть хукнутая ф-ция, как мне взяв ее реальный адресс из файла , и поменять на реальный , а не хукнутый? допустим в regedit 

в данном случае отличаются не адреса(Romikgy - реальный программер! только почему тогда с одной "д"? ;)) а содержимое функций: в начало "правильной" функции вписывается переход на "подставную". т.е. чтобы убрать хук, достаточно заменить код перехода на считанные из файла оригинальные байтики. так как адресные пространства процессов изолированы, сие действо нужно совершать "изнутри" каждого процесса. проще всего, наверное, будет поставить глобальный хук(например WH_CBT) и реализовать код "восстановления" в dll нашего хука. к тому же получаем бонус в виде возможности довольно часто проверять наши восстановленные функции(лучше после CallNextHookEx, на случай если "зараза" тоже восстанавливается при вызове WH_CBT).

кстати, если уж так залезли в эту тему, интересно - как именно реализована подгрузка у этой "заразы". просто есть подозрение, что в режиме командной строки регедит остался бы нетронутым...

Автор: Romikgy 5.9.2006, 10:31
Цитата(dumb @  5.9.2006,  03:44 Найти цитируемый пост)
в данном случае отличаются не адреса

Я имел ввиду адреса прыжков на ф-ции

Автор: dumb 5.9.2006, 11:45
Romikgy, пример:
было:
Код

somefunc:
8BFF                         mov         edi,edi
55                           push        ebp
8BEC                         mov         ebp,esp
83EC18                       sub         esp,018


стало:
Код

somefunc:
E978563412                   jmp         012345678
83EC18                       sub         esp,018


тут не нужно менять адрес перехода(jmp), надо сам переход заменять на то, что было.

Автор: RideX 5.9.2006, 12:07
Цитата(Romikgy @  5.9.2006,  03:10 Найти цитируемый пост)
есть хукнутая ф-ция, как мне взяв ее реальный адресс из файла , и поменять на реальный , а не хукнутый? допустим в regedit
 В самом .ехе у тебя вообще ничего не изменяется. Все изменения только в загруженой в память DLL, но адреса функций, как уже сказал dumb, всё равно не изменяются, они так и остаются "реальными". Изменяется само содержимое ф-ции, вот его ты и можешь взять из файла и сравнить с тем, что в памяти. Как найти и рассчитать внутрифайловое смещение функции - в коде выше. Чтобы записать код из файла в системную DLL, возьми для своего процесса привилегии отладчика (SeDebugPrivilege) чтобы открыть процесс на запись. После WriteProcessMemory проверяй на GetLastError и в случае необходимости поставь доступ к странице памяти PAGE_EXECUTE_READWRITE, потом вернёшь обратно.


Цитата(dumb @  5.9.2006,  03:44 Найти цитируемый пост)
возму вот микроскоп, скую мини-девайс
 Всё, сдаюсь!  smile 

Цитата(dumb @  5.9.2006,  07:44 Найти цитируемый пост)
как именно реализована подгрузка у этой "заразы". просто есть подозрение, что в режиме командной строки регедит остался бы нетронутым

Да, возможно, скорее всего ловит процесс через создание окна, хуком на HSHELL_WINDOWCREATED, и в реализации не сложно.

dumb, не видел что ты только что уже написал  smile 

Автор: Romikgy 5.9.2006, 13:10
Цитата(dumb @  5.9.2006,  10:45 Найти цитируемый пост)
было:
Выделить всёкод Ассемблера
somefunc:
E978563412                   jmp         012345678
83EC18                       sub         esp,018

это после хука такое?

Автор: RideX 5.9.2006, 16:16
Цитата(Romikgy @  5.9.2006,  16:10 Найти цитируемый пост)
это после хука такое?

Да, именно, хотя возможен вариант с push/ret
Код

push xxxxxxxx
ret


Вот, к примеру, похуканый MessageBox может выглядеть так:
Код

C:\WINDOWS\system32\user32.dll
--
ImageBase:           77D30000
AddressOfEntryPoint: 00010EB9
NumberOfSections:    00000004
--
ProcName:            MessageBoxExA
ProcAddress:         77D7057D
RelativeAddress:     0004057D
FileOffset:          0003F97D
--
Section name:        .text
VirtualAddress:      00001000
PointerToRawData:    00000400
VirtualSize:         0005EDA7
--
Entry of function: memory vs file
68 BC 36 B1 00 C3 FF FF 75 18 FF 75 14 FF 75 10
8B FF 55 8B EC 6A FF FF 75 18 FF 75 14 FF 75 10


Как видишь первые шесть байт кода в памяти, отличаются от того что в файле, т.е. ,без дизассемблера понятно, что фактически в памяти имеем переход "куда-то там..." по адресу 00B136BCh
Код

68 BC36B100 push 00B136BC
C3          ret


P.S. Вообще чтобы не перекомпилить каждый раз код, который я приводил, кинь на форму два TEdit, один для имени DLL, второй для имени ф-ции, конечно если ты уже не сделал TMemo/TStringList с целым списком функций для проверки smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)