значит так нахожу кернел в памяти получаю адреса апи и фсе хорошо пока не вызываю SetLastError и тут тарблы потому как в этой функции идет переадресация на ntdll все что я придумал как средство борьбы это проверять не указывает ли адрес апи в секцию экспорта и если так то подгружать длл и искать там имя переадресованной. а как вы с этим боретесь? может есть другой путь?
Просто подгружаю такие функции с помощью GetProcAddress (это там где нужен малый размер кода). А в моем пелоадере (который для дров), я обрабатываю переадресацию. Не в секцию, а в директорию экспорта (секции может и не быть). Вот кусок связаный с обработкой форвардов: Код (Text): if (IN_REGION(dwFuncRva, ExpRVA, ExpSize)) { CHAR DllName[0x100]; PCHAR fwdName = RVATOVA(Image, dwFuncRva); PCHAR fnName = strchr(fwdName, '.'); PVOID pLibrary; if (fnName) { memset(DllName, 0, sizeof(DllName)); strncpy(DllName, fwdName, fnName - fwdName); strcat(DllName, ".dll"); fnName++; pLibrary = CsGetModuleHandle(DllName); if (pLibrary) { Result = GetProcAddressEx(pLibrary, fnName, CsGetModuleHandle); } }
Ms Rem ага понял спасибо. впринципе так я и думал... черт была надежда что при LoadLibrary она сама подставляет смещения...