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



    
1440   방화벽 설명 입니다.[2]     oldlove7
08/17 6769
1439   바이러스 만들기[8]     akwjs566
03/31 7761
1438   바이러스 종류[11]     akwjs566
04/11 5751
1437   배열 내에서 랜덤한 n개 추출하기[2]     kjwon15
12/05 10318
1436   배열[1]     han0161
06/14 5491
1435   백도어를 하실줄 아시는 분[6]     hacs98
05/03 6483
1434   백도어란??(이거 맞나요??)[4]     H.R.T
12/13 9183
1433   백트랙의정석 제2-1강[5]     인천해커
01/21 11524
1432   백트랙5 사용법/자세히좀 알려주세요[3]     cswcys
09/20 33110
1431   백트랙 설치방법 2     hacs98
05/05 6003
1430   백트랙 설치방법     hacs98
05/05 6407
1429   백트랙 잘하시는 분 찾습니다[1]     hacs98
05/05 6018
1428   메모리 덤프(블루 스크린=STOP 스크린) 코드 및 해결[1]     ROK.AF
02/09 10521
1427   막 간지나게 해킹하고싶어요[13]     dldvk9999
10/11 31603
1426   리버스엔지니어링 잘하시는분..?     pcw0629
08/26 3748
  리버스 엔지니어링 (어셈블리) -1     salangi11
02/21 5327
1424   리버스 엔지니어링 [1]     festal
09/24 6217
1423   리버싱 기초 지식 정리해봤습니다.[1]     libera826
12/25 4926
1422   리버싱 직접 공부하실수 있게 해드립니다.[1]     xellos1234
01/07 3344
1421   리모트에서 명령어 실행시키기[1]     xiangyi
02/03 8923
[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