컴공 일기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를 선물하세요.
-
오르비 0 0
오르비비
-
스퀸십관계 어떡해 생각하시나요 0 0
아는 후배가 사귀진 말고 스퀸십만 하는 관계갖자고 하네요 키스이상은 가지않고...
-
인서울 전전 목표로 하고 농어촌 쓸 수 있는데 가산점, 표점 고려할게 너무 많아서...
-
통계가 뜬건가요?
-
서울대 ㄹㅇ 조발 안할건가보네 0 0
ㅋㅋㅋㅋ
-
공부 언제부터 달리지 3 0
좀만 더 쉬고싶은데 딱 300일 남았을때 할까
-
성대 2026 가산 1 0
성대 2026 나군에서 가산 안준걸로 알고 있는데 내년에는 바뀔까요?
-
다시 궁부를 벅벅벅 0 0
생글 인포그 복습 예습지문 하나 에필로그 2개 세지3강까지 자기
-
메인글 블라먹었네 3 1
왜지
-
뀨뀨 1차는 조발 안하나 0 0
ㅈㄱㄴ
-
비둘기야 먹자~ 2 0
구구구구구 구구구구구 마시쩡? 마시쩡!
-
추미애 "경기지사 생각 있어...그래서 애초 법사위원장 거부했다" 0 0
[이데일리 하지나 기자] 더불어민주당 소속 추미애 국회 법제사법위원장이 6·3...
-
이건 솔직하게 어떤게 더 어렵냐
-
생1 커리 훈수 부탁드려요! 1 0
개념은 백호쌤이 더 좋다는 말도 있고 준용쌤은 스킬이 더 좋다는 말이 많아서 개념만...
-
지학 개념량 6 1
지학이 사탐2개급이라던데 사문생윤같은 암기량 적은거 기준임 아님 역사,지리 같은...
-
iq 높아야 되는거 아님? 최상위권 영역에서는 누구나 다 노력하기에 지능에 따라...
-
손창빈 유신 서준혁 0 0
각자 어떤 강점이 있나여? 제일 추천하시는 분이 있을까여?
-
아 걍 재수할수도 있어서 2 0
붙어도 안갈수도 있을거같음 부모님이 걍 가지말고 1년해보라네
-
가족이 아프니까 4 0
마음이 많이 아프네.. 대신 아플 수도 없고
-
나 찾으면 0 1
덕… 사실 아무것도 안해줌
-
레전드 기만 하나 함 6 2
굿즈 옴 ㅋㅋ 이거죠
-
상관관계 있음? 펑크여부같은거ㅇㅇ
-
이놈 뭐냐 0 0
내신 4.43에 고대 교우 식자경썻다가 허수로 짤리고 설대식 400.3에 오직...
-
루루루루 3 1
루루룰ㄹ
-
언매 비상 1 0
2월에 기숙 들어가기 전까지 인강 개념 다 듣고 문풀이나 기출도 감 잡고 가고 싶음...
-
생윤 or 지구과학 1 선택 0 0
현역 고3인데 한양대 화학과가 목표입니다 농어촌 6년전형 보유중 탐구를 뭘로...
-
김연호 생명 0 0
김연호쌤 생명 라이브 수강하려고 하는데 유전 체화가 어려워서 복습 여러번 해야된다는...
-
사탐 하신분들 도와주세요ㅠㅠㅠ 6 0
원래 과탐을 하다 탐구 2개 다 사탐으로 바꿔보려고하는데 내신은 윤사밖에안해봤고...
-
마라탕 없인 못살어 조선을 다시 위대하게
-
배치고사 1승 4패 0 1
왜 졸린데 롤을 하는 것이며 정글은 전라인 다 이겼는데 왜 던지고 나는 왜 룬설정을 깜빡했는가
-
버거킹 메뉴 추천 점여 9 2
통새우와퍼 말고 머 먹지
-
사회인만 들어와봐 4 0
안녕하세요 주 5일은 첨해바서 첨으로 큰 돈이 월급으로 들어왔는데 보통 관리...
-
동국대 정도면 접어야 되나요? 현실을 알려주세요 동설대#홍중앙국민건국숭실연세고려서강성균한양#
-
윤석열 구형날 '무박 2일' 마라톤 재판…특검 새벽 구형할 듯 0 0
[서울=뉴시스] 장한지 이수정 이소헌 기자 = 윤석열 전 대통령의 내란 우두머리...
-
오늘이 뀨대 1차구나 6 0
궁금해~
-
암소 이모티콘이 있네 7 3
암소인지 수소인지는 모르겠어요!!! 이쁘장하니까 암소로 하겠습니당
-
쪼아요 2 0
이마트가쪼아요
-
제발 내위에 빠져줘 1 1
제ㄹ아ㅏㄹ라라아ㅏ라라아앙 설대 가고시퍼 으아아ㅏ아아아아ㅏ아아아앙 지구인드랑 힘을줘
-
여자였으면 버튜버 했을텐데 20 1
난 부남 롤대남 오타쿠 등등 모두의 니즈를 맞춰줄 수 잇음.. + 남잔데...
-
추천좀
-
31명 지원 18명 점공인데 항상 이 정도 비율로 점공하고 순위 거의 그대로던데...
-
12월 말에 원서 쓰게하고 1월 말에 발표 한다는게 말이 됨??? 1 0
뭐 기다리다 죽으라는거야?
-
정확히 일주일 뒤 1 0
내가 국민대생
-
졸업한 지 하루 지났는데 7 0
고등학교 친구들이 벌써 그립네
-
남자는 마감입니다 ( 저 혼자 ㅎ) 여성 5분 모실게요 예쁘면 우대
-
나와써 3 0
옯하
-
슬슬가쇼 7 2
시간낭비하지마시고
-
얌전히 커뮤니티에 가잇을껄 2 3
왜 멀리 나왓지
공주다!
앙냥앙냥
1월 1일 상경했을 때부터 지금까지..
ㅋㅋㅋㅋㅋ 잠시만 매우 익숙한...?

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