컴공 일기279
게시글 주소: https://orbi.kr/00076405203
보안 솔루션 개발에서 빼놓을 수 없는 Api Hook 기법의 예제입니다. 강의를 지금 수강하고 있는데, 예제를 돌려보면서 감을 잡는 중이네요. Hook은 상당히 위험한 기술입니다. 잘 쓰면 보안이지만, 그릇되게 사용하면 해킹 기법이기도 하거든요. 안성재 셰프님이 사시미 칼을 가지고 계신다면 맛있는 방어회를 기대할 수 있지만, 인천 조폭 오빠야들이 사시미 칼을 들고 있다면 그건 살인 도구가 됩니다.
hooking도 마찬가지입니다. 영어 표현이 넌지시 암시하듯이, 함수의 흐름을 멋대로 갈취해서, 자기만의 흐름으로 바꿔버리는 기술이지요. 프로그램을 열어주는 OpenProcess()라는 함수를 갈취해서, MyOpenProcess()로 실행되도록 한 것입니다. 원래의 OpenProcess()는 커널 수준의 프로그램을 제외한 유저모드 수준의 프로그램을 다 조회할 수 있도록 지원하지만, MyOpenProcess()의 경우 메모장 프로그램의 정보를 blind처리 시키는 구조를 가집니다.
예, 원래 함수가 다 보여주는 기능이라면 커스터마이징된 함수에서는 메모장의 정보 조회를 막고 있지요.
그러니까 원래 함수의 흐름에서 커스터마이징된 함수 즉 MyOpenProcess()로 함수의 흐름을 바꿔채기만 한다면 메모장의 정보 조회를 막는 보안 솔루션이 됩니다.
#include <iostream>
#include <windows.h>
#include <Psapi.h>
using namespace std;
#pragma pack(push, 1)
typedef struct JUMP_CODE {
BYTE opCode;
LPVOID targetAddr;
}JUMP_CODE;
#pragma pack(pop)
void* g_pOpenProcess;
BYTE g_codesBeforeHook[sizeof(JUMP_CODE)] = { 0 };
BOOL hookOpenProcess(void);
void unhookOpenProcess(void);
HANDLE MyOpenProcess(
DWORD dwDesiredAccess, BOOL bInheritHandle,
DWORD dwProcessId
)
{
//여기에서 unHook을 해야지만 무한루프에 빠지는 것을 방지할 수 있다.
unhookOpenProcess();
HANDLE(WINAPI * pfOpenProcess)(DWORD, BOOL, DWORD) = NULL;
pfOpenProcess = (HANDLE(WINAPI*)(DWORD, BOOL, DWORD)) g_pOpenProcess;
dwDesiredAccess |= PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
HANDLE hProcess = pfOpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
TCHAR name[MAX_PATH + _MAX_FNAME] = { 0 };
::GetModuleFileNameEx(hProcess, NULL, name, size(name));
if (wcsstr(name, L"Notepad.exe") != NULL)
{
cout << "\tMyOpenProcess()" << endl;
cout << "\t*******************************************************" << endl;
cout << "\t***************Block notepad Process!!!****************" << endl;
cout << "\t*******************************************************" << endl;
hookOpenProcess();
return NULL;
}
hookOpenProcess();
return hProcess;
}
void printProcessList(void)
{
HMODULE hk32 = ::LoadLibrary(L"Kernel32.dll");
HANDLE(WINAPI * pfOpenProcess)(DWORD, BOOL, DWORD) = NULL;
pfOpenProcess = (HANDLE(WINAPI*)(DWORD, BOOL, DWORD)) ::GetProcAddress(hk32, "OpenProcess");
DWORD aPid[1024] = { 0 };
DWORD dwNeeded = 0;
if (::EnumProcesses(aPid, sizeof(aPid), &dwNeeded))
{
DWORD count = dwNeeded / sizeof(DWORD); //Process Count
HANDLE hProcess;
for (DWORD i = 0; i <= count; ++i)
{
hProcess = pfOpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aPid[i]);
if (hProcess != NULL)
{
TCHAR name[MAX_PATH + _MAX_FNAME] = { 0 };
::GetModuleFileNameEx(hProcess, NULL, name, sizeof(name));
::wprintf(L"%s [PID: %d]\n", name, aPid[i]);
}
}
}
::FreeLibrary(hk32);
}
BOOL hookOpenProcess(void)
{
HMODULE hk32 = ::GetModuleHandle(L"Kernel32.dll");
HANDLE(WINAPI * pfOpenProcess)(DWORD, BOOL, DWORD) = NULL;
pfOpenProcess = (HANDLE(WINAPI*)(DWORD, BOOL, DWORD))::
GetProcAddress(hk32, "OpenProcess");
g_pOpenProcess = pfOpenProcess;
DWORD dwOldProtect = 0;
BOOL bResult = ::VirtualProtect(
(LPVOID)pfOpenProcess, 5,
PAGE_EXECUTE_READWRITE, &dwOldProtect
);
memcpy(g_codesBeforeHook, pfOpenProcess, 5);
//목적지 주소 - 현재 명령어 주소 - 5
//5는 JMP, CALL 명령어의 크기 만큼 빼주는 것
JUMP_CODE jmpCode = { 0 };
jmpCode.opCode = 0xE9; //JMP
jmpCode.targetAddr = (void*)((DWORD)MyOpenProcess - (DWORD)pfOpenProcess - 5);
memcpy(pfOpenProcess, &jmpCode, 5);
return TRUE;
}
void unhookOpenProcess(void)
{
if (g_pOpenProcess == NULL)
return;
//원상복구
memcpy(g_pOpenProcess, g_codesBeforeHook, 5);
}
//32bit Windows Api Inline hook
int main()
{
setlocale(LC_ALL, "");
hookOpenProcess();
printProcessList();
return 0;
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
#07년생#08년생#독학생 오르비의 주인이 될 기회 38 40
-
기출이죠??? 어떤가요???
-
울면안대 0 0
울면한대 너는 특별히 두대
-
군모닝 5 0
안냐떼여 일찍인난 미하리에요
-
안녕 날 소개하지 학교는 평반고 취미는 체육시간에 공부하기 자 크게 나누면 3가지...
-
3등급 초입은 나오나
-
[국어 내신 무료 자료 공유] 22개정 고1, 고2, 고3 모의고사, 중1~중3 문제 배포 1 1
[국어 내신 무료 자료 공유] 22개정 고1, 고2, 고3 모의고사, 중1~중3...
-
선택적 모병제 추진…GOP 병력 6000명으로 감축 1 0
[이데일리 김관용 기자] 안규백 국방부 장관이 병력 감소와 전쟁 양상 변화에...
-
반수생고민 0 0
현역으로 성대왔고 반수하려고 하는데 무조건 서울대 가고 싶으면 어떻게 해야...
-
28수능 인강 추천 0 0
자퇴했고 28수능 볼 예정인데 통과 통사는 지금 인강이 있나요? 내년 수능 언매...
-
설경이 경제인 이유 3 0
경제학부의 외모평균은 경영학부와 비교할수조차 없이 낮음
-
걍 12시에 맞춰놓고 땡할때 누르면 보기 개편한데
-
채점자료 내놓으라고 1 0
설마 저번처럼 내일 올려주냐?
-
얼버기 0 0
-
자연고질 0 0
연하를 사랑하는 병
-
독서 독학해도 괜찮을까요 0 0
국영수 다 그냥 공부해본 적 없는 노베이고 이제야 공부를 시작한 현역입니다…!...
-
문득 드는 생각 0 0
국어가 최근 10개년만해도 기출이 30갠데 하나 다풀면80분이고 오답하는것도 시간...
-
작년이 전역한뒤 휴학때리고 재수중인 n수생입니다... 다름이 아니라 동원훈련 1형...
-
국어 공부법 알려주세요 ㅜㅜ 7 0
안녕하게쇼 국어 공부법좀 알려주세요 ! 독서는 괜찮은거 같은데요!문학이랑 화법과...
-
학교 가기 싫다 2 0
씨발
-
ㅈ같은 열역학 3 0
우우우....
-
정의라는 것 아닙니까? Sk오션플랜트 100주매수 현금 -255 매도가능증권 + 255
-
학교가기싫다 4 0
ㄹㅇㄹㅇ
-
6평전에 풀어볼 실모 추천점 1 0
더프 서프 킬캠 이감파이널 제외
-
지도 문제 만드시는 분들 질문 직접 지도를 그리시나요 아니면 어디 사이트에서...
-
그 형이 6평 친다고 해서 나도 따라서 치기로 결심함
-
과외 집에서 받는 거 ㄱㅊ? 0 0
집은 신축아파트고 제 방만 깔끔함 저 22살 여자 과외쌤은 24살 여자 제가...
-
확통진도 다 나가고 드는 생각 0 0
시발 왜 진작에 확통을 안했을까......
-
교육청영어 왜케어려움 0 0
흠 개인적으로 1짤은 칸트보다 어려운듯(사유:현장에서 국어칸트랑 영어칸트를맞춤)
-
수학 기출 풀어야하나 0 0
큐브 답변할 때 '이게 기출이라고'하는게 너무 많다 22~26학년도만 돌려볼까
-
수분감 며칠컷 2 0
수분감 수2 하고 있는데 하루에 몇 강씩 듣는 게 적당한가요? 이미 끝내신 분들은...
-
급함 1 0
님들 혹시 6모 신청 못 했으면 어케 해야함? 모교는 인원 다 찼고 관할 교육청...
-
내가 돈이 많았다면 0 0
물1도 비대면현강을 들었을텐데
-
생각보다 은근 모르는거 1 0
확미기 표본이 하나인걸 모르는 사람이 생각보다 많아서 놀랐음
-
아침 국어 문풀하고 분석하는데 2 0
잇츠 올라잇~ 우리 집으로 가자~ 어제 집가면서 들었던 노래가 계속 귀에서 맴돌아서...
-
채점결과 나오면 0 0
crux table보다 빠르게 통계자료 올리기
-
이거 뭔데 ㅋㅋㅋㅋ 1 0
https://youtu.be/m4fEKe0NG84?si=gFohVT_8kvgcN_Y...
-
오늘도 원준쌤과 하루를 시작 0 0
스키마n제 ㄱㄱ혓
-
인생개망한 재수생 3 0
4월이라니... 지금부터 해서라도 갈사람은 가려나요? 저도 할 수 있겠죠??...
-
김현우T 합성함수 필기 2 0
김현우t 5,6,7주차에 하셧던 합성함수 수업들 전체 필기 보여주실 천사분...
-
안냐떼요 3 0
-
국어 고정100 만드는법 4 0
모고 백분위 98 밑으로 떨어진적은 없는데 고정100까지는 안돼서 어케 하는지...
-
2시간이면 끝나서 뭐
-
동사 이거 어디나오나요 4 0
ㅁㄹㅇ 교과서가 무난하데서 이걸로 공부중인데 기출문제 보니까 장쭤린 폭사사건,...
-
6모때한지보려는데 9 0
이기상T 들으면 되나요
-
어제 학교에 3 1
볼빨간 사춘기 왔는데 확실히 연예인은 다름 진짜 후광이 비치듯 개 예뻤음....!...
-
쿠노니 마미레테 0 0
나게키 카나시미
-
망갤 테스트 1 0
-
ㅋㅋㅋㅋㅋㅋ 1 0
리젠보소
-
후우... 로스쿨 오지마라 0 1
꿈이 있는 거면 이런 말에 휘둘리지 말고 ㄱㄱ 하시고 그냥 번듯한 인생 살 수 있는...
-
김범준 2타임? 3 0
스블 뉴런이 실전개념 양대산맥 이라서 1타인줄 알았는데

공주다!
앙냥앙냥
1월 1일 상경했을 때부터 지금까지..
ㅋㅋㅋㅋㅋ 잠시만 매우 익숙한...?

마이크로명령어 해킹당하니 답없던골치아프죠... 그래도 "리버싱"이라는 강력한 기술이 있으므로..^^
예전에 제가 나이 관련해서 고민된다고 댓글 달아주셨을때
힘나는 답변 해주셔서 감사했어요
그리고 저도 창작자라는 꿈이 있는데 ai를 활용해서
더 넓은 분야들에서 움직여보려고요
저때 받은 답변 지금도 갖고 힘내고 있습니다
대학교도 컴공으로 진학 예정(반수 예정이지만..!)인데
늘 파이팅이요!
감개무량입니다.... 어떤 한 교수님이 저한테 그런 가르침을 주셨습니다. 외롭고 고되고 힘든 시기지만, 그럴 때일수록 인식의 열정에 사로잡힌 사람들이 빛나는 시대,라고. 더 큰 인식의 열정에 사로잡힌 채 젊음을 즐기시기를.... 그렇게 응원합니다 :)
와 이분 개오랜만이다
반갑습니다아~
Gpt가 보안영역은 아직 파이를 안뺏나여
보안솔루션은 GPT가 대체하기 매우 힘든 분야라고 할 수 있습니다. GPT가 전혀 모르는 코드를 짜야하는 일도 다반사이기 때문입니다. 참고하시기 바랍니다.
기시디에서 인사드립니다 선배님!
꺙 기시디 화이팅이에용 >.<
어렵닷