본문 바로가기

REVERSING

(12)
[SWING] Reversing 04 과제 1 RVA to RAW란 PE File이 메모리에 로딩되었을 때, 각 Section에서 16진수의 Memory 주소(RVA)와 File Offset을 매핑(Mapping)하는 과정이다. 여기서 RAW는 File Offset을 의미한다. 기본적인 방법은 다음과 같다. 1. RVA가 속해 있는 section을 찾는다. 2. 다음의 비례식을 이용해서 RAW(File Offset)을 계산한다. RAW - PointerToRawData = RVA - VirtualAddress RAW = RVA - VirtualAddress + PointerToRawData Q2. RVA = 13314일 때 FILE OFFSET = ? RVA = 13314 이므로 ImageBase(01000000)을 고려해 계산해보면 VA ..
[SWING] Reversing 03 과제 1 fastcall 기본적으로 stdcall과 방식이 같다. 함수에 전달하는 파라미터 일부(2개까지)를 스택 메모리가 아닌 레지스터를 이용하여 전달한다. 함수의 파라미터가 4개라면 앞의 두개는 ECX, EDX파라미터를 이용하여 전달한다. 파라미터 전달시 스택이 아닌 레지스터에 접근하기 때문에 훨씬 더 빠르다는 장점이 있다. 과제 2 Lena's Reversing 파일이 잘 열리지 않아서 구글링해서 같은 파일을 찾아 다운받았는데 코드가 중간에 조금 다른 부분이 있어 잘 되었는지 모르겠습니다. 너른 양해 부탁드립니다. 미션 : Nag 를 제거하고, 올바른 등록 코드를 찾아라! MsgBox 쓰여있는 곳 클릭. 해당 함수가 사용된 모든 곳에 breakpoint 가 걸린다. F9 눌러 실행하여 도착한 곳에서..
[SWING] Reversing 02 과제 1 stackframe.exe 다운받기 >> book/StackFrame.exe at master · reversecore/book · GitHub #include "stdio.h" long add(long a, long b) { long x=a, y=b; return (x+y); } int main(int argc, char* argv[]) { long a=1, b=2; printf("%d\n", add(a, b)); return 0; } stackframe.exe 의 소스 코드는 다음과 같이 이루어져 있다. 1. 메인함수 시작 2. a 변수에 1 저장, b 변수에 2 저장 3. add() 함수 호출 4. add() 함수의 a 파라미터에 1, b 파라미터에 2가 들어가 있음 5. a의 값을 x 변..
[SWING] Reversing 01 과제 1 어셈블리 언어 명령어 1. 비트연산 : shift 연산 1) 부호가 없는 연산 - 왼쪽으로 이동 : shl - 오른쪽으로 이동 : shr 2) 부호가 있는 연산 (MSB를 유지) - 왼쪽으로 이동 : sal - 오른쪽으로 이동 : sar 2. 제어 명령 설명 사용 예 cmp 두 개의 오퍼랜드 비교 (뺄셈 연산 후 플래그 설정) cmp ecx, 0 test 두 개의 오퍼랜드 비교 (AND 연산을 수행 후 플래그 설정) test eax, eax call 해당되는 주소의 함수를 호출하여 수행 코드 위치를 옮김 call 0x12345678 int 오퍼랜드로 지정된 예외 처리 수행 (0xcd) 중단점으로 디버그용 소프트웨어 트랩 (0xcc) 오버플로우 예외 상황시 발생하는 트랩 (0xce) 하드웨어 디버..