#include <stdio.h>
#include <Windows.h>
int main()
{
PIMAGE_DOS_HEADER IDH;
PIMAGE_NT_HEADERS INH;
PIMAGE_EXPORT_DIRECTORY IED;
HMODULE hmod = LoadLibrary("wsock32.dll");
PBYTE pbBase, pbName;
pbBase = (PBYTE)hmod;
IDH = (PIMAGE_DOS_HEADER)pbBase;
INH = (PIMAGE_NT_HEADERS)((DWORD)pbBase + IDH->e_lfanew);
IED = (PIMAGE_EXPORT_DIRECTORY)((DWORD)pbBase + INH->OptionalHeader.DataDirectory[0].VirtualAddress);
WORD* ord = (WORD*)(IED->AddressOfNameOrdinals + (DWORD)pbBase);
DWORD* v = (DWORD*)(IED->AddressOfFunctions + (DWORD)pbBase);
printf("%x\n", v[ord[0x73]] + (DWORD)pbBase);
return 0;
}
분명히 PE Loader 등으로 열어봤을 때는 0x73 이 있는데. 저걸로 구해볼려니까 프로그램이 죽어버리네.
ord[0x73] = 0x7373 의 값이 나왔습니다. 잘못된 값같은데. 어떻게 처리를 해야돼? IED->Base 있던데, 이걸로 보정?
#include <Windows.h>
int main()
{
PIMAGE_DOS_HEADER IDH;
PIMAGE_NT_HEADERS INH;
PIMAGE_EXPORT_DIRECTORY IED;
HMODULE hmod = LoadLibrary("wsock32.dll");
PBYTE pbBase, pbName;
pbBase = (PBYTE)hmod;
IDH = (PIMAGE_DOS_HEADER)pbBase;
INH = (PIMAGE_NT_HEADERS)((DWORD)pbBase + IDH->e_lfanew);
IED = (PIMAGE_EXPORT_DIRECTORY)((DWORD)pbBase + INH->OptionalHeader.DataDirectory[0].VirtualAddress);
WORD* ord = (WORD*)(IED->AddressOfNameOrdinals + (DWORD)pbBase);
DWORD* v = (DWORD*)(IED->AddressOfFunctions + (DWORD)pbBase);
printf("%x\n", v[ord[0x73]] + (DWORD)pbBase);
return 0;
}
분명히 PE Loader 등으로 열어봤을 때는 0x73 이 있는데. 저걸로 구해볼려니까 프로그램이 죽어버리네.
ord[0x73] = 0x7373 의 값이 나왔습니다. 잘못된 값같은데. 어떻게 처리를 해야돼? IED->Base 있던데, 이걸로 보정?
참고로 0x73 은 WSAStartup 함수임. 지금 0x73 이라는 숫자를 가지고 WSAStartup 을 뽑아내야되는 상태...
조언 감사여..
ord[0x73]하니까 이상하고 v[0x72]하면 WSAStartup 함수 주소 잘 나오넹;
머하길래 pe 뷰어를 하루종일 짜냐