*OpenProcess에서 실제 프로세스를 실행한다.. << 이거 주소바꾸면 재미난일이된다.
*PEView사용
http://www.magma.ca/~wjr
*PE 헤더
FILE_HEADER
SECTION_HEADER
SECTION등으로 나옴
--- IAT정보들이 나와있다..
==> 이걸보면... 어떻게짰는지 방법이 다나온다..
*다른방법
==> IAT를 조작하지않고.. 직접 어셈블리 자체를 건드려버린다.
Kernel32.DLL을 후킹한다. 그리고 주소를 얻어와서 Write권한얻고... 기존의 내용을 백업한다.
그리고나서 그공간에 내가 실행하려는것과 주소 차이값을 가지고있다가...
0xE9(어셈블리로 jmp)를 넣는다(물론 타겟주소는 내가 작성한것이다.)...
memcpy면 가능하지? ㅡㅡㅋ
이건 unhook시에는 0xE9로 대체한곳을 변경한다. 단... 이러한경우 작업중인프로세스들에서 죽을수도있다
후킹한 함수에서는 실제 후킹하기전에 unhook을 하고 OpenProcess를 한다. (OpenProcess를 후킹해야한다) 그리고 다시 hook을 한다. 그리고 여기에다 동기화를 걸어주어야한다.
*근데 내걸 건드리는건 문제가 안되는데.. 남의 프로세스를 어떻게 건드릴까?
남의 프로세스의 VMS에 들어가는것..
SetWindowHook이나 CreateRemoteProcess를 이용하면.. 들어갈수있다!
*Referrence
http://www.zap.pe.kr
루트킷 : 윈도우 커널 조작의 미학
윈도우디바이스드라이버 (이봉석,이재홍) 한빛미디어
Windows CE 실전가이드
Windows 시스템 커널에 대한 이해.(이거 이름이 맞나? ㅋㅋㅋ)
윈디버거 << 커널레벨까지 내려가야한다.
리버스엔지니어링 (역분석구조와 원리) : 별로 볼건없다는..
*소스에서 injectionDLL함수 Copy&Paste하면 된다. ㅋㅋㅋㅋㅋ
*부팅의 개념
-부팅이란?
MBR : 마스터 부트 레코드. 어떤 O/S로 부팅할까 선택도 가능하다.
부트타임때 가장 핵심적인 역할
각종 테이블 초기화 : SDT, IDT << 중요하다! (서비스DT,인터럽트DT)
IDT는 함수포인터의 배열이다. 해당인터럽트가오면 IDT를 찾아가서 ISR(함수) 일을 실행한다.
즉, 이놈은 장치->커널
if) IDT를 건드릴수 있다면? 거기에서 ISR주소를 변경하는것이 싸움...
SDT는 UserLevel -> 커널
IDT,SDT를 건드려놓으면... 죽어도 UserLevel에서 못잡는다.. 여기에 후킹해놓으면.. 답없다는소리이다.
보안성과 호환성은 항상 반대이다.
*대략적인 구조.
User SDT
--------------↓-------↑-------------
Kernel Export
↑ IDT
Driver (Miniport Driver)
--------------------------------
장치 (Device)
반응형
댓글