reversing.kr - Easy Unpack
·
보안/리버싱
todo: Find the OEP - OEP: Orignal Entry Point 1. EP 확인- 현재 EP: 0040A04B   2. 동적분석EP부터 쭉 실행해보며 jmp, call 명령어 부분을 유심히 볼 것- 처음 만난 jmp 명령어. OEP로 점프하는 것 같지는 않음. 패스  - GetProcAddress(), VirtualProtect() Call. 패커가 주로 사용하는 함수. 넘김 - 그 아래에 있는 LoadLivraryA() Call도 넘김  - byte단위로 무언가 비교하고 있음. dll 이름인 듯 - 여기 jmp 명령어 탈출, 그 아래 GetProcAddress()도 넘김  - 비교 후 결과에 따라 루프가 진행되고 있는 부분 - 아래 jmp문 2개 존재하며, `40A1D1`은 루프의 첫..
reversing.kr - Easy Keygen
·
보안/리버싱
문제가 abex' carackme2랑 비슷한 것 같음.readme.txt 파일을 읽어보면 `Find the Name when the Serial is 5B134977135E7D13` 확인 가능함.   1. 첫 번째 시도name에 'test' 입력했을 때, 동적분석으로 확인가능한 serial 은 '64454364'이다. name에 따라 serial이 계산되는 듯. 공식을 찾아봐야 할 것 같다.  2. 두 번째 시도name에 'aaaa' 입력, serial은 '71415171' 계산 루프를 확인해보자. - `MOVSX ECX,BYTE PTR [ESP+ESI+C]` : ESP는 0019FDF8, ESI는 0, C를 더한 스택 위치에 302010이 저장되어 있다.  - `MOVSX EDX,BYTE PTR [ES..
reversing.kr - Easy ELF
·
보안/리버싱
1. 기드라 디컴파일 - scanf 함수를 보면, 입력값이 &DAT_0804a020 위치에 저장됨- FUN_08048451() 함수 내부에서 scanf로 입력받은 위치를 검사하고 있음. 2. 조건 - DAT_0804a020 == 0x78 - DAT_0804a021 == '1' - DAT_0804a022 == 0x7c - DAT_0804a023 == 0xdd - DAT_0804a024 == 'X' - DAT_0804a025 == '\0' 올바른 입력값을 얻기 위해, 각 문자에 XOR 해주면 되겠다.* XOR의 특징 이용 # input 값을 구하기result = [0x78, '1', 0x7c, 0xdd, 'X', '\0']input = []input.append(result[0] ^ 0x34)input.ap..
x64 assembly basic
·
보안/리버싱
호출(Call): 프로시저를 부르는 행위 반환(Return): 프로시저에서 돌아오는 것 프로시저를 호출할 때는.. 프로시저 실행 후 원래의 실행 흐름으로 돌아와야 한다. call 다음의 명령어 주소(return address, 반환 주소)를 스택에 저장하고 프로시저로 rip를 이동 x64 어셈블리언어 call addr : addr에 위치한 프로시저 호출 [명령어 구성] - push return_address - jmp addr leave: 스택프레임 정리 [명령어 구성] - mov rsp, rbp - pop rbp # rsp에 rbp 값을 넣어주는건, 스택 어딘가에 있는 rsp를 현재 함수의 base 부분으로 부름. # 그리고 pop rbp해서 함수의 스택 정리 + 아래에 있는.. 저장해놨던 원래 스택 ..
Dreamhack Quiz: x86 Assembly 2
·
보안/리버싱
다음 어셈블리 코드를 실행했을 때 출력되는 결과로 올바른 것은? [Code] main: push rbp mov rbp, rsp mov esi, 0xf mov rdi, 0x400500 call 0x400497 mov eax, 0x0 // eax는 반환값. 즉, return 0 pop rbp ret write_n: push rbp mov rbp, rsp mov QWORD PTR [rbp-0x8],rdi //QWORD=8byte mov DWORD PTR [rbp-0xc],esi //DWORD=4byte xor rdx, rdx mov edx, DWORD PTR [rbp-0xc] //DWORD=4byte mov rsi,QWORD PTR [rbp-0x8] //QWORD=8byte mov rdi, 0x1 mov ra..
86 Assembly: Essential Part(1) quiz
·
보안/리버싱
86 Assembly: Essential Part(1) quiz 드림핵 리버싱파트 quiz문제 풀이 [Register] rcx = 0 rdx = 0 rsi = 0x400000 ======================= [Memory] 0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10 0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x43 0x55 0x5d 0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c 0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00 ======================= [code] 1: mov dl, BYTE PTR[rsi+rcx] 2: ..
#2 동적분석과 정적분석
·
보안/리버싱
Dreamhack ReversingCource #2 정적 분석(Static Analysis) 악성 프로그램을 분석하여 실제로 실행하지 않고 도구에서 특징 및 특성 확인. 파일의 종류, 크기, PE 헤더 정보, imprt/export API, 디버깅 정보 등... 다양한 내용 확인함 디스어셈블러를 이용해서 내부 코드와 그 구조를 확인하는 것 분석 환경의 제약에서 비교적 자유로움. (분석을 지원하는 도구만 존재한다면) 프로그램에 난독화(Obfuscation)가 적용되면 분석에 어려움이 생길 수 있다. 다양한 동적 요소를 고려하기 어려움 Ex) IDA 동적 분석(Dynamic Analysis) 격리된 환경에서 의심 바이너리를 실행한 후 그 행위를 모니터링하는 방법 어떤 입력에 대한 개별 함수 또는 프로그램의 ..
#1 리버싱이란?
·
보안/리버싱
dreamhack ReversingCource #1 프로그램: 컴퓨터가 실행해야 할 명령어의 집합. 바이너리라고도 불린다. 전처리: 소스코드가 컴파일에 필요한 형식으로 가공되는 과정이다. 주석 제거, 매크로 치환, 파일 병합의 과정을 거침. -E 옵션을 사용하여 소스 코드의 전처리 결과를 확인 가능. 컴파일: 소스 코드를 어셈블리어로 번역하는 과정이다. -S 옵션을 이용하여 소스코드를 어셈블리 코드로 컴파일 가능 어셈블: 어셈블리 코드를 기계어로 번역하고, 실행 가능한 형식으로 변환하는 과정 컴파일로 생성된 어셈블리어 코드를 ELF 형식의 목적파일로 변환. -c 옵션을 통해 opt.S를 목적파일로 변환. file 명령어 통해 파일 형식을 확인 해당 결과를 hexdump 통해 16진수로 출력 링크: 여러 ..