리버싱CTF/EmbededSecurity CTF 7

Whitehorse

This is Software Revision 01. The firmware has been updated to connect with the new hardware security module. We have removed the function to unlock the door from the LockIT Pro firmware. - 분기흐름을 바꾸어 Access Granted 출력을 했지만 정답X - 단지 출력일뿐 unlock 화면이 안나옴... - ret를 이용해 Access Granted 출력으로 분기흐름을 바꾸면 그 이후 ret 실행시 sp위치가 NULL 영역에 빠지기 때문에 정상적인 값을 리턴하지 못함 어렵네....모르겠다...

Reykjavik

Key Point 1. 코드를 인크립트로 인해 볼 수 없음, Current Instruction을 보고 풀어야 함 2. 어떤 부분을 분석해야할지 포인트를 잘 잡아야함. 3. 내 입력 값이 어떻게 영향을 줄 수 있는가 ? 4. 시스템은 리틀엔디안이니까 디스어셈블러에 보이는 것과 반대로 입력하자. 문제 풀이 스포를 자제하기 위해 흰글씨 처리로 가렸습니다. 시작부터 끝까지 드래그 해주세요 시작 값 입력 후 pop sr ret add #0x6, sp : sp+0x6은 내가 입력한 값 첫번쨰 바이트에 위치임 cmp #0x70ab, -0x24(r4) : -0x24(r4) 또한 내가 입력한 첫번째 바이트 위치를 가리킴 (이부분이 핵심이다.) jnz $+0xc : 0xc로 분기되면 프로그램이 그냥 종료된다. ? pus..

Cusco

-0x4(r4)에 0x00 값이 들어가면 안됨. 이후 복구 할 수 있는 방안이 없어보임 -0x4(r4) == 0x43e8 = 0x00 : 이 값이 0이면 결국 JZ분기에 의해 실패로 분기된다. 1. mov.b -0x4(r4), r15 로 인해 r15의 첫번째 바이트는 널바이트가 됨 cf) 7d00 -> 0000 사용자 값으로 인해 두번째 바이트가 영향을 받을 수 있는지 찾아보자. 2. call #0x4542 : 호출 뒤에 r15의 값 7dee에서 7d00으로 변환됨 3. sxt r15 1111 => 0011 0000 => 0000 1100 => 0000 0011 => 0011 0110 => 0010 1001 => 0001 1010 => 0001 => 모르겠다!!!!!!!!!!!!! Write up 보고 ..

Sydney

리틀엔디안 방식과 오프셋 사용에 대한 이해가 필요했음. 알고보면 쉬운 문제! Key point 1.리틀엔디안 방식은 디스에셈블러와 사용자가 입력한 값과 반대로 표기됨 디스어셈블러메모리 저장된 값(=사용자 입력 값) 디스어셈블러상 0xABCDEFGH => 메모리 덤프에서는 0xBADCFEHG 로 표기됨 2. 오프셋 사용 cmp #0x454e, 0x0(r15) r15레지스터에 저장된 주소부터 오프셋 0의 위치의 값부터 상수 0x454e를 비교함 cmp #0x2e5d, 0x2(r15) r15레지스터에 저장된 주소부터 오프셋 2의 위치의 값부터 상수 0x2e5d를 비교

New Orleans

비기너를 위한 CTF인데 너무 어렵게 생각했다....알고보면 정말 단순한 문제! 하지만 삽질을 통해 어셈블리어 및 디버거 사용에 조금 익숙해졌다. Key 포인트 정리3 0024 fa23 3150 9cff b012 7e44 1.#이 붙으면 상수로 사용, #이 없으면 메모리에 저장된 값을 사용한다. 2.@이 붙으면 레지스터에 저장된 주소가 가리키는 값을 사용한다. (레지스터 앞에 붙는 듯) 3.연사자 뒤에 .b가 붙으면 한바이트만 연산한다는 의미 2.메모리 덤프 offset 위치: 순서 그대로 왼쪽에서 오른쪽으로 읽으면 됨. 4400 4401 4402 4404 4400: 31 40 00 44 mov #0x2400, r15 r15에 상수 0x2400을 복사함. mov.b #0x23, 0x0(r15) r15의 ..