본문 바로가기

전체 글52

String vs StringBuilder vs StringBuffer Java에서 문자열을 다룰 때 사용하는 클래스로는 String, StringBuilder, StringBuffer가 있습니다. 연산이 많지 않을때는 3 클래스 중 어떤 클래스를 사용하더라도 문제가 없지만, 연산 횟수가 많아지거나 멀티스레드, Race Condition 등의 상황이 자주 발생하면 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용해야 합니다. String vs StringBuilder, StringBuffer String과 StringBuilder, StringBuffer의 가장 큰 차이점은 불변성(Immutable)입니다. String str1 = "Hello"; str1 = str1 + "World"; String은 리터럴(literal) 방식으로 생성하면 Heap 영역 내 .. 2022. 11. 28.
Dll Injection 03 3. SetWindowsHookEx 후킹 : 다른 프로세스에 걸려서(hooked) 해당 정보를 얻어오거나, 변경 setWindowsHookEx() : setWindowsHookEx()은 프로세스에 훅을 설치하는 API로 프로세스에 dll을 삽입해 hook procedure를 호출한다. 이를 이용해 원하는 dll 삽입이 가능하다. 1) idHook : 설치될 hook 종류 2) lpfn : hook procedure(callback function)의 함수 포인터) 3) hMod : lpfm의 hook procedure이 포함된 DLL 인스턴스 핸들 4) dwThreadId : Thread ID, hook procedure 설치할 윈도우 값, 0일 때 전역 hook HookMain.cpp Injection.. 2020. 5. 20.
Dll Injection 02 2. CreateRemoteThread Main()에서 인젝션 할 dll과 프로세스를 입력받은 후 InjectDll함수를 실행 ↓ OpenProcess()를 이용해 notepad.exe프로세스 핸들 구한 후 Dll을 삽입할 프로세스의 메모리에 삽입할 공간, dll파일의 경로를 VirtualAllocEx(), WriteProcessMemory를 이용해 할당, 메모리에 입력 ↓ dll인젝션은 LoadLibrary()를 대상 프로세스가 실행하게 해 dll을 로딩하는 것이므로 프로그램에 로딩되어 있는 kernel32.dll에서의 loadlibrary() 주소를 얻어와 CreateRemoteThread()를 이용해 원격으로 실행 ↓ GetModuleHandle(), GetProcAddress()를 이용해 kern.. 2020. 5. 18.
Dll Injection 01 실행중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입 (LoadLibrary() -> DllMain실행) CreateRemoteThread(), AppInit_Dlls(레지스트리), SetWindowsHookEx()의 세 가지 방법 존재. 1. Appinit_dlls (1) HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\Appinit_dlls (2) LoadAppinit_dlls의 값을 1로 바꿔줘야함 ( 0 -> Appinit_dlls 사용X, 1 -> Appinit_dlls 사용) (3) User32.dll의 DLL_PROCESS_ATTACH과정에서 LoadLibrary()를 사용하여 로드된다. Appinit_dll.. 2020. 5. 18.