Normaltic Place 유튜브 모의 해킹 강의 2
[복습]
CPU <- Memory <- HDD
Programing
:
vi hello.c
#include <stdio.h>
int main() {
printf("Hello~");
return 0;
}
c언어 코드.
- printf: 화면에 "" 글자를 출력하는 것.
$ gcc hello.c -m32
$ ls
a.out
$ file hello.c
hello.c: C source, ASCII text
$ file a.out
a.out: ELF 32-bit ... executable
$ ./a.out
Hello~

8d4c2404(16진수)
- 컴퓨터에서 바이너리 데이터를 표현할 때는 16진수를 쓴다.
- 8진수로 표현된 부분은 "기계어"
- 우측에 있는 부분은 "어셈블리언어"
- call을 기점으로 분석한다.
브레이크 포인트
$ db @main

- b: 는 브레이크 포인트.
- 레지스터 <- CPU가 처리할 일들을 저장하는 공간.
- push: 스택에 상단의 정보를 저장하는 것
- pop: 스택에 상단의 정보를 가져오는 것
데이터가 저장되는 방식인 리틀 엔디안을 사용하니 찾아보기 (참조)
리버싱 엔지니어링 (참조)
헨드레이 (참조)
컴파일 (참조)
"gcc를 사용하면 c파일이 어셈블리어로 바뀐다"
프로그래밍 언어 종류
- 컴파일 언어: 어셈블리 언어로 변해야하는 언어.
- 인터프린터 언어: 컴파일이 필요 없는 언어(?)
-> CPU가 읽을 수 있도록 컴파일을 하지만 그 과정을 인터프리터 언어가 한다.
C언어, JAVA: 코드 작성 -> 컴파일 -> 실행
Python, js: 코드 작성 -> 실행.
- 작성된 코드가 언어에서 컴파일 되고 실행된다.
- 어셈블리언어에선 포인터 개념이 있기 때문에 리버싱을 위해서라면 무조건 C언어는 필수.
프로그래밍 Project
- 로또 번호 추첨 프로그램
-> 1~45까지 중복되지 않는 7자리
- 공부 매니징 프로그램 (이름, 성적, 국어, 수학, 영어)
-> 평균을 알려주기.
-> 부족한 과목 알려주기.
- 성적 기록 프로그램
-> 학생의 이름, 성적을 입력받으면, 엑셀파일에다가 차곡차곡 저장하는 프로그램
- 핫트랜드 팔로워 프로그램
-> 구글 최근 인기검색어 기반으로 해서 핫 키워드 하나를 알려준다.
- 오늘의 날씨 프로그램
-> 실행하면 지금 내가 있는 위치의 날씨를 알려준다.
-> 지금 내가 있는 위치 정보도 알아야함.
-> 오늘의 날씨도 알려줌