1579, 6/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 : 5020     Date : 2017/02/21 11:59
[불법/스팸글로 신고하기]



    
1479   실제 침투를 위한 해킹을 배우려면....[5]     choboKing
12/16 7465
1478   [해킹,보안] 메타스플로잇을 이용한 안드로이드 해킹     chojh03
12/11 5333
1477   프로그램 기초 공부[1]     ptw1201
11/10 5016
1476   윈도우10/8/7 텔넷 다운로드     solver
10/22 5375
1475   putty 한글 깨질 때     solver
10/22 4397
1474   putty     solver
10/22 4163
1473   소스코드를 올릴 때     solver
10/22 5350
1472   CPU 레지스터의 종류 및 용도 설명[2]     kite7062
09/23 8874
1471   프로그래밍을 공부하실때     alscjf7612
06/06 6543
1470   레벨업     alscjf7612
06/06 5535
1469   Snort ubuntu 14.04 설치 동영상 좋은게 있어서 퍼옵니다![1]     rlawnsgh92
04/08 6017
1468   밑에 버퍼오버플로우 왕기초 찾으신다는분[1]     치킨발랄
03/13 7016
1467   레벨업 하려면     zeuswoo7
03/03 5960
1466   유치원10강좌끝인가요?[1]     hwan71
03/03 5618
1465   레벨 올려 주세요...     dhuh
03/02 5741
1464   아직도...     dhuh
03/02 5996
1463   시작했습니다.[1]     dhuh
03/02 5635
1462   레벨[1]     dhuh
02/29 5868
1461   해커스쿨 가입한 사람입니다[1]     wldud
02/19 6026
1460   버퍼오버플로우 왕기초편 pdf 파일 어디서 구할 수 있나요?     duduwon
02/08 7756
[1][2][3][4][5] 6 [7][8][9][10]..[79]

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