$ 리버싱 $/CodeEngn Basic RCE
-
CodeEngn Basic RCE 18$ 리버싱 $/CodeEngn Basic RCE 2019. 7. 16. 14:28
해당 문제만 빼고 풀었더라고요.. 그래서 한번 풀어보겠습니다. 문제를 한번 열어보겠습니다. 문제화면은 위와 같습니다. 올리디버거에 넣어서 쉽게 리버싱을 하기 위해서 문자열을 찾아 보겠습니다. 이름은 5글자 이상이라고 합니다. => Name must be at least 5 chars or more... 올리디버거에 넣어서 한번 string을 확인해 보겠습니다. Name은 CodeEngn으로 해보겠습니다. 이런식의 실패 문자열이있습니다. You serial is Wrong, try again 문자열을 검색해 보겠습니다. 위쪽에 string1은 제가 입력한 1111이고 string2는 Name인 CodeEngn으로 했을때의 Serial 값이 적혀있습니다. CodeEngn일때 06162370056B6AC0 값..
-
CodeEngn Basic RCE 20$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:14
파일을 실행 해보니 이렇게만 뜨네요. 올리디버거로 실행을 해보겠습니다. ↑ main 함수 아래로 내려가 보겠습니다. CreateFileA함수로 FileName : CRACKME3.KEY로 파일을 만들어 줍니다. 그러면 CMP로 EAX의 값인 FFFFFFFF( -1 ) 와 -1을 비교 해서 똑같기 때문에 401043으로 점프를 하지 않고 아래로 내려갑니다. 그러면 CrackMe v3.0 - Uncracked를 40210E에 PUSH 하고 프로그램이 40210E로 인해서 아무런 창이 뜨지 않고 종료 하게 됩니다. 그래서 첫번째 분기점은 401032 이기 때문에 저이름으로 파일을 하나 만들어 보겠습니다. FFFFFFFF에서 1E8로 바뀐것을 찾았습니다. 그렇게 되면 JNZ에 따라서 다음 문자열을 40210E에..
-
CodeEngn Basic RCE 19$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:11
파일을 PEID로 확인해 보겠습니다. UPX로 되어 있습니다. UPX 툴로 Unpacking 해보겠습니다. 올리디버거 에서 시간과 관련된 함수를 찾던 도중 다음과 같은 함수를 발견 했습니다. TimeGetTime 함수란? 윈도우가 시작되고 난 뒤 지난 시간을 데이터로 얻는 함수입니다. 444C44로 가보니 TimeGetTime 함수가 있었습니다. 그리고 하나씩 내려가 보면 444D3A 함수에서 다음과 같은 문자열을 볼 수 있습니다. 2B70 = 11120 이므로 약 11.12초 라고 생각했습니다.
-
CodeEngn Basic RCE 17$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:10
Name이 한자리라는 것을 알수 있기 때문에 파일을 열어서 보면 문자열을 더 적으라고 되어있습니다. 일단은 한자리가 답이기 때문에 한자리만 입력해도 가능 하도록 변경해 보겠습니다. ↑ 패킹 되어 있지 않기 때문에 올리디버거 에서 열어 보겠습니다. 문자열이 뜨는 걸 확인 해서 들어가 보면 위쪽에 비교 구문이 있습니다. \ CMP EAX,3 으로 3자리 이상인지 확인하는 것 같습니다. 이 것을 CMP EAX,1로 변경해서 저장해 보겠습니다. ↑ 변경전 ↑ 변경후 그리고 한자리 수 중에서 Key 값이 BEDA-2F56-BC4F4368-8A71-870B인 숫자를 찾는 것이 남은 문제 입니다. 일단 Name에 따라서 바뀌는 Key값이 만들어지는 알고리즘을 찾아 보겠습니다. 45BBA9에서 JNZ를 통해 분기를 하..
-
CodeEngn Basic RCE 16$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:08
해당 파일을 열어 보니 다음과 같이 프로그램이 실행 됩니다. Name을 입력받고 Password를 입력 받는 것으로 보아 CodeEngn을 입력 했을때 필요한 Password를 찾는 것 같습니다. 일단 문자열을 찾아 보겠습니다. 프로그램 화면에 등장하는 아무 문자열이나 BP을 걸고 주소를 따라 가 봤습니다. 시작 주소는 401390 이였습니다. 하지만 저는 문자열이 다 출력된 후에 입력을 받는 구간 까지 도달 해야 하기때문에 F9를 이용해서 401447로 한번 가보겠습니다. 그리고 Name을 입력받는 주소인 401501에 BP를걸고 F9를 입력하면 다음과 같이 Name을 입력 할 수 있습니다. 그리고 아래로 좀 더 내려가 보면 Password를 입력 받는 주소인 401589가 나옵니다. 해당 주소를 실행..
-
CodeEngn Basic RCE 15$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:07
해당 파일을 열어보겠습니다. 이렇게 입력을 하면 다음과 같은 메시지 박스가 나옵니다. 일단 틀렷을때의 문자열을 찾았습니다. 해당문제는 바로전 문제인 14번 문제와 매우 비슷한 것 같습니다. Ollydbg를 이용해서 해당 Try Again! 문자열을 확인해 보겠습니다. 해당 문자열을 더블 클릭해서 해당 주소로 이동후에 BP를 알맞은 곳에 걸어보겠습니다. 해당 문자열의 맨처음 시작지점인 458800에 BP를 걸었습니다. F9를 이용해서 BP까지 이동을 하면 Name과 Serial을 입력 받습니다. CodeEngn과 1234를 입력하겠습니다. 그리고 아래로 좀 내려가면 CMP를 이용해서 값을 비교해서 결과값에 따라서 분기를 하는 곳을 찾을 수 있습니다. 입력 Serial 값인 1234가 16진수의 형태로 EA..
-
CodeEngn Basic RCE 14$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 7. 16:06
해당 문제에서 Name과 Serial을 입력하는 폼이 있는것 같습니다. 한번 파일을 확인해 보겠습니다. UPX로 Packing 되어 있는 파일입니다. 해당 파일을 UPX.exe 파일로 Unpacking을 해보겠습니다. Unpacking 한 후의 파일을 확인해 보면 다음과 같습니다. 올리디버거로 열어 보겠습니다. 이런 모습의 코드가 나옵니다. 일단 함수를 확인해서 입력받는 함수를 찾아 보겠습니다. GetDlgItem 관련 함수를 전부 BP걸어 보았습니다. F9를 이용해서 이동해 보겠습니다. 4번정도 누르니까 입력을 받기 위해서 대기를 합니다. Name에 CodeEngn , Serial에 1234를 입력해 보겠습니다. 그러면 004012BD에서 멈춰 있습니다. 4012C2부터 코드를 해석해 보도록 하겠습니다..
-
CodeEngn Basic RCE 13$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 6. 14:06
파일을 실행해 보면 다음과 같이 console에서 실행 됩니다. 올리디버거로 파일을 열어서 분석을 하려고 했지만.. 열리지 않습니다. 그래서 파일이 어떻게 이루어져 있는지 확인을 해봤습니다. Microsoft Visual C#으로 되어 있습니다. 그래서 열리지 않았던 것 같네요.. C#을 디컴파일 할수 있는 툴을 생각해 봤는데 ILSpy 툴이 떠올랐습니다. ILSpy 툴 다운로드 주소 : https://sourceforge.net/projects/ilspyportable/ 13.exe를 열면 다음과 같이 파일이 열리고 디컴파일 된 소스코드를 찾습니다. 해당 13.exe 파일에는 2개의 class가 있는것 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20..