1580, 74/79 회원가입  로그인  
   salangi11
   리버스 엔지니어링 (어셈블리) -1

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8386 [복사]


리버스 엔지니어링을 위한 어셈블리







1. C와 어셈블리를 비교할 때, 어셈블리는 한번에 하나의 동작.




2. 지금 배우는 것은 IA-32(가장 대중화된 것.)




3. 기본형태 : "명령어 + 인자"




4. 옵코드(opcode)=명령어




5. 인자 : 어떤 장소? + 명령어에 영향 받는 것 = 오퍼랜드(operand)




6. push를 쓰면 스택에 값이 넣어짐.


스택이란?

스택(stack)은 모든 원소들의 삽입(insert)과 삭제(delete)가 리스트의 한쪽 끝에서만 수행되는 제한 조건을 가지는 선형 자료 구조(linear data structure)로서, 삽입과 삭제가 일어나는 리스트의 끝을 top이라 하고, 다른 한쪽 끝을 bottom이라 한다. 스택은 종종 pushdown stack이라고도 하는데, 스택의 top에 새로운 원소를 삽입하는 것을 push라 하고, 가장 최근에 삽입된 원소를 의미하는 스택의 top으로부터 한 원소를 제거하는 것을 pop이라 한다. 이와 같은 스택 연상은 항상 스택의 top에서 발생하므로 top 포인터의 값을 1씩 증가 또는 감소시킴으로써 수행된다.


[네이버 지식백과] 스택 [stack] (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 일진사)




7. mov도 push랑 비슷한데, 조금 다름

ex) push 12

=>는 스택에 12라는 값을 넣는 것

mov oo, 1000

=>oo에다가 1000 넣는 것.



memcpy는 메모리 복사 함수고, strcpy는 문자열 전체 복제 함수라 C언어에서 볼 때, 이것과 같다고 해줄 수 있을 것 같다.




8. 어셈블리는 단순


->단순함에서 어려움이 나옴.




C언어로는 쉽게 표현할 수 있는 것이 매우 길게 표현될 수 밖에 없으니까.




9. 레지스터

IA-32의 범용 레지스터는 총 8개, 레지스터를 '변수'라고 생각하자. CPU가 사용하는 변수라고.

연산 레지스터로 EAX, EDX, ECX, EBX가 있으며 주소 레지스터로 ESI EDI등이 존재한다.




9-1. 연산 레지스터




EAX : 산술 계산을 하며, 리턴값(컴퓨터 프로그래밍에서 return 문은 현재의 함수에서 값이나 주소를 반환할 때 사용한다.)을 전달한다.

가장 많이 쓰는 레지스터. 연산에서 사용된다.

EAX의 A가 Accumulator의 약자이다.




EDX : EAX와 같이 연산에 이용하되, 리턴 값의 용도로 사용되지 않는다.




ECX : 반복문을 사용할 때, 반복에서 탈출하기위한 역할이 필요하다. 조건을 설정하고 (i<10) 그 조건을 증가시키는 카운팅(i++)을 통해

반복문을 중단하고 탈출하게 된다. 어셈블리에서 사용되는 카운팅이라 부를 수 있는 ECX는 처음 초기 값에서 1씩 감소하고, 카운터(i)가 0이 될 때, 반복문을 중단한다.

C가 count의 약자이다.




EBX : 의미 없다. 부족해서 공간이 더 필요할 때, 사용한다.







9-2. 주소 레지스터




ESI : 시작지 인덱스




EDI : 목적지 인덱스




ESI의 값을 EDI로 복사한다고 생각하면 쉬움. (S와 D가 Source와 Destination의 약자.)







9-3. 세부(하위) 레지스터




AX : 16비트(2바이트)

AH : 8비트(1바이트)

AL : 8비트(1바이트)




Ex) EAX가 0xabcdefgh라면

EAX의 AX는 efgh, AH는 de, AL은 gh다.



​추신 : 빨리 유치원생에서 탈출하면 좋겠다.
        뭔가 오류있으면 말해주십시오!!!


참고 : 리버스 엔지니어링 바이블. 위키백과

  Hit : 7237     Date : 2017/02/21 11:59



    
120   레벨[1]     dhuh
02/29 7589
119   시작했습니다.[1]     dhuh
03/02 7459
118   아직도...     dhuh
03/02 7733
117   레벨 올려 주세요...     dhuh
03/02 7516
116   유치원10강좌끝인가요?[1]     hwan71
03/03 7142
115   레벨업 하려면     zeuswoo7
03/03 7706
114   밑에 버퍼오버플로우 왕기초 찾으신다는분[1]     치킨발랄
03/13 8835
113   Snort ubuntu 14.04 설치 동영상 좋은게 있어서 퍼옵니다![1]     rlawnsgh92
04/08 8246
112   레벨업     alscjf7612
06/06 7623
111   프로그래밍을 공부하실때     alscjf7612
06/06 8661
110   CPU 레지스터의 종류 및 용도 설명[2]     kite7062
09/23 10410
109   소스코드를 올릴 때     solver
10/22 7684
108   putty     solver
10/22 5649
107   putty 한글 깨질 때     solver
10/22 5931
106   윈도우10/8/7 텔넷 다운로드     solver
10/22 7151
105   프로그램 기초 공부[1]     ptw1201
11/10 7122
104   [해킹,보안] 메타스플로잇을 이용한 안드로이드 해킹     chojh03
12/11 6984
103   실제 침투를 위한 해킹을 배우려면....[5]     choboKing
12/16 9369
  리버스 엔지니어링 (어셈블리) -1     salangi11
02/21 7236
101   안녕하세요?     wkdqkf2
03/18 5771
[1]..[71][72][73] 74 [75][76][77][78][79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com