I.Sly() 기초 활동 과제 6주차

나영·2024년 5월 9일

I.Sly()

목록 보기
6/8

강의 내용 정리


Reversing

물건이나기계장치혹은시스템등의구조,기능, 동작등을분석하여 그원리를이해하며단점을보완하고새로운아이디어를추가하는작업

= '완성품의설계도없이구조와동작과정을알아내는' 모든단계를의미

과정)
소스 코드가없는상태에서컴파일된대상소프트웨어의 구조를여러가지방법으로분석 메모리 덤프를 비롯한 바이너리 분석 결과를 토대로 동작원리와 내부구조파악 이를 바탕으로 원래의 소스가 어떻게 작성된 것인지 알아냄
→ 패치 , 크랙 , 게임핵 제작 등에 이용됨

분석방법

  • 정적분석방법(Static Analysis)

    • 파일을 실행하지 않고 겉모습을 관찰하여 분석하는 방법

    • 파일종류나크기,헤더(PE)정보, AP, 내부문자열, 실행 압축 여부, 등록 정보, 디버깅 정보, 디지털 인증서 등의 다양한 내용을 확인하는 것

  • 동적분석방법( DynamicAnalysis)

    • 파일을 직접실행시켜 분석하고디버깅통해 코드흐름과메모리상태 등을자세히살펴보는방법

    • 파일, 레지스트리, 네트워크 등을 관찰하면서 프로그램 행위 분석 디버거를 이용하여 프로그램의 내부 구조와 동작 원리 분석 가능

ASCIl

미국국립 표준협회(ANSI)에서 표준화한 정보교환용7비트부호체계
[ 33개의출력불가능한제어 문자 +95개의출력 가능한 문자]
• 0x00(0), NUL: 널문자(10)
• 0X0A(10),LF:개행(LineFeed),줄바꿈
• OxOD(13), CR: 57/(Carriage Return)
• 0x00~0x1F, 0x7F(0~31, 127): 제어문자또는비인쇄문자
• 0x20(32):스페이스(공백)
• 0x21~0x2F(33~47), 0x3A~0x40(58~64), 0x5B~0x60(91~96),0x7B~0x7E(123~126) :특수문자
• 0 X 3 0 ~ 0 x 3 9 ( 4 8 ~ 5 7 ) : 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9 숫 자
• 0x41~0x5A(65~90):A부터Z까지알파벳대문자
• 0X61~0x7A(97~122) :a부터z까지알파벳소문자

Byte Order

  • 엔디안(Endianness)
    컴퓨터 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법

  • 빅 엔디안(Big-endian)
    최상위바이트(MSB- Most Significant Byte)부터 차례 로 저장하는 방식

  • 리틀 엔디안(Little-endian)
    최하위바이트(LSB- Least Significant Byte)부터 차례로저장하는방식

Memory Structure Memory

프로그램의 실행을 위해 컴퓨터의 운영체제에서 할당하는 공간
(메모리공간은 크게Stack, Heap, Data, Code(text)로, 4개의영역으로나눌수있음)

  • RAM( =주기억장치, 메모리)
    자유롭게읽고쓸수있는기억장치 사용중인프로그램이나데이터가저작됨 휘발성 메모리

  • ROM
    기억된내용을읽을수만 있는기억장치 변경가능성이없는시스템 소프트웨어를 기억시키는데 이용 비휘발성메모리

Instruction Cycle

기계 코드가 실행되는 한 번의 과정

  1. Fecth: 다음실행할명령어를읽어옴
  2. Decode : 읽어온명령어해석
  3. Execute : 해석한 명령어 실행

Computer Structure

  • CPU (중앙처리장치)
    프로그램을 실행하고 입력된 데이터를 처리
  • Memory (주기억장치)
    실행 중인 프로그램(=프로세스)와 프로그램 실행에 필요한 데이터를 일시적으로 저장
  • Disk (보조기억장치)
    프로그램과 데이터를 영구적으로 저장
  • 프로그램
    컴퓨터를 실행시키기 위해 차례대로 작성된 명령어 모음
  • 프로세스
    정적 프로그램이 메모리에 올라와서 실행 가능해진 상태

레지스터

CPU에서 명령어를 실행하는 동안 필요한 정보를 저장하는 기억 장소 레받을수도 지스터의 개수와 크기는 중앙처리정치 종류에 따라 다름
목적에 따라 레지스터 종류가 나눠짐- > 전용/범용

범용레지스터(General Register)

  • 연산 결과를 받을수도 있으며, 연산에 사용될 수도 있는 레지스터
  • 필요에 따라서 자유롭게 사용이 가능함.
    (필요에따라 자유롭게사용하도록CPU가제공하는 레지스터)
  • 특정 용도 이외에도 자유롭게 사용할 수 있음

명령어 포인터레지스터(EIP=Extended Instruction Pointer)

  • 용도가엄격하게정해져있으며, 다음에실행될명령어가위치한주소를가리킴
  • 레지 스터에 어떤 값이 저장되어 있는지 파악하는 것이 리버싱에 도움이 됨

Assembly

Intel&AT&T

둘 다 어셈블리어로 서로 호환되지 않는 문법 지님

  • Intel Syntax: <명령어><피연산자1><피연산자2>; 주석
    Ex) mov eax, 5

  • 데이터 이동

    • mov a b : b(데이터)를 a로 복사
    • lea a b : b(주소)를 a에 저장
  • 스택 조작

    • push a : a(레지스터)의 값을 스택에 저장
    • pop a : 스택의 값을 a(레지스터)로 가져옴
  • 연산

    • inc a : a의 값을 1 증가
    • dec a : a의 값을 1 감소
    • add a b : a에 b를 더함 (a+=b)
    • sub a b : a에 b를 뺌 (a-=b)
  • 흐름 제어

    • jmp a : a(주소)로 가서 명령어 실행
    • cmp a b : a와 b를 비교. 이후에 분기문이 나옴. 조건 점프 명령어나 조건 이동 명령어와 사용
    • je (jump equal) a : 비교한 값이 같으면 a(주소)로 가서 명령어 실행
    • jne(jump not equal) a : 비교한 값이 다르면 a(주소)로 가서 명령어 실행
  • 프로시저

    • call A : A 함수 call 하고 그 주소로 제어를 옮김. EIP를 변경시킴
    • ret : Return. 호출된 함수에서 호출한 함수로 복귀. ESP에 있는 값을 꺼내 EIP에 할당

리버싱 기초문제 rev-basic-0


window 터미널에서 문제 파일 실행

IDA를 활용해서 문제풀이

F5를 클릭하여 디컴파일

sub_140001000을 클릭하여 내부코드 확인

"Compar3_the_string" 확인 후 window 터미널에 삽입

리버싱 기초 문제 int_reversing


gdb 와 pwngdb 설치

IDA를 활용해서 문제풀이

F5를 클릭하여 디컴파일 -> 326 확인

326 확인 후 pwndbg int_reversing에서 run 입력 후 삽입

리버싱 기초 문제 string_reversing


IDA를 활용해서 문제풀이

F5를 클릭하여 디컴파일 -> Hacked_By_ISly 확인

Hacked_By_ISly 확인 후 pwndbg string_reversing에서 run 입력 후 삽입

0개의 댓글