-
-
CodeEngn Challenges : Basic 10rev? 2018. 6. 26. 23:40
ASPack이다.ASPack은 압축을 해제 하고 난 뒤 스택에 OEP를 저장하고 난 뒤 해당 주소로 돌아가게 된다 따라서 OEP는 반환 전 스택에 저장된 값이 OEP다. 프로그램을 실행하면 사용자의 이름이 저장된 cm5.dat 파일을 읽어들인다.읽어들인 파일에서 사용자의 이름은 5글자 이상이어야하며 사용자의 이름을 바탕으로 serial을 생성한다. serial을 생성하기 위해 저장된 키 테이블을 바탕으로 serial을 생성한다. 문자의 ASCII값 - B(11) 에 해당되는 자리의 숫자를 가지고와 serial을 만든다. 등록이 완료 되었을 때 분기하는 부분의 OPcode는 나와있다. serial생성하는 부분만 코드로 옮겨보면 이처럼 된다. #include #include int main(){ char t..
-
CodeEngn Challenges : Basic 09rev? 2018. 6. 26. 23:29
StolenByte는 말그대로 숨겨논 바이트로써 언팩킹을 진행하게 되면 숨겨진 바이트는 제대로 복구되지 않기 때문이 프로그램이 제대로 실행되지 않거나 이상하게 실행 될 수 있다. 문제의 프로그램은 UPX로 패킹되어 있다. 압축을 해제 하고 난 뒤 OEP로 점프하기 전 스택에 몇가지 값을 저장하고 OEP로 점프한다. OEP로 점프한 뒤 곧바로 MessageBox를 호출하지만 전달되는 값은 0하나 뿐이다. 따라서 언패킹을 진행하더라도 이상한 값만 출력되고 오류가 발생하게 된다. 위에서 스택에 저장된 3개의 값의 OPcode가 StolenByte이다.
-
-
CodeEngn Challenges : Basic 07rev? 2018. 6. 26. 23:18
GetVolumeInformation에서 볼륨정보를 얻어내고 정해진 문자열과 연결한다. 앞에서 4글자의 값을 1씩 더하는 과정을 2번 진행한다. 문제에서 드라이브의 이름이 CodeEngn일 경우 CodeEngn이 바뀌는 것은 무엇인지 물었으므로 앞의 4글자를 2씩 증가시키면 된다. 키만드는 과정을 대략 C코드로 생각해보면 아래처럼... #include #include int main(){ char info[100]="CodeEngn"; char key1[100]="4562-ABEX"; char key2[100]="L2C-5781"; strcat(info,key1); for(int i=0; i