컴공 일기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
그 전기장의 중심부분에 있는것이 다르다는것임 전자와 빛이
-
물2 6 2
물2
-
우우래 3 1
지갑 잃어버렸어 밥 어케 먹지 집 어케 가지
-
노래 잘부르는 법 알고 싶음 10 0
진짜 한 3년동안 연습하니까 어디에도 1절까지는 가능하던데 이걸 완창하는 실력을 갖고 싶다
-
다들 친외가 최고학벌 뭐임? 14 2
외가 설법(이모할아버지) 카이 공학(외당숙) 친가 대부분 고졸 or 지거국 문과...
-
현역7모 성적 1 1
국어수학 ㄹㅈㄷ 커한데 지구가 배신함
-
6모 5등급의 7모 후기 0 0
이게되네...
-
6모 34111이었고 7모 21111 나왓는데 현역이 개폐급이라 이런건가요.....
-
모 오르비언이 선택과목 하나로 16 4
새터에서 특정당했다는 사실 듣고 전 대학에서 수능 얘기 나오면 선택과목 구라침ㅇㅇ...
-
정시 합격 발표 기간 1 0
정시 합격 발표하고 막 추합 전화돌릴 때 부모님께서 대신 등록하고 그럴 수 있나요?? 입대때문에..
-
대출받아서 수능준비 0 0
소액 대출 한 100-150만원정도 받아서 수능 준비하는거 어떻게 생각하시나요....
-
요즘은 약간 듣고 싶음… 인생에 자극도 되고 흥분도됨
-
내일 신검 받으러 가는데.. 7 0
정신과 약 5개 복용., 과연 4급이 될려나..흠
-
올해 수능 등급컷 적고 가라 0 0
ㄱㄱ
-
도대체독재에서번따를왜하는거 10 4
퇴소하는것도아니고계속마주칠텐데 경쟁자제거가아니고서야서로불편해지는거아닌가
-
국어 이거 어떡하냐 0 0
작년 수능 언매 89점 이번 6모 화작런하고 98점 7모 문학 3개 화작 3개...
-
강제 다이어트 중임 0 1
아침에 일나는게 귀찮아서 아침을 못먹고 일찍자야돼서 야식도 못먹게되니 재수하는데...
-
카르마 맞을것같긴한데 3 1
영어빼고 전체 5틀했음뇨 국어는 확실히 약 3주간 거의 1일1실모 달리면서...
-
4개월만에 가능한가요 3 0
언미생지 44225에서 독학재수해서 24학년도 수능 12132 받고 대학 들어왔는데...
-
아주대 의논 1번 생긴거 5 1
무섭게 생겼다
-
현대소설 기출 질문 1 0
그 개정이후 현대소설(고전 소설일수도 있어요.,,) 기출중에 선지에 볼드체끼리 되게...
-
어라라 와타시 어째서 아직 지로함인걸까나…?
-
생윤개념량 0 0
생명,지구에 대비해서 생각하면 어느정돈가요? 사문이랑 같이 개념 시작하는데 7월...
-
국어 고정 100은 타고난거같단 생각이 먼저 드는데 7 0
적백<<<<<지금까지 몆년을 공부에 때려박았을지 상상도 안됨
-
저 애상 혼자 부르기 장인임 6 0
여자파트 남자파트 번갈아가면서 1인2역으로 부르는거 재밌음
-
내 악력이 강해진 탓일까
-
가형부심 1 0
있어도 인정함 나도 나형하고싶음씨발
-
가형 백점은 뭐라 부름 6 1
가백은 멋 없는데
-
저는 이제 만족함 1 3
최고(나)로부터 인정받았기 때문
-
제일 간지나는 것은? 6 1
-
김승리 kbs수완 나왔나요? 0 0
안나왔으면 언제 나옴?
-
덕코 주시는 분 좋은 분 12 1
-
수학은 정말 가장 정직한 과목일까요
-
요즘 귀여운게 좋더라 3 0
나이가 들어가나보다
-
프리텐더를 보면 드라우닝이 생각남 왜인지 생각해 봤는데 최고음이 똑같고 곡 진행도...
-
배달 얌전히 기다리기 7 1
곧 뜨끈뜨끈한 피자가 올거야
-
팩트) 뒤에서 씹고 매장하려는 애들도 병신임 10 18
꼬우면 앞에가서 맞다이 신청하고 나대지 마라고 하면 됨
-
ETF지문 0 0
3찍 + 어휘만 풀엇더니 -2점 야루!
-
빛 이중성실험 잡생각 1 0
파동이던 빛이 관측되면 입자가 된다. 관측이란건 개인적으로 빛이나 전자를 이용해...
-
고3 말고 엔수생으로 설정 돼 있어서 상관없으려나
-
7모. 9 1
언미물2지2 93 100 50 아직안봄 왠만하면 50 뜰듯 지2는 근데 전체적인...
-
영어 90점 ㅅㅅ 4 1
시발 29 왜틀렸지 ㅋㅋㅋ
-
맛저하세요 1 0
사진을ㅈ제가잘못찍어요
-
뷰어에서 열거면 최소한 설정에서 자바스크립트 끄셈
-
역대급 체력 저하인데 2 0
눕자마자 잠듦 어지러움+말 안 걸면 멍때림 씻을때마다 코피남
-
7모 문학 0 0
현대시 마음에 안드네 쓰읍
-
관독에서 7모 봤더 0 0
-
킴류 최대 난제 9 0
24수능 언매 91점
-
천쩌빈이 문제가 아닌거같은데 6 0
걍 전라인이 잘하는데
-
오페는 폼 떨어졌고 도란은 걍.....

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

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