0x02 Study :)/Reversing
[CodEngn]Basic RCE_Level 10 문제풀이
파일을 실행시켜 보자. PEiD로 살펴보니 ASPack 2.000 이라는 것으로 실행압축되어 있다. ASPack이 뭔지 알아보자. 먼저 올리디버거로 OEP를 찾아낸다. 00445834 가 OEP 주소가 된다. 그리고 OllyDump를 이용하여 언팩킹을 한다. 언팩킹 후 OEP주소를 가보면 정상적으로 언팩킹 된것을 볼 수 있다. 이후 String값을 확인해 보니, "Registered ... well done!" 이라는 등록 성공 메시지가 보여진다. 해당 주소로 찾아가서 분기점을 찾으면 끝날 것 같다. 확인 결과 분기점의 OPCODE는 75 55 가 된다. 따라서 최종 정답은 004458347555(OEP주소 + 분기점 OPCODE)
[CodEngn]Basic RCE_Level 09 문제풀이
StolenByte를 구하라고 문제가 나와있다. StolenByte가 무엇일까? StolenByte 는 훔친 바이트란 의미로 프로그램의 한부분의 코드를 훔쳐내어 다른 부분으로 옮겨진 코드를 말한다. 주로 옮겨지는 코드는 엔트리 포인트위의 몇개의 코드들이며 옮겨진 코드들은 OEP 주소로 점프하기 전에 위치에서 PUSH 된다.이러한 StolenByte 는 주로 패커가 프로그램을 패킹할때 볼수있다. 이렇게 옮겨진 코드들은 할당된 메모리 공간에서 실행된다. 이때문에 패킹된 프로세스가 덤프될때 StolenByte를 복구하지 못하면 프로그램은 정상적으로 작동하지 못하게 됩니다. 실행시켜 보자. keyfile을 check한다는 박스가 뜨고 '확인' 버튼을 누르면 파일을 찾을 수 없다는 메시지 박스가 출력된다. upx..
[CodEngn]Basic RCE_Level 08 문제풀이
파일의 OEP를 구하면되는 간단한 문제이다. 파일을 실행시켜 보면 계산기 프로그램이 실행된다. PEiD로 확인해 보니 해당 파일은 UPX로 실행 압축되어 있다. upx를 이용하여 압축을 해제하여 OEP를 확인 하면 될 것 같다. OEP는 01012475 이다.
[CodeEngn]Basic RCE_Level 07 문제풀이
Level 06에 이어서 Level 07을 풀어보겠습니다. 실행해 보니 위와 같은 메시지가 출력됩니다. C드라이브의 이름이 "CodeEngn"일 경우 시리얼이 생성된 다는 것을 보니.. 프로그램 내부에서 C드라이브의 이름 값을 가져오는 함수가 있을 것 같네요. 그리고 Serial을 넣는 프로그램이지만, 문제 자체에서 CodeEngn이 어떤것으로 변경되는지 찾는 문제 이기에 Serial값을 찾는 것 보다는, CodeEngn이 어떻게 변경되는지 초점을 두어 분석하면 될 것 같습니다. 올리디버거에서 코드부분에 우클릭하여 "All intermodular calls"를 클릭하면 프로그램에서 불러오는 함수들의 목록을 볼 수 있습니다. 예상 했던 것과 같이, 드라이브의 정보를 받아오는 함수가 존재합니다. 해당 부분에..
[CodeEngn]Basic RCE_Level 06 문제풀이
Level 05에 이어서 06도 풀어봅시당. 문제를 보니 Unpack를 해서 OEP주소와 Serial 값을 알아내면 되는 문제입니다. 한번 실행해 봐야 되겠죠? 위와 같이 잘못 된 Serial 값을 넣으면 "Wrong serial!!!"이라는 메시지가 출력됩니다. 문제에서 Unpack을 하라고 했으니, 어떤 압축이 되어 있는지 PEiD로 확인해 봤습니다. 역시나 UPX로 실행 압축 되어 있음을 확인 했습니다.UPX 압축해제 하는 방법은 Level 05과정을 참고(아래링크) 하시면 됩니다. 2018/04/10 - [Study :)/WarGame] - [CodEngn]Basic RCE_Level 05 문제풀이 압축 해제 후, 보여지는 처음 주소가 OEP 주소가 됩니다. 이제 Serial값만 찾으면 됩니다. ..
[CodeEngn]Basic RCE_Level 05 문제풀이
Level 05를 풀어보자. 단순히 Serial Key를 찾는 문제인것 같다. 프로그램을 실행시켜보자. 입력창이 2개가 있다. 추측건데 윗부분은 User Name 부분이고, 아랫부분은 Serial 부분인것 같다. 'Register now !' 키를 눌러보면, 다음과 같은 메시지창이 뜬다. 올리디버거로 실행하여 보자. compressed 를 감지했다는 메시지가 뜬다. 즉, 실행파일압축되어 있다. PEiD와 PEview로 확인해보니 UPX로 실행압축 되어 있음을 확인 할 수 있다. 올리디버거에서 UPX압축 해제할 수도 있지만, UPX unpack 프로그램을 사용하면 쉽게 압축해제 가능하다. 해당 파일은 upx 실행 파일이 있는 곳으로 옮기고 다음 명령어를 입력하자. 05.exe 파일을 upx 압축해제하여 0..
[CodEngn]Basic RCE_Level 04 문제풀이
Level 04를 풀어보자. 문제를 확인해보면 디버거를 탐지하는 함수가 내장된 프로그램이라고 한다. 실제 실행해보면 '정상'이라는 문자가 계속 출력된다. 하지만, 올리디버그로 실행하다 보면 '디버깅 당함'이라는 문자가 계속 출력된다. 이것도 역시 Level 03과 마찬가지로, 함수 이름을 찾아내는 문제이므로 PEview를 이용하면 쉽게 답을 찾을 수 있다. 올리디버그로도 확인 가능하다. 올리버그로 실행하여 한줄씩 디버그 하다보면, '디버그 당함'이라는 문자가 출력되는 함수가 있다. 해당 함수를 타고 들어가서 한줄씩 실행해보면, 또 '디버깅 당함'이라고 출력되는 함수가 있다.
[CodEngn]Basic RCE_Level 03 문제풀이
Level 02 풀이에 이어 Level 03문제도 풀어보자. (Msvbvm50.dll 에러가 나타나면 아래 파일을 다운받아 프로그램과 같은 경로에 넣어두자) 문제가 단순하다. 비주얼베이직에서 스트링 비교함수 이름을 찾으라는 것 같다. 프로그램을 실행 시켜보자. 해당 메시지 창이 뜨고 '확인' 버튼을 누르면 다음과 같이 Regcode를 넣는 창이 뜨게 된다. 값을 입력하였을 때, 패스워드가 틀리다는 메시지가 뜬다. 해당 프로그램에서 패스워드를 비교하는 함수가 있는데, 그때 사용되는 함수명을 찾으라는 문제 인 것같다. 올리디버그로 살펴보자. 이전 풀이 문제들과 다르게 String값과 어셈블리어는 보이지 않는다. 문제에서는 함수명을 찾는 것이기 때문에, PE구조만 확인하면 해당 프로그램에서 사용된 함수명들을 ..