+ Reply to Thread
Results 1 to 3 of 3

Thread: DBI (PIN)

  1. #1

    Default DBI (PIN)

    1. Как вызвать breakpoint из кода pintools чтоб на него сработала приатеченная Immunity Dbg ?


    2. Анализирую одну из функций шелл кода, которая имеет такой вид.
    Code:
    func_yyy (void *a, void *b){
     // ... 
      func_xxx(  a1, a2, a3, a4 , a5.);
    ///...
    }
    Я хочу с помощью pin tools "сделать хук" , func_yyy. И сдампить ее параметры.
    Но прежде чем их сдампить мне нужно их переобразовать в строку, что делает func_xxx.

    гугление подсказало что нельзя вызвать PIN_CallApplicationFunction из callback_func_yyy.

    Надо использовать модель "wrap" и функцию RTN_ReplaceSignature() .
    Но я не могу использовать RTN_ReplaceSignature() так как там первый параметр RTN , для шелл кода я не знаю как получить RTN (он же все секций, и pin tools не дает интерфейса чтоб получить обьект RTN для кода вне секций )



    примерный код для pin tools
    Code:
    VOID callback_func_yyy(CONTEXT * ctx, ADDRINT threadID){
    	PRINT("func_yyy()");
    
    	ADDRINT regESP = PIN_GetContextReg(ctx, REG_ESP);
    	ADDRINT a1 = regESP + 4;
    	ADDRINT a2 = regESP + 8;
    	ADDRINT *params = *(ADDRINT**)a2;
    	CHAR *v5 = NULL, *v6 = NULL;
    
    	PRINT("a1 = %p, a2 = %p, eip = %p", a1, a2, PIN_GetContextReg(ctx, REG_EIP) );
    	PRINT(" &params = %p,  params[0] = %p", params, params[0]);
    	PRINT("*(ADDRINT*)(a1 + 0x0C) = %p", *(ADDRINT*)(a1 + 0x0C) );
    	
    	
    	ADDRINT ptr_to_my_func = 0xAAbbCCDD;
    
    	void *result_eax = 0;
    
    	//__asm int 3;
    	PIN_CallApplicationFunction(ctx, (THREADID)threadID, 
    								CALLINGSTD_CDECL, (AFUNPTR)(  ptr_to_my_func ),
    								NULL, 
    								PIN_PARG(void*), &result_eax,   
    								PIN_PARG(ADDRINT), *(ADDRINT*)(a1 + 0x0C),
    								PIN_PARG(ADDRINT), params,
    								PIN_PARG(ADDRINT), 0x1F4,
    								PIN_PARG(ADDRINT), &v5,
    								PIN_PARG(ADDRINT), &v6,
    								PIN_PARG_END()
    		);
    
    	PRINT("v5 = %p, v6 = %p", v5, v6);
    	PRINT("string = %s", v6);
    
    }
    
    VOID Trace(TRACE trace, VOID *v)
    {
    
    	for (BBL bbl = TRACE_BblHead(trace); BBL_Valid(bbl); bbl = BBL_Next(bbl) )
        {
    		ADDRINT bbl_address = BBL_Address(bbl);
    		
    		if (bbl_address == (ADDRINT)func_yyy_addr){
    			BBL_InsertCall(bbl, IPOINT_BEFORE, (AFUNPTR) callback_func_yyy, IARG_CONTEXT, IARG_ADDRINT, PIN_ThreadId(), IARG_END);
    		}
    
        }
    }
    Правильно ли я делаю вызов функции ? Примеры используют еще PROTO_Allocate но я не понимаю зачем, да и не ясно где указавать адресс функции которую надо вызвать.
    В общем можно банально похукать нужные функции и обойтись без pin tools, но хочется именно с pin tools это сделать.
    Это возможно? Как правильно это сделать?

  2. #2

    Default Re: DBI (PIN)

    Никто не знает или вопрос не понятен?

  3. #3

    Default Re: DBI (PIN)

    В общем код выше не правилен.
    Но для начала работы нужен обьект RTN. Его к сожалению не удается создать.

    VOID createRTNObj(){
    _vmm_some_function_xxx = get_addr_vmm_function_xxx(); // напоминаю что адрес этой функции не принадлежит какому либо модулю
    ...
    PIN_LockClient();

    RTN rtn = RTN_CreateAt((ADDRINT)_vmm_some_function_xxx,"_vmm _some_function_xxx");
    PRINT("RTN_Valid = %p", RTN_Valid(rtn) );
    PRINT("RTN_IsDynamic = %p", RTN_IsDynamic(rtn));
    PRINT("RTN_Address = %p", RTN_Address(rtn));
    PRINT("RTN_Size = %p", RTN_Size(rtn));
    RTN_Close(rtn);

    PIN_UnlockClient();
    }

    int main(int argc, char *argv[])
    {
    // Initialize PIN library. Print help message if -h(elp) is specified
    // in the command line or the command line is invalid


    if( PIN_Init(argc,argv) )
    {
    return 0;
    }

    createRTNObj();
    Получается такой лог:
    RTN_Valid = 00000000
    RTN_IsDynamic = 00000000
    RTN_Address = 00000000
    PIN может использоватся для отладки динамически генерируемого кода или шеллкодов ?

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:22
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org