www.pudn.com > API_VC_HOOK-.rar > CapConsole.asm


;@GOTO TRANSLATE 
 
.586P 
 
.MODEL            FLAT, STDCALL 
 
   OPTION         CASEMAP: NONE 
   INCLUDE        WINDOWS.inc 
   UNICODE        = FALSE 
   INCLUDE        APIMACRO.mac 
 
   INCLUDE        ApiHooks.inc 
 
   INCLUDELIB     iKERNEL32.lib 
 
;------------------------------------------------------------------ 
.DATA? 
   Place           ACHAR   4096   DUP (?) 
 
 
.CODE 
 
  ;if DllMain is not required then use /noentry switch on LINK commandline 
 
  DllMain    PROC     DllHandle, Reason, pContext 
    MOV      EAX,     Reason 
    CMP      EAX,     DLL_PROCESS_ATTACH 
    JE       Attach 
    CMP      EAX,     DLL_PROCESS_DETACH 
    JE       Detach 
   Success: 
    MOV      EAX,     TRUE 
    RET 
 
   Attach: 
    CMP      hLog, INVALID_HANDLE_VALUE 
    JNE      Success 
    iWin32i  CreateFile, sLogName, GENERIC_WRITE, FILE_SHARE_READ,\ 
                         NULL, CREATE_ALWAYS, NULL, NULL 
    MOV      hLog, EAX 
    JMP      Success 
 
   Detach: 
    iWin32   CloseHandle, hLog 
    MOV      hLog, INVALID_HANDLE_VALUE 
    JMP      Success 
 
    TEXT     LogName,  
    ALIGN    4 
    hLog     HANDLE   INVALID_HANDLE_VALUE 
  DllMain    ENDP 
;------------------------------------------------------------------ 
  NewWriteConsoleA PROC    hConOut, lpvBuffer, cchToWrite,\ 
                           lpcchWritten, lpvReserved 
                   LOCAL   Written : DWORD 
                   LEA     ECX, Written 
                   iWin32  WriteFile, hLog, lpvBuffer, cchToWrite, ECX, NULL 
                   LEAVE 
                   iWin32j  WriteConsoleA 
  NewWriteConsoleA ENDP 
;------------------------------------------------------------------ 
  NewWriteConsoleW PROC    hConOut, lpvBuffer, cchToWrite,\ 
                           lpcchWritten, lpvReserved 
                   LOCAL   Written : DWORD 
                   iWin32  WideCharToMultiByte, CP_ACP, NULL, lpvBuffer, -1, OFFSET Place, SIZEOF Place, NULL, NULL 
                   LEA     ECX, Written 
                   iWin32  WriteFile, hLog, OFFSET Place, EAX, ECX, NULL 
                   LEAVE 
                   iWin32j WriteConsoleW 
  NewWriteConsoleW ENDP 
;------------------------------------------------------------------ 
  ;todo WriteConsoleOutputA + WriteConsoleOutputW 
;------------------------------------------------------------------ 
  NewGetStdHandle  PROC    nStdHandle 
                   CMP     nStdHandle, STD_ERROR_HANDLE 
                   JNE     @F 
                   iWin32  GetStdHandle, nStdHandle 
                   MOV     hErr, EAX   ;todo fields of handles, not 1 only 
                   RET 
                  @@: 
                   LEAVE 
                   iWin32j GetStdHandle                
                   hErr    HANDLE 0 
  NewGetStdHandle  ENDP 
;------------------------------------------------------------------ 
  NewWriteFile     PROC    hFile, lpBuffer, nNumberOfBytesToWrite,\ 
                           lpcchWritten, lpOverlapped 
                   LOCAL   Written : DWORD 
                   MOV     EAX, hFile 
                   LEA     ECX, Written 
                   CMP     EAX, hErr 
                   JNE     @F 
                   iWin32  WriteFile, hLog, lpBuffer, nNumberOfBytesToWrite, ECX, NULL 
                  @@: 
                   LEAVE 
                   iWin32j  WriteFile 
  NewWriteFile     ENDP 
;------------------------------------------------------------------ 
IFDEF Soft9x 
  NewGetProcAddress  PROC  hLibrary, lpszProc 
                   ;iWin32  GetProcAddress, lpszLibrary, lpszProc 
                   iWin32  GetModuleHandleA, sKERNEL32 
                   CMP     EAX, hLibrary 
                   JNE     @GoGPA 
 
        CmpApi     MACRO   __ApiNomen 
                   iWin32  lstrcmp, lpszProc, s&__ApiNomen 
                   TEST    EAX, EAX 
                   JNE     @F 
                   MOV     EAX, New&__ApiNomen 
                   JMP     @RetGPA 
                  @@: 
                   ENDM 
 
                   CmpApi  WriteConsoleA 
                   CmpApi  WriteConsoleW 
                   CmpApi  GetStdHandle 
                   CmpApi  WriteFile 
                   CmpApi  GetProcAddress 
 
                  @GoGPA: 
                   LEAVE 
                   iWin32j GetProcAddress 
                  @RetGPA: 
                   RET 
  NewGetProcAddress  ENDP 
ENDIF 
 
;names------------------------------------------------------------- 
                   TEXTA   KERNEL32,   
                   TEXTA   WriteConsoleA,   
                   TEXTA   WriteConsoleW,   
                   TEXTA   GetStdHandle,   
                   TEXTA   WriteFile,   
  IFDEF Soft9x 
                   TEXTA   GetProcAddress,   
  ENDIF 
;------------------------------------------------------------------ 
 BeginHooks CapConsole   
   API_HOOK  
   API_HOOK  
   API_HOOK  
   API_HOOK  
  IFDEF Soft9x 
   API_HOOK  
  ENDIF 
 EndHooks 
;------------------------------------------------------------------ 
 
END  DllMain 
 
:TRANSLATE 
@ECHO OFF 
ML    /c /coff /nologo CapConsole.bat 
LINK3 CapConsole /OUT:CapConsoleNT.dll /nologo /DLL /EXPORT:CapConsole,@1,NONAME /SUBSYSTEM:WINDOWS /MERGE:.idata=.text /MERGE:.rdata=.text /SECTION:.text,WRE /IGNORE:4078 /BASE:0X77770000 
ML    /c /coff /DSoft9x /nologo CapConsole.bat 
LINK3 CapConsole /OUT:CapConsole9xS.dll /nologo /DLL /EXPORT:CapConsole,@1,NONAME /SUBSYSTEM:WINDOWS /MERGE:.idata=.text /MERGE:.rdata=.text /SECTION:.text,WRE /IGNORE:4078 /BASE:0X77770000 
DEL   CapConsole.obj 
DEL   CapConsoleNT.exp 
DEL   CapConsoleNT.lib 
DEL   CapConsole9xS.exp 
DEL   CapConsole9xS.lib