본문 바로가기

WARGAME/Root-Me

(20)
ELF - CrackPass IDA로 열어보면이렇게 문자열을 체크하는 부분이 나온다 s1이 뭔지 알면 될거같은데이 함수를 호출하는 부분을 찾아보자xrefs를 통해 보면 맨 밑에 함수를 호출한다 지난번 문제처럼 위에 ptrace로 디버깅을 탐지하는데그 위에 브레이크 포인트를 걸고 실행해보자 인자로 AAAA를 주고 실행했다Don't use a debuger !쪽으로 분기를하게되는데 ZF 플래그를 수정해 넘기면된다 그리고 실행해보면 아까 문자열을 비교하던 부분이 나온다s2에 내가 입력한 AAAA가 보이는 것을 알 수 있다 그럼 s1과 비교하는데 ebx를 덤프창에서 보면 저렇게 나온다 근데 분기를 보면 ebx 값을 고대로 넣고 출력하기 때문에ff07031d6fb052490149f44b1d5e94f1592b6bac93c06ca9이 와같은 값..
PE - SEHVEH 우선 열어보자~!저 함수를 분석해보면된다~ 실행하고 6자리를 입력해봤다 대부분 ECX 레지스터 문자열 길이와 관련이 있다그만큼 반복하기 때문에근데 6자리를 입력했는데 9가 나온다 그리고 cl에 F0을 더해서FF와 비교한다그럼 계산을 해봤을 때문자열의 길이가 12자리라는것을 알 수 있다6자리를 입력했는데 9가 나온걸 보면3+되었다그럼 F가 15이니깐 12자리를 입력해야한다12자리를 입력하면 je ch17.11614AD를 만족해서 점프를 뛴다 그리고 조금 내리면 이렇게 4자리씩 찾을 수 있다내가 입력한 앞에 4자리와 EDX를 XOR해서 비교한다그럼 반대로 3628552E와 5A643059를 XOR하면 된다0x6c4c6577 이렇게 나오는데 이렇게 나온다그럼 리틀엔디안으로 weLl이렇게 4글자를 찾았다 다음으..
ELF - No software breakpoints 너무 어려운거같아서 이번에도 angr를 사용해 풀었다이문제는 원래 ROR를 해서 비트를 뒤집는데 이건 코딩으로 풀어야한다
PYC - ByteCode 파이썬 pyc파일을 주는데 구글에 검색해보면 easycompiler가 있다이걸 사용하면 .dic로 디컴해준다 이제 소스를 읽으면 끝인데이렇게 한글자씩 맞춰갔다 총 몇번을 실행했는지 참
ELF - ARM basic 이번문제는 arm인데 arm환경이 없어서 직접 디버깅을 하지 못했다그래서 angr이라는 바이너리 분석 프레임워크를 사용해보록하겠다값을 디버깅해서 확인할 수가 없다이렇게 분기가있는데이렇게 코딩을 한다0x8634를 EIP로 맞추는데 0x8644는 피해가도록 설정한것이다위에 6*8은 8은 모르겠지만 6은 6글자를 의미한다
ELF - Ptrace 우선 ptrace를 수정해서 넘기고noting을 보면이렇게 나와있다 ida 원격 디버깅을 통해 브포를 걸고 수정을해서 넘긴다noting을 보면 이런식으로 나오는데 총 4번 분기한다0x65는 e임으로 3번 더 돌리면 easy라는 값을 구할 수 있다
ELF - Fake Instructions 이번문제는 음...근데 대체적으로 ELF문제 뿐인거같다 이번엔 사진이 좀 많은데WPA를 보면문자열을 비교해서 blowfish를 호출한다그냥 이 함수를 호출하면 알아서 비번이 나올거같다원래 바이너리 닌자를 사용하려했지만demo에서 save기능을 지원하지 않으므로그냥 gdb에서했다 (ida로 원격 디버깅으로 풀어도된다)WPA다여기서 문자열을 비교한다 eax를 0으로 만들어주면 그냥 넘어갈것이다p명령을 사용해 0으로 바꿔주고 끝 nini를 하다보면 그냥 플래그가 나타난다
PE DotNet - 0 protection 이번에도 ㅇㅇㅇㅇ 문자열 비교하는 부분이다.DotNetOP