SimpleInjector - 간단한 dll 인젝터 프로그램
프로그래밍 2017. 12. 18. 17:18 |환경
OS |
Windows10(Build ver 16299.125) |
DLL 인젝션 할때 cmd로 하는 것이 번거롭고, winapi 공부할 겸 만든 프로그램
사용법
1. 텍스트 컨트롤1(PID Double Click) : 창에서 PID 열을 더블클릭하면 PID 값을 쓴다. 또는 직접 입력
2. 텍스트 컨트롤2(DLL PATH) : 옆에 Get Path를 클릭해서 경로를 얻거나 또는 직접 입력(절대경로)
3. 버튼1(Refresh) : 프로세스 새로고침
4. 버튼2(Inject) : DLL 인젝션 버튼, PID와 DLL PATH 값은 올바른 값이어야한다.
5. 버튼3(Eject) : DLL 이젝션 버튼(제거), PID와 DLL PATH 값은 올바른 값이어야한다.
6. 스태틱 텍스트(Status) : 성공, 실패 등 상태를 나타냄
파일
1. SimpleInjector32.exe(32비트 프로그램 인젝터)
2. SimpleInjector64.exe(64비트 프로그램 인젝터)
3. testDll32.dll, testDll64.dll(테스트용 DLL파일, 성공하면 메시지박스 2개가 뜬다.)
4. notepad.exe(32비트 메모장)
* 메모장, Explorer.exe로 테스트 해본 결과 잘된다.
주의점
1. 잘은 모르겠지만 관리자 권한으로 실행
2. 다른 환경(win7, xp등)에서 실행될지 안될지 잘 모르겠다.
3. 테스트 기간이 짧아 아마도 버그 존재할듯
4. 안되는 프로그램이 많음
상용프로그램은 아마 잘 안되는 경우가 많을 것이다.
5. 상태가 성공이라도 인젝션이 안될 때가 있다.
예를 들어 마이크로소프트 프로그램(계산기, 엣지 등등)은 성공해도 인젝션한 DLL이 실행이 안된다. 아마도 자신들이 만든 DLL 파일이 아니면(프로세스 익스플로러에서 확인 했을때 Company Name이 Microsoft... 인것) 로드가 안된다.
한번 System32폴더에 있는 아무 DLL이나 한번 인젝션 해봤는데 그건 됐다.
6. 타겟 프로세스 64bit, 32bit 구분
7. 같은 파일의 인젝션은 한번만
같은 파일을 여러번 인젝트 하면 무언가 꼬이는 것 같다.
만약 인젝션을 여러번했다면 이젝션도 같은 횟수로 한다.
처음으로 winapi로 UI 환경 만들어 보니 어렵다. 정렬같은 편의를 위한 기능을 넣고 싶었는데 아쉬웠다.
참고 사이트/소스
winapi 튜토리얼1(http://zetcode.com/gui/winapi/)
winapi 튜토리얼2(http://www.winprog.org/tutorial/start.html)
winapi 리스트뷰(http://www.willemer.de/informatik/windows/winlistv.htm)
shlwapi(http://mindgear.tistory.com/242)
minhook(https://www.codeproject.com/Articles/44326/MinHook-The-Minimalistic-x-x-API-Hooking-Libra)
reversecore(http://www.reversecore.com/)
RtlInjector(https://github.com/NtOpcode/RtlCreateUserThread-DLL-Injection)
'프로그래밍' 카테고리의 다른 글
dll 인젝션 해보기 (5) | 2017.12.12 |
---|---|
MinHook으로 API 후킹 간단하게 하기[1] (2) | 2017.12.08 |