Home
Notice
Tag
Location
Guest
RSS
Admin
Write an Article
Usermode api hook removal
2008/10/30 18:54
언어(Language)/SYSTEM
#define makeptr( Base, Increment, Typecast ) ((Typecast)( (ULONG)(Base) + (ULONG)(Increment) )) #define incptr( Base, Increment, Typecast ) ((Typecast)RVAToVA( (ULONG)(Base), (ULONG)(Increment) )) ULONG RVAToVA( ULONG Base, ULONG Increment ); void Unhook( HMODULE Module, LPSTR Function ) { char MFileName[MAX_PATH]; GetModuleFileName( Module, MFileName, sizeof(MFileName) ); HANDLE hFile = CreateFile( MFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL ); SetFilePointer( hFile, 0, NULL, FILE_BEGIN ); ULONG dwTemp; dwTemp = GetFileSize( hFile, NULL ); BYTE *Base = new BYTE[dwTemp]; ReadFile( hFile, Base, dwTemp, &dwTemp, NULL ); CloseHandle( hFile ); PIMAGE_NT_HEADERS Nt = makeptr( Base, ((PIMAGE_DOS_HEADER)Base)->e_lfanew, PIMAGE_NT_HEADERS ); PIMAGE_EXPORT_DIRECTORY Exports = incptr( Base, Nt->OptionalHeader.DataDirectory[0].VirtualAddress, PIMAGE_EXPORT_DIRECTORY ); PBYTE FuncHooked = (PBYTE)GetProcAddress( Module, Function ); PBYTE FuncOriginal = NULL; char **Names = incptr( Base, Exports->AddressOfNames, char ** ); ULONG *Functions = incptr( Base, Exports->AddressOfFunctions, ULONG * ); ULONG RVA; ULONG VA; for ( ULONG i = 0; i < Exports->NumberOfNames;i++ ) { if ( _stricmp( incptr( Base, Names[i], char * ), Function ) == 0 ) { //protection against export table patching RVA = Functions[i]; VA = (ULONG)GetProcAddress( Module, Function ) - (ULONG)Module; if ( VA != RVA ) { ULONG *EATFunc = makeptr( Module, makeptr( Module, makeptr( Module, ((PIMAGE_DOS_HEADER)Module)->e_lfanew, PIMAGE_NT_HEADERS )->OptionalHeader.DataDirectory[0].VirtualAddress, PIMAGE_EXPORT_DIRECTORY )->AddressOfFunctions, PULONG ); EATFunc[i] = RVA; } FuncOriginal = incptr( Base, Functions[i], PBYTE ); break; } } //protection against extended code overwriting MEMORY_BASIC_INFORMATION Info; VirtualQuery( FuncHooked, &Info, sizeof(Info) ); ULONG OldProtection; VirtualProtect( FuncHooked, Info.RegionSize, PAGE_EXECUTE_READWRITE, &OldProtection ); i = 0; while ( FuncHooked[i] != FuncOriginal[i] ) { FuncHooked[i] = FuncOriginal[i]; i++; } delete []Base; VirtualProtect( FuncHooked, Info.RegionSize, OldProtection, NULL ); } ULONG RVAToVA( ULONG Base, ULONG Increment ) { PIMAGE_NT_HEADERS Nt = makeptr( Base, ((PIMAGE_DOS_HEADER)Base)->e_lfanew, PIMAGE_NT_HEADERS ); USHORT SCount = Nt->FileHeader.NumberOfSections; PIMAGE_SECTION_HEADER Sections = makeptr( Nt, sizeof(*Nt), PIMAGE_SECTION_HEADER ); for ( USHORT i = 0; i < SCount; i++ ) { if ( (Increment >= Sections[i].VirtualAddress ) && (Increment <= (Sections[i].VirtualAddress + Sections[i].SizeOfRawData)) ) { return ( (Increment - Sections[i].VirtualAddress) + Sections[i].PointerToRawData + Base); } } return Base + Increment; }
Creative Commons License
이 저작물은
크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스
에 따라 이용하실 수 있습니다.
"
언어(Language)
/
SYSTEM
" 분류의 다른 글
커널 디버거(WinDbg) 설치하기
리눅스 메모리 - 왜? Free RAM이 거의 남아있지 않을까?
Driver 컴파일 방법과 SoftICE 연결법
윈도우 디바이스 드라이버 개발환경 구축
윈도우 디바이스 드라이버 개발 방법
시대의 새벽길
2008/10/30 18:54
2008/10/30 18:54
api hook
,
Usermode
Leave a Commnet
Leave a Trackback
Move Top
Trackback Address:
http://darksoft.co.kr/trackback/166
이름(필수)
비밀번호(필수)
웹 사이트
비밀 답글
◀ PREV
[
1
]
...
[
432
]
[
433
]
[
434
]
[
435
]
[
436
]
[
437
]
[
438
]
[
439
]
[
440
]
...
[
597
]
NEXT ▶
Notice
블로그서비스 이전으로 인해 잘못 표기되는 포스트가 있을 수 있습니다. 해당 포스트를 발견하신 후에 댓글로 알려주시면 고맙겠습니다.
Category
All Category
(597)
판타지에 관하여
(18)
끄적끄적...
(5)
영상으로...
(4)
책으로...
(9)
가객 김광석(KimKwangSeok)
(9)
자료실(PDS)
(19)
언어(Language)
(287)
C++API+MFC
(126)
ATL+WTL+COM
(45)
SYSTEM
(9)
Web
(1)
Technical Know-How
(106)
포스트 모음(Post)
(181)
IT와 관련된...
(44)
Media와 관련된...
(46)
쓸만한 정보들...
(30)
어떤것에 대한 사용후기
(14)
죽음에 관하여...
(14)
그외...
(33)
짧은 생각(Short Thinking)
(82)
상념(Notion)
(43)
일상(Daily)
(39)
Recent Post
다크소프트 - 최근 글
Heavy Mach2 에서 드디어 구한 'ML-901'...
구로/가산 은 IT의 할렘가?
최악의 문자 오타 베스트 20
엔젤통합코덱 20100216 일자 버전이 나...
벅스(Bugs)의 액티브엑스 러쉬. 너무하...
엔젤벨로 초간단하게 아이폰 벨소리 만...
무료 벨소리 변환 프로그램, 엔젤벨 201...
무료 동영상 인코딩 프로그램, 엔젤인코...
보핍보핍(Bo peep Bo peep - 티아라) 고...
대답없는 네이트 고객센터
메모리 최적화 무료 프로그램 Nitro Mem...
Nitro Codec Pack 1.0 (니트로 통합코덱...
동네슈퍼 방문을 꺼리게 만든 햇반 200g
2010년 새해를 맞이하여 소원을 빌어본다
늘 작은 일만 주어진다고 여기는 그대에...
여전히 우울한 크리스마스
디아블로2(Diablo2)를 높은 해상도로 사...
일밤 단비를 봤더니, W가 생각난다.
김광석 클럽 2009년 마지막 정모
루저티셔츠, 루저탈출상품
재밌는 올블로그(블로그 칵테일) 인재채...
신구의 조화 또는 차이점, 최고의 주제...
슬릭스 3단 접이식 매트와 60수아사 피...
집념에서 허준까지, 동의보감의 미디어...
많은 것을 보여준 영화 '팬도럼(Pandoru...
유니세프 희망쇼핑 위젯 경품 당첨 공지...
티맥스소프트의 권고사직 사태를 보니,...
2012년 지구멸망 예언의 한축인 '웹봇'...
감동적이며 치열한 삶을 가져온 원더걸스
야후! 퍼플 이벤트
Wise Saying
프로그램은 내가 원하는대로 움직이지 않는다. 타이핑대로 움직인다. from Developer
Recent Photos
Tag Cloud
白夜行
WNDCLASS
구파일방
해제
체감
ini
IVY
RewriteRule
전쟁의 공포
개고생
강의
백숙
경제공화당
world
docking
CreateDIBSection
OLEARRAY
아이튠즈
퀴즈
아리따운 그녀
가산
아미
충돌
사양
전북 진
Konrad Lorenz
세바퀴
추선선물
HTML
티맥스소프트
Pandorum
해커
Rachel Weisz
onGUIInit
버그를 찾아라
iphone game
노동자
Windows 7 Upgrade Advisor Beta
_acp
신혼여행
Recent Reply
다크소프트 - 최근 댓글
관리자만 볼 수 있는 댓글입니다.
by 비밀방문자
제가 A/S 받은 지역은 서울시 구로구 입니다. 지방은 안되는거였더군요. 그런.. -_-; 그리고 등판 기댈...
by 시대의 새벽길
안녕하세요.저도 201b 사용하고 있습니다. 실례지만 지역이 서울 아님 수도권이신가요? 그 외 지방은...
by 이노체어유저
비트레이트 값은 동일할겁니다. 화질이 틀리다면, 샘플링이나 다른 설정값등을 수정해보는게 어떨까요?
by 시대의 새벽길
보니까 구버전은 비트레이트가 1000k 1500k이런식이었는데 신버전은 그냥 1000 1500 이러더라구요.....
by 야라랄
결국은.. ^^;;
by 시대의 새벽길
그쵸 이번에 기앙코티 5권 새로 나왔는데 이게 완결이래요.. ㅠㅠ 정말 한방에 훅~~ 갔어여 ㅜㅜㅜㅜ...
by 항해자
Recent Trackback
3천원으로 시청자 우롱하는 일밤 <단비> 우물파기 프로젝트
by 비니루의 대충문화
멈추지 않는 액션! 영화 2012
by 리오빠의 블log
원더걸스의 아메리칸 드림_무릎팍 도사
by 지구촌을 가슴으로 품자 (hughuman.com) - 국제개발의 무대 -
블루레이 무선 홈씨어터, 유튜브를 즐기는 새로운 방법(7)
by 엑스캔버스 블로그
변희재와 듣보잡 논쟁?
by 하민혁의 민주통신
무서운 코리아에게 버림받은 재범은 제2의 펭귄맨?!
by Green Monkey Blog**
2PM 재범의 배설과 광분한 대중들 배설의 차이??
by Green Monkey Blog**
Unicef 희망쇼핑
희망쇼핑 위젯
은 블로그 또는 웹사이트에 붙여 사용하는 웹 위젯으로써 본인 또는 방문자들이 내 블로그에서 또는 개인 홈페이지에서 유니세프와 함께하는 쇼핑몰에서 본인이 구매한 금액 중 일부를
유니세프 세계 어린이들에게 도움을 줄 수 있는
위젯입니다.
Counter
Total Counts:
645356
Today:
838
Yesterday:
1125