OutDoorFrog의 리버싱 이야기

defcon crackme 2000 alchemy (불완전한 풀이) 본문

공부/CTF 문제 풀이

defcon crackme 2000 alchemy (불완전한 풀이)

OutDoorFrog 2019. 1. 24. 20:45

완벽하진 않은 solve입니다.


파일 구성은 요렇게 되있습니다. (하나는 분석때문에 더 있는겁니다.)



분석 해봅시다.



read 함수가 두 주소에서 호출당하네요.


bp 걸어넣고 어느 주소에서 멈추는지 봅시다.



솔직히 angr 솔브도 가능할 것 같은 느낌이 듭니다.


이미 분석을 진행했는데 sub_40d770 함수에서 호출당했나보네요.







넵 main 함수에서 호출당하네요. 그러면 플래그를 판단하는 부분을 찾아봅시다.


디컴파일 해보니 저런 형식의 판단 패턴이 존재했습니다. 소서리문제랑 비슷하네요..



오호.. 어셈 구문을 추려내기 위해 따로 명령어 구문을 봅시다.


cmp rax,0x... , cmp rcx,0x... 이런 형식의 구문이 존재합니다.







새로운 명령어를 배워야 할 때


안타깝게도 grep 명령어는 조건을 하나 밖에 사용이 불가능합니다.


그래서 오늘은 egrep이라는 명령어를 사용해볼겁니다.


전에 풀었던 소서리 코드를 이용해서 솔브했습니다.



근데 이게 불완전한 솔브코드라 실행하면 이렇게 나옵니다.


20개의 바이너리 중에서 16개만 온전히 작동했네요. (200개면 160개 정도만 작동했다는 소리)



왜 불완전하게 작동했냐면 제 코드는 처음부터 출력가능한 문자열이 있다고 가정하고 소스를 짰기 때문입니다. 파란색으로 묶어논 숫자를 보시면 출력이 불가능한 숫자입니다.



해결할 수 있는 방법이라면 출발점을 설정하는 개념을 넣어서 프로그래밍을 하는 방법도 있겠고..


다른 솔브를 보면 주변에 있는 명령어를 검색하도록 하고 출력 가능한 줄을 제한했네요



으으.. 역시 리버싱 문제란 어려운 것 같습니다. ㅠㅠ






Comments