본문 바로가기
스터디/hacking

리버스 엔지니어링(Reverse Engineering) 강좌, 제 1강의 - 기초설명

by 깝태 2011. 1. 21.
리버스 엔지니어링 강의, 리버스 엔지니어링 강좌
[리버싱갤] 리버스 엔지니어링(Reverse Engineering) 강좌, 제 1강의 - 기초설명

안녕하세요~ 완소풉입니다. 제가 http://guestbook.blog.naver.com/aaaa875 블로그에서 허락하에
리버스 엔지니어링 강의를 퍼오게 되었습니다. 리버스 엔지니어링도 보안 전문가가 되기위해서 없어는 안되는 기술 중 하나 입니다.
(없어도 되긴 되겠지...?) 제가 보기엔 정말 잘 작성하셔서 배우다가 직접 쓰는것보단 이 강의를 보는게 낳겠다 싶어
퍼오게 되었습니다. 저도 어느정도 경지에 다다르면 그때는 제 강의를 또 쓰도록 하죠.. +_+

원본 링크 - http://blog.naver.com/aaaa875/110091618892



---------------------------------------------------------------------------------

안녕하세요~ W.H. 입니다.

제가 할 강의(라기보단 제가 공부하는 과정)은 처음 리버스 엔지니어링을 배우는 사람에게 적합한 강의(정말 쌩초보)인데요...

제가 공부하면서(지금도 하고 있죠) 거쳤던 과정 또는 몰랐던 용어 등을 자세하게 적는 방식으로 할겁니다.

그렇기 때문에 이해하기가 쉽다는 장점이 있지만 강좌 내용의 흐름이 쫌 엉뚱할 수 도 있고 내용이 부실할지도 모르지만 모두 보신후에는 리버싱 공부를 하기 훨신 수월하실 겁니다.(그게 이 강좌의 목표고요)

첫번쨰는 해쿨 도서관에 있는
http://www.hackerschool.org/HS_Boards/data/Lib_prog/Asm.pdf
요 파일을 받아서 읽어주세요
매우 쉽게 나와있어 딱히 많은 해설은 필요 없을듯 하네요
다만 용어설명 몇가지

4page
맵핑: 뭐에 뭐를 할당한다 이런 뜻으로 이해하시면 됩니다.
그니까 A라는 문자에 4116 (6510) 바이트를 맵핑하고
이말은 A라는 문자에 4116 (6510) 바이트를 할당하고
요렇게 해도 이해하는데는 문제 없습니다.(본 뜻은 살작 뉘양스가 다르긴 하지만요)

세그먼트와 오프셋에서 중간에 bus라는 말이 나오죠? 그건 진짜 선입니다.(전기선이요)
그리고 그아래 16비트 로케이션이란 말이 나오는데 그 뜻은 16비트로 표현할 수 있는 메모리 주소를 말하는데요... 1비트는 2개의 숫자를 표현(0과1)할 수 있으니까 16비트로 메모리 주소를 표현하면 최대값이 65536가 되네요.

"그래서 프로세스가 RAM에 자료를 쓸 필요가 있을 때 BUS를 통해 16비트 로케이션을 보낸다. 이전에는 컴퓨터가 가질 수 있는 메모리에 한계가 있었다. '
이 부분을
그래서 프로세스가 RAM에 자료를 쓸 필요가 있을 때 BUS를 통해 16비트 로케이션을 보낸다. "그래서" 이전에는 컴퓨터가 가질 수 있는 메모리에 한계가 있었다.
요렇게 바꾸시면 이해가 더 잘 되실겁니다.

5page
리퀘스트는 말그대로 요청입니다.(영어를 잘하면 컴터도 잘합니다 ㅋㅋ)

6page
'하지만 레지스터에 있는 번호는 제한되어 있다'
요 부분에서 번호란 데이터를 생각하시면 됩니다.
그리고 아래 레지스트 설명 처음보는 용어도 많으실텐데 전 뭐 그냥 그런가 보다 하고 넘어갔습니다만... 설명 갑니다
I/O 연산: input(입력) output(출력)의 약자인데요(1과 0아니에요) 더 알고싶은 분은
http://ko.wikipedia.org/wiki/%EC%9E%85%EC%B6%9C%EB%A0%A5 에 가보세요
루프(loop) : for,while이런거 있죠? 요것들이 루프의 한종류입니다. 무한루프 이떄 그 루프에요
리턴 어드레스(return address),프로세서(prosesser): 프로세서는 메모리에 올라온 프로그램이라 보시면 됩니다.
그리고 리턴 어드레스는...
만약 씨언어로
int main(void)
{
생략~~~~
function(value);
생략~~~~~
}
void function(int a)
{
생략~~~~
}
이런다면 메인에서 function함수를 호출하고 function함수가 일을 마치면 다시 main함수로 돌아와 할일을 마져 합니다. 이때 function함수로 갔다가 main으로 돌아올때 필요한 것이 요 리턴 어드레스입니다.
만약 main이 집이고 function이 공장이면 공장에 갔다가 집으로 돌아올려면 집주소를 알아야 돌아올 수 있지 않습니까? 그 집주소가 바로 리턴 어드레스입니다.

스택 오퍼레이션: 잘 모르겟네요.. ㅠㅠ
플래그 레지스터: 상대 레지스터라고도 하는데요 말그대로 산술 연산 결과(사칙연산의 결과)의 상태를 알려줍니다. 요건 또 세분화가 되서 여러가지가 있는데 나중에 다시 설명합니다. 자세한 정보는
http://ko.wikipedia.org/wiki/%EC%83%81%ED%83%9C_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0 요기로

오늘 저의 설명은 여기까지 입니다.
그 아래부분은 나중에 다시 다른 내용으로 가져올께요~