CODE INJECTION 시스템B 김한슬
목차 Code injection이란? Code injection의 소스코드 Code injection의 디버깅
Codeinjection.exe process 상대방의 프로세스에 독립 실행코드를 삽입한 후 원격스레드 형태로 실행하는 기법 / Thread인젝션이라고도 함. Codeinjection.exe process 1.inject data &code 2. Execute Target.exe process Thread param = 데이터 2. Threadproc() =코드
Dll injection과의 차이 Dll injection : dll의 코드에서 사용되는 모든데이터는 dll의 데이터영역에 위치하여 dll을 통째로 프로세스메모리에 삽입. Code injection : 필요한 코드부분만 인젝션하되 그 코드에서 사용되는 데이터도 같이 인젝션해주어야 정상적으로 코드가 실행. 인젝션된 데이터의 주소를 코드에서 잘 알아볼수 있도록 프로그래밍 해야함.
Code injection의 장점 메모리를 조금만 차지한다. 흔적을 찾기어렵다. 별도의 Dll파일 없이 code injector프로그램 있으면 구현가능.
Code injection 실습 Notepad를 실행시켜 pid를 확인한 후,
Code injection 실습 Codeinjection.exe pid로 실행시켜 메세지박스 출력하는 기능.
Code injection 소스코드 Main함수 : injectCode()함수 호출, 함수파라미터로 pid값 전달.
Code injection 소스코드 ThreadProc() : 상대방 프로세스에 실제 인젝션할 코드 독립적으로 실행하기 위해서 코드와 데이터를 함께 인젝션해문자열이나 api도 스레드파라미터로 넘어온 thread param구조체에서 사용 네개의 문자열과 두개의 api(loadlibrarya,getprocaddress:모든라이브러리함수 호출가능)를 가지고있음
Code injection 소스코드 InjectCode() : dll인젝션코드와 유사. 상대방 프로세스에 data와 code를 각각 메모리할당과 인젝션. CreateRemoteThread() api로 원격스레드 실행.
Code injection 디버깅 OllyDbg로 notepad.exe실행 후 notepad를 running.
Code injection 디버깅 인젝션된 스레드 코드 시작부터 디버깅되도록 옵션변경. → notepad에 스레드가 생성되면 해당 스레드함수 시작코드에서 디버깅 멈춤.
Code injection 디버깅 Process explorer로 notepad의 pid값을 구하고 Cmd로 codinjection.exe pid로 실행
Code injection 디버깅 코드인젝션이 성공하면 인젝션된 스레드 코드 시작위치에서 디버깅이 멈춘것을 확인 할 수 있다. = ThreadProc()함수 시작위치에서 멈춤.