security/리버싱 - CodeEngn.com 5

Advance RCE L01 ~ L07

L01. Basic L19랑 동일, 프로그램 종료 시간 구하기 - UPX로 패킹되어있고 - 오버레이 존재한다, Autoit compiled script가 들어있음 - "CodeEngn.com by Lee Kang-Seok" 메시지박스 출력되고 대략 12초 후 창 꺼진다 역시나 Ollydbg로 분석해보니 안티 디버깅 기법 적용되어있었음 KERNEL32!IsDebuggerPresent API 호출을 통한 디버거 탐지 기법 적용되어있음 JNZ 004338DE 를 JMP 0040E96F로 패치하여 다른 파일로 저장한다 (의미없는 점프문) Search for string 해도 의미있는 문자열 안 나오고 (동적으로 복호화되는듯) Search for intermodular calls 에서 MessageBoxW API..

Basic RCE L16~L20

L16. Serial 값 구하기 (Name = "CodeEngn" 일 때) 콘솔 프로그램이네. "Enter your Name:" 출력, 이름 입력 시 "Enter your Password:" 출력, 틀리면 "Wrong password!" IDA 디컴파일 기능을 이용해 분석해보면 if(v12==v13) 결과에 따라 성공/실패 분기가 나뉜다 * v12는 password로 입력받은 값이 그대로 들어가고 (cin 으로 &v12에 바로 저장) * v13은 name으로 입력받은 값 가지고 조작해서 생성함 (v14) bp 걸어놓고 스택 상태 확인해보자 int v12 = [ebp-0x40] // password로 입력한 숫자가 들어가네 ("1234" => 4D2) unsigned int v13 = [ebp-0x3C] ..

Basic RCE L11~L15

L11. OEP + Stolen Bytes HxD로 까서보니 UPX 패킹되어있네 언패킹해보았더니 EP=4071F0 에서 OEP=401000으로 바뀌었다 언패킹 된 파일을 실행해보았더니 문자열 깨진 MessageBox 뜨더라 - Stolen byte 때문? 11.exe를 ollydbg로 열어보니 0x401000부터 0x40100B까지가 NOP로 채워져있음. Stolen byte automatic unpack 옵션 체크해제하고 다시 연 다음 POPAD로 간다. PUSH 명령어 3개 발견가능 => stolen bytes: 6A0068002040006812204000 L12. Key 값 + 코드 패치 (RVA to RAW) Detect It Easy에 던져보니 패킹 안 된 순수한 파일 serial key 입력하..

BASIC RCE L06~L10

L06. 패킹된 파일의 OEP + Crackme Serial 평범한 Crackme 문제. Serial 값을 입력하고 check serial 버튼 누르면 됨 틀리면 "Wrong serial!!!!" Messagebox 뜸 HxD로 열어보니 섹션이 UPX0, UPX1, .rsrc 이렇게 3개. 전형적인 UPX packed file upx.exe -d 06.exe 해서 unpack 한다 (file size 26112 에서 159744로 증가!) 1) EP 찾기 EP는 unpacked된 파일을 PE View로 확인해보면 Image Base + RVA of EP = 00401360 (ollydbg로 열어봐도 마찬가지) 혹은 UPX packed file은 PUSHAD - POPAD - OEP JMP 한다는 아이디어..

BASIC RCE L01~L05

L01. HDD to CD ROM 실행시켜보니 "Make me think your HD is a CD-Rom" 문자열 가진 MessageBox 등장 확인 누르니 "Nah... This is not a CD-ROM Drive!" 문자열 가진 MessageBox 등장 코드 분석해보니 kernel32!GetDriveTypeA("c:\") 호출 후 리턴값을 받아서 EAX는 2 감소시키고 (API 호출 후 리턴값: 일반 실행 시 3) ESI는 3 증가시킨 후 (API 호출 직후 64bit Win10 PC에선 401000[Entry Point]로 세팅. 32bit Win7 PC에선 0) CMP EAX, ESI 해서 같으면 성공, 다르면 실패 - CMP 시 ESI = 0x3이다, EAX=0x1이다 => 성공 Mess..