study write-up week2

ripemo·2025년 2월 12일

crackme0x09

main 함수

  • password를 입력받고 있음

  • password를 체크하는 함수에 envp라는 변수가 넘어가고 있는 것을 확인

  • 이전함수로 돌아가서 envp 추적

  • _p__environ()을 이용해 읽어온 변수를 v1에 넣는 것을 확인할 수 있음

  • 동적 디버깅을 이용해 _p__environ() 로 환경변수를 읽어옴을 알 수 있음

  • 입력한 비밀번호를 한글자씩 읽어와서 정수형태로 읽어와 모두 더한다.

  • 그 합이 16이라면 check2 함수로 넘어감 -> 비밀번호의 합은 16

  • check_flag 값이 1이 되면 ok 출력

  • 환경변수에서 "LOL"로 시작하는 환경변수가 있으면 check_flag 함수를 1로 선언.

  • 즉, 환경변수를 "LOL~"로 선언하고 비밀번호의 각 자리의 합을 16으로 설정하면 성공

RoboAuth

  • "r0b0RUlez!" 문자열을 이용해 level1 pass

  • level2

  • level1 전에 위에서 선언된 암호화된 문자열들을 외부 모듈을 이용하여 복호화하는 것 같다.

  • puts를 출력할 때 Buffer에 성공에 해당하는 문자열이 있을거라 판단

  • 입력한 비밀번호와 위에서 말한 모듈로 복호화된 문자열을 xor_password 함수로 파싱

  • 복호화된 문자열을 2로 xor 한 문자열이 올바른 password

  • 한글자씩 읽다가 다음 복호화된 값이 0x02라면 종료

exploit

  • 우리는 ida로 암호화된 문자열만 알고있으므로 복호화 루틴을 알아야 한다.

  • 하지만 동적디버깅으로 바로 복호화된 문자("u1nnf2lg") 확인

  • xor 연산으로 password 확인

crackmeme

  • 64bit, ELF

  • 그냥 실행하면 아무것도 일어나지 않는다.

  • 플래그라는 파일이 존재하지 않으면 exit 하는 것을 확인

  • flag 생성 후 실행가능

  • v11 : 플래그의 길이

  • v7 : read의 리턴값(플래그 입력받는 read) -> 읽어오는 바이트 수

  • v10 : 입력받는 플래그

  • 즉, 플래그 파일과 입력하는 플래그가 같으면 성공

ImagePrc

  • 그림을 그리고 check를 누르면 결과 출력

  • wrong 텍스트를 기준으로 코드 확인

  • v13의 값을 비교하는데 90000번 동일해야 함을 알 수 있음. 동일하지 않으면 wrong 출력

  • 따라서 v13에서 비교하고 있는 값을 확인

  • 동적디버깅으로 확인해보니 0xff와 다른 값으로 이루어진 것이 90000개 있는 것을 확인 -> 해당 데이터와 사용자가 그린 그림을 비교한다는 것다고 판단

  • 해당 파일은 비트맵 형식으로 이루어져 있기 때문에 비트맵 양식을 준비한 후 헥스 에디터로 코드에서 덤프한 값을 덮어씌어주면 플래그 획득

profile
hackyFrog

0개의 댓글