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



    
1499   스크립트알려주실분~1     lcd7132
05/03 3942
1498   스크립트알려주실분~     lcd7132
05/03 3795
1497   디지털포렌식2급 실기 따신분     rabbitlycat
04/30 3840
1496   워게임 문제 힌트좀 주실분 구함     rabbitlycat
04/30 4074
1495   관리자님 있긴 한가요??[1]     rabbitlycat
04/30 3730
1494   BOF책 입문자 추천좀 해주세요!     rabbitlycat
04/30 4109
1493   스크립트 알려주실분~2     lcd7132
04/29 3921
1492   스크립트 알려주실분~1     lcd7132
04/29 3776
1491   스크립트 알려주실분~     lcd7132
04/29 3884
1490   레벨업!2     lcd7132
04/27 3668
1489   레벨업!1     lcd7132
04/27 3630
1488   레벨업!     lcd7132
04/27 3387
1487   대학생강좌보고싶어요     lcd7132
04/26 3829
1486   정보공유하는 단톡방잇으면 부탁좀요     lcd7132
04/26 3558
1485   정보공유하는 단톡방잇으면 부탁좀요     lcd7132
04/26 3524
1484   스크립트 잘만드시는분~     lcd7132
04/26 3745
1483 비밀글입니다  해커스쿨 관리자님께     packer
03/20 2
1482   워게임 사이트입니다. [4]     wkdqkf2
03/18 5220
1481   안녕하세요?     wkdqkf2
03/18 4214
  리버스 엔지니어링 (어셈블리) -1     salangi11
02/21 5126
[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