목록War Game (174)
tmxklab
1. 문제 1) 문제확인 2. 접근방법 패킹 x 3. 문제풀이 패킹되지 않았는데 보이는 함수라고는 sub_4011AE()밖에 존재하지 않는다. 디버깅해보면서 확인해보자 쭉 따라가다보면 0x401006부터 Dialog관련 함수들이 보인다. 이를 통해 0x401006이 OEP인 것을 확인할 수 있다. x32dbg에서 제공해주는 scylla플러그인을 사용해서 덤프해주자 아이다에서 덤프파일을 확인해보면 제대로 함수들이 나오는 것을 확인할 수 있으며 성공관련 문자열을 참조하는 함수를 따라가보면 위 그림과 같이 sub_401114()에서 참조하는 것을 알 수 있다. 이제 저 함수를 중점적으로 디버깅해보자 Name에는 "CodeEngn"을 Serial에는 "1234"로 입력하였다. 위 그림을 확인해보면 입력한 Ser..
1. 문제 1) 문제확인 Name에 "CodeEngn"을 입력하고 아무 Serial값을 쓰니 오른쪽 메시지 박스 창이 뜨게 된다. 2. 접근방법 패킹은 되어있지 않으므로 바로 분석해보자 3. 문제풀이 성공을 뜻하는 문자열 확인, 해당 문자열을 포함하는 변수를 통해 참조하는 함수를 따라가보자 최종적으로 sub_401392()에서 성공을 뜻하는 문자열을 출력하는 메시지 박스를 띄우지만 sub_401392()를 호출하는 부분은 없고 위 그림과 같이 DialogFunc()에서 해당 함수의 주소를 push하는 부분밖에 없다. 따라서, 아까 실패했을 때 출력되는 문자열을 참조하는 함수를 따라가보자, 왜냐하면 Name값과 Serial값을 비교하여 성공 또는 실패하는 로직이 있을 것이라고 추정되기 때문이다. 실패를 뜻..
1. 문제 1) 문제확인 일정 시간이 흐르면 알아서 창이 종료된다. 2. 접근방법 Autoit스크립트로 만들어졌으며 UPX로 패킹된 것을 알 수 있다. 3. 문제풀이 Autoit Decompiler인 Exe2Aut 프로그램을 이용하여 분석 13.179초에 종료되는 것을 확인 문제에서는 몇 밀리세컨드에 종료되는지 MD5로 해쉬 값을 구하여 제출하라고 하였으니 13179의 MD5해쉬 값을 구하여 제출하면 된다.
1. 문제 1) 문제확인 아무것도 안뜬다. 위에 문제에서는 특정 문자열이 출력되기 위해 어떠한 데이터가 필요하다고 한다. 2. 접근방법 "Cracked by"문자열 참조하는 로직 찾기 sub_401362() 호출하는 로직 찾기 start()에서 eax값 1이면 우리가 원하는 메시지를 호출할 수 있다. 이제, 디버깅을 통해서 저 곳까지 어떻게 도달해야 하는지 알아보자 3. 문제풀이 CreateFileA()을 통해 "CRACKME3.KEY"파일을 open하는 것 같다. 여기서는 파일이 존재하지 않아 리턴 값으로 -1을 뱉었다 퉤 CreateFileA()를 통해 "CRACKME3.KEY"파일을 open하여 0x12(18)byte만큼 데이터를 읽어 input_val변수에 저장한다. 문제는 if문이 참이되어 su..
1. 문제 1) 문제확인실행시키면 위와 같이 창이 뜨고 일정 시간이 지난 후에 알아서 꺼진다. 2. 접근방법Autoit 스크립트로 만들어졌으며 UPX패킹된 것을 알 수 있다. 3. 문제풀이 Autoit Decompiler Download)About Exe2Aut.Download File ==> Exe2Aut v0.10.0.0 (2014-01-09).7z 첨부한 파일은 2014년 버전이라서 최신 버전은 아니지만, 특별히 기능에서 부족한 것이 없기에 이것만 써도 무방. 첨부한 파일 다운 받아서 압축 풀고 사용하면 된다. 따로 설치하는데 어려움은 없다. Exe2Aut은 autoit3 decompiler이고 사용법은 열어보고 싶은 파일을 드래그하면 된다. 즉 Exe2aut.exe를 실행시키고, autoit으로 ..
1. 문제 1) 문제확인 2. 접근방법String1과 2를 비교하고 분기한다. 3. 문제풀이Serial 값에 입력 값"1234"로 주었을 때 "06162370056B6AC0"와 비교한다. 4. 몰랐던 개념 Uploaded by Notion2Tistory v1.1.0
1. 문제 1) 문제확인 2. 접근방법 3. 문제풀이문제에서 Name이 한 자리라고 알려줬으니 "A"를 입력하고 Check it!버튼을 눌러보자 그런데 이상하게도 입력한 값("A")의 길이와 3을 비교하여 작으면 우리가 원하는 곳으로 분기하지 않는다. 이거는 EIP값을 변경하여 위 사진이 나오도록 실행하였는데 여기서도 입력한 값의 길이와 0x1E(30)과 비교한다. 처음에 한 자리수가 아닐거라 생각하고 입력 값의 길이를 3보다 크고 30보다 작은 문자열을 여러 개 만들어 브포 때리려고 했는데 뭔가 이상했다. 문제에서는 분명히 한 자리수라고 했는데... 그래서 브포 때리기에는 시간 낭비될 것같아서 롸업을 봤는데 처음 입력한 값의 길이와 3을 비교할 때 코드 패치하여 이상한데로 분기되지 않도록 하였다.(cm..
1. 문제 1) 문제확인 2. 접근방법 3. 문제풀이이번에도 역시 입력 값 "1234"를 주면 0x4D2로 변환하고 0xE4C60D97(3,838,184,855)과 비교한다. 따라서 Serial 값을 3,838,184,855로 주면 될 듯하다. 4. 몰랐던 개념 Uploaded by Notion2Tistory v1.1.0
1. 문제 1) 문제확인 2. 접근방법위에서 사용된 문자열을 찾을 수 있음 eax값과 dword_45B844와 비교하여 분기하는데 오른쪽으로 가면 "Try Again"이 뜨고 왼쪽으로 가야함 3. 문제풀이 입력 값 "1234"를 주었을 때 헥사 값 0x4D2로 변환되어 eax에 저장되고 0x45B844에 있는 값 0x6160과 비교한다. 따라서 24,928(0x6160)을 입력하면 맞을듯 싶다. 4. 몰랐던 개념 Uploaded by Notion2Tistory v1.1.0
1. 문제 1) 문제확인 2. 접근방법 문자열을 따라가보면 eax와 esi값을 비교하여 분기하는 것을 확인, 이제 디버깅을 통해서 저 부분을 확인해보자 3. 문제풀이문제에서 Name이 "CodeEngn"일 때 Serial값을 구하는 거니 위 사진처럼 입력 값을 넣어 보았다. 입력 값이 저장되어 있는 0x403138을 파라미터로 주고 sub_40183()을 호출하면 리턴 값으로 0x4D2로 변환된 것을 알 수 있다. 그리고 eax값과 esi값을 비교하는데 이 때 esi값은 0x129A1이다.이제 알아내야 하는 것은 Serial값을 0x129A1로 만들기 위해 입력 값을 어떻게 넣는가인데 생각해보면 "1234"를 넣는데 0x4D2(1234)로 나오는 것을 보면 sub_40183()의 역할은 문자열을 받아서 ..