reversing.kr - x64 Lotto
로또 문제를 풀어보겠습니다.
실행화면 입니다.
메인함수입니다.
64비트 문제여서 그런지 wprintf, wscanf_s 등 w붙은 함수를 사용하네요.
x64dbg의 주석기능을 이용해서 코드의 설명을 넣었습니다.
wscanf_s 부분에 bp를 걸고 f9를 입력해서 숫자를 입력해보겠습니다.
1 2 3 4 5 6을 입력했습니다.
그 후 system("cls")로 창을 이쁘게 정리해주고, sleep(0x1f4)를 해서 조금 쉬게 해줍니다.
여기서 랜덤으로 값을 가져오고, 그 값을 암호화 합니다.
그 후 [rsp+rbx*4+0x54] 부분에 순서대로 값을 저장합니다.
이것을 총 6번 반복합니다.
그 후 생긴 배열입니다.
이런 루틴이 있습니다. 총 6번 for문을 돌립니다.
비교 루틴이 보입니다.
eax값은 1이고, [rsp+rcx+0x58]의 값은 0x10 입니다.
eax는 제가 wscanf_s로 입력한 것이 들어가고, [rsp+rcx+0x58]은 아까 총 6번 for문 돌리고 생긴 배열에서 값이 들어갑니다.
생각을 해보면 제가 진짜 로또를 당첨할 수 있는 운이 없다면 입력만 해서 문제를 풀 수는 없습니다.
제가 입력 후 로또 번호를 만들기 때문입니다. (랜덤으로)
그러면 저기 jne를 nop으로 바꿔주어 아무 역할도 하지 않게 한다면 문제를 풀 수 있습니다.
변경했습니다. (이제 여기 bp는 제거해주세요.)
그리고
함수를 끝내는 부분으로 와서 bp를 걸어주세요. (안걸고 f9로 실행하면 프로그램이 바로 꺼집니다.)
간단한 패치로 풀 수 있는 문제였습니다.
정답 : from_GHL2_-_!