OutputDebugString

eXeL@B DVD

Материал из Справочник исследователя программ

Перейти к: навигация, поиск

Функция OutputDebugString отправляет символьную строку отладчику программы для вывода на экран. Эта функция активно используется протектором Armadillo, для предотвращения отладки программы. В качестве параметра lpOutputString посылается строка вида %s%s%s%s...,после чтения которой отладчик OllyDbg "падает"

void OutputDebugString(
  LPCTSTR lpOutputString
);


Содержание

Параметры

lpOutputString
[in] Указатель на символьную строку с нулем в конце, которая появится на экране.

Возвращаемое значение

Эта функция не возвращает значение.

Внутреннее устройство

7C85AD4C >  68 34020000     PUSH 234
7C85AD51    68 78B0857C     PUSH 7C85B078
7C85AD56    E8 7B77FAFF     CALL 7C8024D6
7C85AD5B    A1 CC56887C     MOV EAX,DWORD PTR DS:[7C8856CC]
7C85AD60    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX
7C85AD63    8B4D 08         MOV ECX,DWORD PTR SS:[EBP+8]
7C85AD66    898D C4FDFFFF   MOV DWORD PTR SS:[EBP-23C],ECX
7C85AD6C    8365 FC 00      AND DWORD PTR SS:[EBP-4],0
7C85AD70    8BC1            MOV EAX,ECX
7C85AD72    8D70 01         LEA ESI,DWORD PTR DS:[EAX+1]
7C85AD75    8A10            MOV DL,BYTE PTR DS:[EAX]
7C85AD77    40              INC EAX
7C85AD78    84D2            TEST DL,DL
7C85AD7A  ^ 75 F9           JNZ SHORT 7C85AD75
7C85AD7C    2BC6            SUB EAX,ESI
7C85AD7E    40              INC EAX
7C85AD7F    8985 BCFDFFFF   MOV DWORD PTR SS:[EBP-244],EAX
7C85AD85    898D C0FDFFFF   MOV DWORD PTR SS:[EBP-240],ECX
7C85AD8B    8D85 BCFDFFFF   LEA EAX,DWORD PTR SS:[EBP-244]
7C85AD91    50              PUSH EAX
7C85AD92    6A 02           PUSH 2
7C85AD94    6A 00           PUSH 0
7C85AD96    68 06000140     PUSH 40010006
7C85AD9B    E8 097DFBFF     CALL RaiseException
7C85ADA0    E9 52020000     JMP 7C85AFF7
7C85ADA5    90              NOP
7C85ADA6    90              NOP
7C85ADA7    90              NOP
7C85ADA8    90              NOP
7C85ADA9    90              NOP
7C85ADAA    33C0            XOR EAX,EAX
7C85ADAC    40              INC EAX
7C85ADAD    C3              RETN

Требования

Клиент            Требуется Windows Vista, XP, 2000,NT Workstation,Windows Me,Windows 98
Сервер            Требуется Windows Server "Longhorn", 2003, 2000 Server, Windows NT Server.
Заголовок         Объявлен in Winbase.h; включает Windows.h.
Библиотека        Использует Kernel32.lib.
DLL               Требуется Kernel32.dll.

Примечание

Если у приложения нет отладчика, системный отладчик показывает на экране символьную строку. Если приложение не имеет отладчика, а системный отладчик не активен, функция OutputDebugString ничего не делает.

Примеры

Delphi

procedure TForm1.SendStringClick(Sender: TObject);
begin
 OutputDebugString('%s%s%s%s...');
end;

C и C++

Visual Basic

Патч

7C85AD4C >  68 34020000     PUSH 234
7C85AD51    68 78B0857C     PUSH 7C85B078
7C85AD56    E8 7B77FAFF     CALL 7C8024D6
7C85AD5B    A1 CC56887C     MOV EAX,DWORD PTR DS:[7C8856CC]
7C85AD60    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX
7C85AD63    8B4D 08         MOV ECX,DWORD PTR SS:[EBP+8]
7C85AD66    898D C4FDFFFF   MOV DWORD PTR SS:[EBP-23C],ECX
7C85AD6C    8365 FC 00      AND DWORD PTR SS:[EBP-4],0
7C85AD70    8BC1            MOV EAX,ECX
7C85AD72    8D70 01         LEA ESI,DWORD PTR DS:[EAX+1]
7C85AD75    8A10            MOV DL,BYTE PTR DS:[EAX]
7C85AD77    40              INC EAX
7C85AD78    84D2            TEST DL,DL
7C85AD7A  ^ 75 F9           JNZ SHORT 7C85AD75
7C85AD7C    2BC6            SUB EAX,ESI
7C85AD7E    40              INC EAX
7C85AD7F    8985 BCFDFFFF   MOV DWORD PTR SS:[EBP-244],EAX
7C85AD85    898D C0FDFFFF   MOV DWORD PTR SS:[EBP-240],ECX
7C85AD8B    8D85 BCFDFFFF   LEA EAX,DWORD PTR SS:[EBP-244]
7C85AD91    50              PUSH EAX
7C85AD92    6A 02           PUSH 2
7C85AD94    6A 00           PUSH 0
7C85AD96    68 06000140     PUSH 40010006
7C85AD9B    E8 097DFBFF     CALL RaiseException
7C85ADA0    E9 52020000     JMP 7C85AFF7
7C85ADA5    90              NOP
7C85ADA6    90              NOP
7C85ADA7    90              NOP
7C85ADA8    90              NOP
7C85ADA9    90              NOP
7C85ADAA    33C0            XOR EAX,EAX
7C85ADAC    40              INC EAX
7C85ADAD    C3              RETN

Меняем параметр хранящийся в ECX:

0016DF18  25 73 25 73 25 73 25 73  %s%s%s%s
0016DF20  2E 2E 2E 00 AB AB AB AB  ....««««
0016DF28  AB AB AB AB EE FE EE FE  ««««оюою

например на:

0016DF18  00 73 25 73 25 73 25 73  .s%s%s%s
0016DF20  2E 2E 2E 00 AB AB AB AB  ....««««
0016DF28  AB AB AB AB EE FE EE FE  ««««оюою

Функция используется в...

Armadillo

Источник — «https://exelab.ru/faq/OutputDebugString»