97, 1/5 회원가입  로그인  
   메버리키
   요즘 reverscore 게시판 보고있는데..

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=21 [복사]


리버스엔지니어링 분야에 DLL injection 이랑 API hooking 이 있는지는 정말 몰랐었어요..
중요한건 소스들을 하나도 못알아먹겠다는거에요...
그래서 질문인데
저 두개를 구현하려고 쓰인 소스들을 이해하거나 제가 짜보려면 뭘 공부해야하죠?
API? MFC?
C인건 확실한데 이해가안되서 C를 처음부터 다시보고있긴한데
제가 흥미있어하는 부분인데 이해를 못하겠으니까 답답해죽겄슴다..ㅠㅠ

  Hit : 4164     Date : 2011/08/08 09:30



    
늅늅 소스좀 올려랔ㅋㅋ
저쪽이면 API겠지머
2011/08/09  
$Zero DLL injection API hooking 둘다 API를 배우셔야합니다.

API는 단지 프로그래밍 언어가아니라 윈도우 구조 그 자체입니다.

(동작 방식 , 윈도우가 필요로 하는 리소스 등등)

API가 너무 방대하고 어려워서 API를 랩핑해서 사용하는 Visual Basic이나 C#등등이 나오게 된것이구요 .

API배우시려면 굉장히 오랜 시간이 걸리실거에요 .

또 MFC는 단지 API 함수 혹은 윈도우클래스를 C++처럼 클래스화 (캡슐화) 시킨것입니다.

이해하기는 난해하지만 윈도우프로그래밍을 매우 쉽게해주는 언어에요 .

개발속도가 향상된다는 것 빼곤 API보다 특출난 장점이 없습니다.

2011/08/09  
메버리키 감사합니다 제로님 정말 초보들한테 유익한 답글 많이달아주시는것 같아요..
API 공부는 어떻게하는게 바람직하죠??
너무 양 이많고 인자들도 뭐 hinstance이런식으로 이름부터 어렵고 또 많아서 어디서부터 접근해야할지 머리가아파요..
C의 문법처럼 API용으로 따로 배워야하는 문법도 있나요??
2011/08/09  
$Zero 윈도우 API경우 호환성의 이유로 마이크로소프트 사에서 정의한 자료형을 많이 씁니다.

마이크로소프트 사에서 정의했다고해도 전부 구조체 아니면 typedef로 약간 다르게 선언한것들 뿐입니다.

예를들어 char 은 CHAR로 typedef로 선언되어있으며 더 나아가

64비트 변수들을 32비트에서 호환이 되도록 다형성을 정의하고 있습니다.

TCHAR이라는 자료형을 조건부 컴파일해서 64비트 시스템에선 64비트 호환으로 32비트 시스템에선 32비트호환으로 변하도록 typedef와 #define 등등 전처리기 명령어로 조건부 컴파일을 하고있습니다.
(위의 TCHAR은 비트호환보단 와이드캐릭터셋 , 멀티캐릭터셋 등등 문자셋 호환을 위해 존재합니다.)

이 덕분에 윈도우 프로그램들은 매우 뛰어난 호환성을 가질 수 있지요 .

하지만 같은 C언어 인데도 불구하고 처음보는 사람은 이해조차 할 수 없습니다.

그래도 이런 점들을 배우는 건 별로 어렵지도 않고 시간이 많이 걸리지도 않아요.

API 정복이란 책을 정독하시면 hInstance 는 뭐고 HANDLE , HWND 등등 생소한 자료형들에 대해 알게되실겁니다.

생소한 자료형들은 모두 구조체 이거나 typedef 로 선언된 C언어의 자료형들 입니다.

DWORD역시 unsigned int 를 typedef 한것뿐이구요 .

얼핏보면 MS에서 자기들 멋대로 C언어를 개조한것 같지만, 호환적인 측면에서 매우 편리한 서비스입니다.

단지 MS에서 호환성에 많은 신경을 쏟다보니 그렇게 자료형들을 생소하게 만든것이구요 . 기존 C언어와 다를 바 없습니다.

굳이 다른 점을 뽑자면 윈도우 특유의 동작방식인 이벤트 드리븐 방식이라는 점입니다.
(윈도우 특유라지만 자바도 그렇고 이벤트 드리븐 방식으로 동작하는 언어는 꽤 많습니다.
주로 객체지향.)

유일하게 C언어와 차이점을 보이는 부분입니다. (이 부분은 운영체제가 알아서 처리하는 영역이므로 별로 신경쓸 필요는 없고 이해만 하시면 됩니다.)



2011/08/11