[dreamhack] rev-basic-0
·
reversing
리버싱 기본 중 기본 문제를 풀어보았다.  IDA로 분석해보았다.맥은 F5로 디컴파일 할 수 없으니 TAB키로 디컴파일한다.  main 함수를 보니 sub_14001190은 문자열을 받고 있으므로 scanf이다.if 조건문에서 sub_140001000을 통해 문자열을 비교하고 맞으면 correct 틀리면 wrong을 출력한다. sub_140001000을 클릭해봤다. strcmp() 함수는 string을 비교하는 함수이다.a1이라는 문자열을 Compare~과 비교해 0과 1을 리턴한다. Compar3~ 가 FLAG가 된다
RVA TO RAW, IAT
·
reversing
RVA TO RAWPE 파일이 메모리에 로딩되었을 때 각 섹션에서 메모리의 주소(RVA)와 오프셋을 잘 매핑해야 한다. 이러한 매핑을 RVA TO RAW라고 부른다RAW(File Offset)매핑 방식RVA가 속해있는 섹션 찾기공식을 이용하여 파일 오프셋을 계산공식RAW - PointerToRawData(파일에서의 섹션 시작 위치) = RVA - VA(메모리에서 섹션 시작 위치)RAW = RVA - VA + PointerToRawData 예제 #1 RVA = 3000일 때, RAW는 얼마인가?RVA는 400보다 크고 53200보다 작으므로 Section(text)에 있다PointerToRawData: 00000400VA: 01001000RAW = RVA - VA + PointerToRawData→ 300..
NT header, Section header
·
reversing
NT headerIMAGE_NT_HEADERS 구조체signature은 PE값을 가짐. (dos에서 MZ를 갖는 것처럼)IMAGE_FILE_HEADER //FileHeader WORD machine;CPU 호환칩의 고유한 번호를 저장WORD NumberOfSections;PE파일은 코드, 데이터, 리소스 등이 각각 섹션에 나뉘어 저장되는데, 섹션 개수를 알려주는 것. 이 값은 무조건 0보다 커야 한다. 실제 개수와 섹션의 개수가 다르다면 실행이 되지 않는다.WORD SizeOfOpticalHeader;IMAGE_OPTIONAL_HEADER32의 크기를 알려줌. 운영체제 때문에 명시하는 것.WORD Characteristics;파일 속성을 나타내는 값. 파일 속성이란, 실행 가능한 형태인지 DLL 파일인지..
함수 호출 규약, PE file
·
reversing
함수 호출 규약 calling convention함수를 호출할 때 매개변수(파라미터)를 어떤 식으로 전달하는가? 에 대한 일종의 약속caller: 함수를 호출한 코드callee: 함수 호출 당한 코드함수 호출 규약을 크게 3가지로 분류cdeclC언어에서 사용하는 방식. caller는 매개변수를 오른쪽에서 왼쪽으로 스택에 push. Caller가 함수 호출 후 스택 정리.stdcallcaller는 매개변수를 오른쪽에서 왼쪽으로 스택에 push. Callee가 스택을 정리. Window32 API에서 사용됨.fastcallcaller는 처음 몇 개의 매개변수는 레지스터에 저장해서 함수에 저장하고 나머지 매개변수는 오른쪽에서 왼쪽 순서로 스택에 저장하여 전달. callee가 스택 정리. x64매개변수 4개이고..
레지스터, 프로세스 메모리 구조, 섹션, 스택, 힙
·
reversing
플래그 레지스터프로세서의 현재 상태를 저장하고 있는 레지스터x64 아키텍처에서는 RFLAGS라고 불리는 64비트 크기의 플래그 레지스터가 존재함 - CF carry flag: 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정- ZF zero flag: 연산의 결과가 0일 경우 설정- SF sign flag: 연산의 결과가 음수일 경우 설정- OF overflow flag: 부호 이쓴 수의 연산 결과가 비트 범위를 넘을 경우 설정프로세스 메모리 구조- 섹션윈도우 PE파일은 PE헤더와 1개 이상의 섹션으로 구성됨섹션: 유사한 용도로 사용되는 데이터가 모여있는 영역섹션에 대한 정보는 PE 헤더에 적혀있음. 섹션의 이름, 섹션의 크기, 섹션이 로드될 주소의 오프셋, 섹션의 속성과 권한윈도우는 PE를 실..
악성코드 종류와 분석
·
reversing
악성코드: 악의적인 행위를 하는 코드. 실행파일(.exe, .com, .dll, ...), 스크립트(.bat, .docx, ...) 코드 등 다양한 유형의 소프트웨어공격자들은 악성코드를 사용해 시스템을 감염, 민감정보 훔치기, 제어 권한 획득, 감시 악성코드의 종류 - 기능과 공격벡터에 따른 분류- 바이러스, 웜: 자가복제 및 다르컴퓨터로 확산, 바이러스는 유저와 상호작용 필요. 웜은 상호작용 없이 확산 가능- 트로이 목마: 일반 프로그램으로 위장하여 사용자가 자신의 컴퓨터에 설치하도록 유도- 백도어/원격 접속 트로이 목마: 공격자에 의해 이미 침해된 컴퓨터에 원격 접속 혹은 원격으로부터 명령어를 수신 후 실행- 애드웨어: 사용자에게 원하지 않는 광고를 노출. 일반적으로 무료 다운로드를 통해 배포, 시스..