리버싱CTF 23

Internetwache CTF 2016 : SPIM

Internetwache CTF 2016 : SPIM Points : 50 Solves : 208 Description :Description: My friend keeps telling me, that real hackers speak assembly fluently. Are you a real hacker? Decode this string: "IVyN5U3X)ZUMYC 아아 어렵다....;;; 아직도 이해가 안됨 관련개념에 대한 검색과 주어진 주석을 최대한 활용했어야 했다. 주석이 알고리즘을 만드는 힌트였음.. http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html In layman terms, in our main function, we're ..

Sharif University CTF 2016 : SRM

Sharif University CTF 2016 : SRM Points : 50 Solves : 173 Description : The flag is : The valid serial number Download RM.exe 핵심 함수 찾아서 차근차근 하드코딩된 문자를 풀면 플래그를 얻을 수 있었다!! 롸잇업 없이 풀어서 뿌듯함 굿 유용한 파이썬 함수! hex(숫자) => 숫자를 헥사코드로 변환 chr(숫자) => 숫자를 아스키 문자로 변환 ord('문자') => 문자를 아스키코드로 변환

Sharif University CTF 2016 : Serial

Sharif University CTF 2016 : Serial Points : 150 Solves : 108 Description Run and capture the flag! Download serial 리눅스 원격디버깅 방법과 IDA를 통한 리버싱을 익힐 수 있었다. 하드코딩된 시리얼넘버였지만 단순하게 박혀있는 타입이 아니였다. 로직은 코드의 일부분이 오버랩되어 IDA에 의해 디컴파일이 불가한 상태였다. 롸잇업을 보고나서야 점프코드 부분이 다른 코드와 오버랩 되어있다는 사실을 알았다. 그리고 단축키 C와 D를 이용해서 코드를 변환할 수 있다는 사실을 알고 놀라웠다. C: Code로 변환 D: DATA변환 R: 헥스 값을 아스키 케릭터로 변환 한글자씩 시리얼 넘버를 비교하고 다음에는 길이를 비교하는 ..

Stack1

This level looks at the concept of modifying variables to specific values in the program, and how the variables are laid out in memory. This level is at /opt/protostar/bin/stack1 Hints If you are unfamiliar with the hexadecimal being displayed, “man ascii” is your friend. Protostar is little endian Key Point 1. 문제를 푸는 것 보다. 변수에 저장되어있는 위치를 알아내는것이 키포인트 2. 파이썬 백트릭 사용하여 매개변수 넣는법을 알아야함. 3. 패턴으로 파악시 패..

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 보고 ..