1. Как вызвать breakpoint из кода pintools чтоб на него сработала приатеченная Immunity Dbg ?
2. Анализирую одну из функций шелл кода, которая имеет такой вид.
Я хочу с помощью pin tools "сделать хук" , func_yyy. И сдампить ее параметры.Code:func_yyy (void *a, void *b){ // ... func_xxx( a1, a2, a3, a4 , a5.); ///... }
Но прежде чем их сдампить мне нужно их переобразовать в строку, что делает func_xxx.
гугление подсказало что нельзя вызвать PIN_CallApplicationFunction из callback_func_yyy.
Надо использовать модель "wrap" и функцию RTN_ReplaceSignature() .
Но я не могу использовать RTN_ReplaceSignature() так как там первый параметр RTN , для шелл кода я не знаю как получить RTN (он же все секций, и pin tools не дает интерфейса чтоб получить обьект RTN для кода вне секций )
примерный код для pin tools
Правильно ли я делаю вызов функции ? Примеры используют еще PROTO_Allocate но я не понимаю зачем, да и не ясно где указавать адресс функции которую надо вызвать.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(" ¶ms = %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); } } }
В общем можно банально похукать нужные функции и обойтись без pin tools, но хочется именно с pin tools это сделать.
Это возможно? Как правильно это сделать?



Reply With Quote
Thanks