목록Reversing/CodeEngn (32)
Information Security Study

문제 : Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 문제 : Key값과 + 주소영역을 찾으시오 Ex) 7777777???????? 12번 파일을 올리디버거로 실행해보았다. 바로 성공구문이 보인다. 성공문 분기점 위에 EAX와 7A2896BF를 비교하는 문장이 있다. BP를 걸고 실행 후 아무 숫자나 입력해보았다. 실행해보니 EAX값이 6F로 변경되었음을 알 수 있다. 6F는 111의 16진수이다. HxD로 12번 파일을 불러온 후 성공구문을 지우고 2049480383값을 넣어주었다. 따라서 Key값은 ..

문제 : OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. Ex) FF35CA204000E84D000000 정답인증은 OEP+ Stolenbyte Ex ) 00401000FF35CA204000E84D000000 11번 파일을 언패킹 한 후 올리디버거로 실행해보았다. MessageBoxA가 비어있는 것을 알 수 있다. 따라서 언패킹하기 전 파일에서 숨어있는 명령어를 찾아야 한다. 패킹된 파일이다. OEP로 점프하기전에 PUSH 0과 PUSH 402000과 PUSH 402012가 있다. 이 세가지가 Stolenbyte이고 OEP는 00401000이므로 정답은 004010006A0068002040006812204000이다.

문제: OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE EX) 00400000EB03 PUSHAD를 보아 패킹되었음을 알 수 있다. ASPack로 패킹되어있다. ESP 값에서 Follow in Dump 해주고 덤프 영역에서 BP를 걸어주었다. 언패킹 완료 후 OEP는 00445834임을 알 수 있다. “Resisterd … well done!” 문자열을 더블클릭해서 점프문을 찾는다. 점프문은 등록 성공으로 가는 분기점이다. OPCODE 7555이기 때문에 문제의 정답은 004458347555이다.

문제: StolenByte를 구하시오 Ex) 75156A0068352040 올리디버거로 실행해 보았다. PUSHAD로 패킹 되었음을 알 수 있다. PEiD로 분석해 보니 UPX임을 알 수 있었다. 언패킹을 하지 않은 파일에서 JMP 09.0040100C에 BP를 걸어주고 실행하면 문구가 뜬다. 따라서 6A0068002040006812204000이 stolenbyte임을 알 수 있다.

문제: Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD 올리디버거로 실행해보았더니 PUSHAD로 되어있음을 확인할 수 있었다. PEiD로 확인하니 UPX로 패킹되어있었다. CFF Explorer로 언패킹을 해준 뒤 올리디버거로 다시 분석해보았다. 문구를 찾기 위해 우클릭 > Search for > All referenced text strings 클릭! 더블클릭으로 들어가보았다. Serial은 AD46DFS547!

문제: 이 프로그램의 등록키는 무엇인가 올리디버거로 실행해보았다. PUSHAD로 되어있기 때문에 패킹이 되어있는지도 확인해보았다. UPX로 패킹되었음을 확인할 수 있다. CFF Explorer로 언패킹해주었다. Search for > All referenced text strings를 눌러서 "Wrong serial, try again!" 를 찾아보았다. 문자열에 들어가 확인해보니 Registered User GFX-754-IER-954 값을 확인할 수 있었다. 이 값들을 각각의 자리에 입력해보았다. 따라서 등록키 값은 GFX-754-IER-954 임을 알 수 있다.

문제: 이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 00401064를 보면 CMP ESI, ESP라고 되어있다. IsDebuggerPresent 함수 지나고 1로 변한 EAX값을 다시 0으로 바꿔주면 JE문이 실행 되는 것을 볼 수 있다. JE문이 실행되어 정상 문구가 나오는 것을 확인할 수 있다. 따라서 디버거를 탐지하는 함수는 IsDebuggerPresent이다.

문제: HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가 1번 문제를 실행한 결과이다. GetDriveTypeA의 리턴값을 확인하기 위해 올리디버거로 분석해 보았다. 00401024를 보면 CMP EAX, ESI 라고 되어있다. 이는 EAX와 ESI 값을 비교하라는 뜻이고 값이 같다면 0040103D로 이동할 수 있다. 이때 EAX, EAX로 바꿔주면 두 값이 항상 같기 때문에 0040103D로 이동할 수 있게 된다. 다시 실행해 보면 HDD를 CD-Rom으로 인식시키기에 성공했음을 알 수 있다.