OutDoorFrog의 리버싱 이야기
오늘은 z3에 적응하기 위해서 2018 Codegate 예선전 문제로 나온 Redvelvet을 풀어보겠습니다. 일단 DIE에 던져줍시다. 우분투 x64 환경에서 한 번 돌려봅시다. 프로그램이.. 죽어버렸네요. IDA로 살펴보면 27의 길이의 문자열을 입력받은 후 15개의 함수를 거쳐서 값을 검증한 후 SHA256 해시 함수로 암호화하여 바이너리에 하드코딩되어 있는 긴 문자열과 비교하고 있습니다. 이름을 지어주자. 이대로 계속 작업을 하다간 멘탈폭사를 겪을 수 있습니다. 네이밍을 해줍시다. 혹시 모르는 함수가 있다면 제가 참조글 링크를 해놨으니 한 번 보시는 것을 추천드립니다. OpenSSL 라이브러리 홈페이지에서 설명한 SHA*_* 함수 ptrace 함수 설명 흐름이 이제 보이는 것 같습니다. NULL을..
수학에 면역력이 없는 사람입니다. 1트 파일 구성을 보시면 간단하게 JavaCrackMe.jar 파일 하나를 줍니다. jd-gui로 디컴파일해보시면 아무 내용이 없는 기적을 볼 수 있습니다. 실행을 시켜봅시다. 프로그램이 제대로 돌려지는 것 보아 안티 리버싱 기법이 적용된 듯 합니다. 알집을 써서 class 파일을 적출, 다른 디컴파일러를 써서 디컴파일해봅시다. 디컴파일이 성공했습니다. 이제 코드 해석만 하면 끝나겠죠? 간단하군요. 역산만 하면 되겠어욥. 0xeaaeb43e477b8487 / 26729 = [답] 이겠죠?? (끝일 것이라 생각했습니다. 착각이였습니다. 이런 ㄴㅇㅁㄻㄴㅇㄹ) 지인 찬스를 썼습니다. (도움을 주신 몇몇 분들께 진심으로 감사드립니다) 수학 앞에만 서면 왜 이리 나는 작아지는가...
보호되어 있는 글입니다.