$ 리버싱 $/CodeEngn Basic RCE
-
CodeEngn Basic RCE 12$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 6. 14:04
파일을 열어 보면 다음과 같이 Key를 입력받는 프로그램이 하나가 나옵니다. 해당 프로그램에서 옳바른 키를 입력했을때 문자열이 나올 것입니다. 올리디버거에서 문자열을 찾아보겠습니다. 너무나도 한눈에 보기 쉽도록 되어 있습니다. 저기 40107D에서 비교를 해서 같으면 Congratulation이 출력 되는 것 같습니다. 그렇다면 입력을 받는 함수가 있을터 해당 함수를 찾아보겠습니다. GetDlgItemInt 이라는 함수가 있습니다. 해당 함수가 데이터를 입력받고 비교 하는 역할을 하는 것 같습니다. BP를 걸고 F9로 따라가보면 입력 창이 뜨는데 저는 9라는 숫자를 입력했습니다. 그리고 아래로 내려가 보면 다음과 같이 반복되는 부분이 있습니다. 다음 사진의 구간을 계속해서 반복하는데 엄청나게 긴 문자열을..
-
CodeEngn Basic RCE 11$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 6. 13:50
파일의 OEP와 Stolenbyte를 찾는것이 문제 입니다. OEP는 main함수가 시작되는 가장 맨처음의 주소를 의미하고, Stolenbyte는 원래 있어야 하는 코드가 없을때 그부분의 시그니처를 이야기 합니다. 파일을 한번 보면 UPX 파일 입니다. UPX -d 파일명 명령어를 쳐서 언팩을 하면 언팩된 파일이 나옵니다. 먼저 언팩 하지 않은 파일을 먼저 확인해 보겠습니다. 역시 PUSHAD가 있는 것으로 보아 팩 되어 있는 파일입니다. F8을 한번 눌러서 넘어가시면 다음과 같이 ESP가 수정 되어있습니다. 우클릭후 Follow in Dump를 클릭하시면 해당 주소의 hex값의 Dump로 가게 됩니다. 위의 사진 같이 해당 hex가 가르키는 곳으로 bp가 걸리게 되고 F9를 눌러서 이동합니다. 이동하게..
-
CodeEngn Basic RCE 10$ 리버싱 $/CodeEngn Basic RCE 2019. 5. 6. 13:48
해당 문제는 해당 문제파일의 OEP를 구한 후에 분기점의 OPCODE를 구하면 되는 것입니다. 해당 파일을 PEID로 확인해 보겠습니다. Aspack으로 패킹이 되어 있습니다. 언패킹을 해보겠습니다. 저기 아래에 보면 Aspack v2.0/2.001 이라는 문자열을 확인 할수 있습니다. 올리디버거로 확인해 보겠습니다. 좀 아래로 내려가 보면 다음과 같은 화면을 확인 할 수 있습니다. PUSHAD 라는 문자열을 확인 할 수 있습니다. PUSHAD는 범용 레지스터에 저장된 값들을 스택에 저장하는 명령어 입니다. 현재의 레지스터값을 스택에 저장하고 원본 코드로 복구한다음 POPAD를 이용해서 원래의 레지스터 값으로 되돌린 다음 복구한 OEP로 분기합니다. F8을 한번더 눌러보면 PUSHAD 명령어가 실행 되서..
-
CodeEngn Basic RCE 9$ 리버싱 $/CodeEngn Basic RCE 2019. 3. 27. 00:44
파일을 확인해 보면 다음과 같습니다.UPX 되어 있으므로 UPX.exe를 이용해서 언팩 해보겠습니다. 언팩 완료! 언팩 하지 않은 파일을 열어보면위와 같이 창이 뜹니다. 언팩한 파일을 열어보면 언팩 하지 않은 파일과 같아야 하지만...파일이 깨져 있습니다. 언팩한 파일을 확인해 보니 앞부분이 NOP로 덮여 있습니다. 그래서 언팩 하기전 파일을 확인해 저자리에 어떤 값이 있는지 확인해 보고 문제에서 요구하는 StolenByte를 찾아 보겠습니다.POPAD 하는 부분을 찾았습니다. 0040736E 부터 아래로 PUSH를 3번하는데 입력 값이 다음과 같습니다. 깨졌던 문자열 입니다. 그렇다면 StolenByte는 6A0068002040006812204000 이네요!
-
CodeEngn Basic RCE 8$ 리버싱 $/CodeEngn Basic RCE 2019. 3. 27. 00:43
OEP를 구하라고 되어있네요 OEP란 쉽게 말해서 프로그램이 구동되는 첫 시작점을 이야기 합니다. 프로그래밍으로 비유 하자면 c언어의 main함수의 첫 주소가 되겠네요.! 파일을 확인해 보면 UPX 되어있는 파일입니다. UPX되어 있다는 것은 이문제를 풀수 있는 방법이 2가지 입니다. 패킹 되어있는 저 파일을 언팩 하여 실행하면 바로 OEP가 보인다.패킹 되어있는 저 파일을 언팩 하지 않고 직접 디버거를 통해서 OEP까지 찾아 간다. 1번 방법은 그냥 UPX 프로그램을 사용하면 되기 때문에 2번 방법으로 풀어보겠습니다. 첫 올리디버거로 열어보면 다음과 같이 나옵니다. 01020C40에서 F8을 누르면 01020C41로 이동하면서 PUSHAD 가 실행 되면서 ESP 값이 바뀐 것을 알수 있습니다.Follo..
-
CodeEngn Basic RCE 7$ 리버싱 $/CodeEngn Basic RCE 2019. 3. 27. 00:42
serial을 입력 해서 푸는 문제인 것 같습니다. codeengn 7문제 이지만 abex' 5th crackme 문제를 그냥 가져온것 같네요. 시리얼이 틀리면 나오는 문구 c드라이브의 이름이 CodeEngn일때 시리얼이 생성될때 CodeEngn이 어떤거로 변하는지 보라고 했으니 다음과 같이 이름을 바꿔 보겠습니다. 위의 문구를 이용해서 main을 찾을 수 있겠네요. 올리디버거를 이용해서 main을 찾아보겠습니다. 위의 상자는 serial값이 틀렸을때아래의 상자는 serial 값이 맞았을때 실행 되는 구문입니다. 2개를 구분하기 위한 분기점은 제가 클릭 해둔 004010FC에 있습니다.EAX를 0 과 비교후에 00401117로 갈지 그냥 내려갈지 분기 하는것 같습니다 CMP 에서 BP를 걸어 두겠습니다...
-
CodeEngn Basic RCE 6$ 리버싱 $/CodeEngn Basic RCE 2019. 3. 27. 00:41
Serial값을 넣으면 틀렸다고 뜹니다. 06.exe파일은 upx 되어있어서 upx 명령어를 이용해서 Unpack을 했습니다. 올리디버거로 분석을 시작해 보겠습니다. 파일의 main 을 Search for 을 이용해서 찾아보겠습니다. 일단 1234를 입력해 보겠습니다. GetDlgItemTextA라는 함수를 지나가면 제가 입력한 아스키코드값인 1234가 입력이 됩니다.그리고 좀 내려가 보면 "1234" 와 "AD46DFS547" 과 비교 하는 부분이 나오기 때문에 Serial 값은 AD46DFS547이 됩니다.하지만 진짜 답은 OEP까지 구해야 하기 때문에 한번 구해 보겠습니다. OEP는 시작 주소 이므로 다음과 같습니다. OEP : 00401360입니다.
-
CodeEngn Basic RCE 5$ 리버싱 $/CodeEngn Basic RCE 2019. 3. 27. 00:41
이름과 시리얼값을 넣으면True일때의 값을 출력해주는 프로그램 입니다. PEID로 확인해 보겠습니다.UPX 되어있 파일이네요UPX을 풀어주겠습니다. 올리디비거에서 파일 열어 보겠습니다.F8을 이용해서 아래로 내려가 보면위의 박스인 Unregistered…은 입력한 값 그리고 아래 박스인 Registered User은 실제 값입니다. 틀렷으니 다시 실행해서 입력할때 위 빈칸에 Registered User을 작성해 줍니다. 위의 박스는 입력한값, 아래 박스는 정답입니다. 이제 실행해서 올바른값을 넣어 줍니다.