0x.리버스 엔지니어링/CodeEngn Basic RCE
-
0x19.CodeEngn Basic RCE 200x.리버스 엔지니어링/CodeEngn Basic RCE 2017. 12. 18. 15:29
0x19.CodeEngn Basic RCE 20 마지막 문제라서 그런가 짱짱 어렵게 느껴졌다. 이문제는 CRACKME3.KEY라는 파일의 내용을 불러와서 작업을 수행하기 때문에 123456789123456789라는 값을 가진 파일을 임의로 만들었다. 이 값들은 위와 같이 어떤 연산에 사용되는데, 위의 함수를 보면 BL의 값이 루프를 돌 때마다 1씩 증가하는데 4F에 도달하면 종료됨으로써 최대 14번 반복됨을 알 수 있다. 즉, 18자리의 입력값 중 14자리를 사용하는 함수인데, 하는 일은 XOR 작업을 수행한다. 위의 함수는 나머지 4자리를 가지고 오는데 그 값을 EAX에 저장한다. EAX에 39383736이 들어간 것을 확인할 수 있다. 첫 함수에서 XOR작업이 수행되는데 그 결과값은 아래와 같았다. ..
-
0x16.CodeEngn Basic RCE 170x.리버스 엔지니어링/CodeEngn Basic RCE 2017. 11. 23. 21:27
0x16.CodeEngn Basic RCE 17 문제의 요구사항에서 시리얼 값을 주고 이름이 한 글자라는 힌트를 준다. 하지만 이름값을 한 자리를 넣으면 Please Enter More Chars...라는 문구를 띄웠다. 그래서 해당주소로 가서 CMP EAX, 3->1로 패치를 해주었다. 그냥 무식하게 A부터 넣다가 보니 음? 결과값이 똑같다. F를 넣었더니 해결되는 기적을 볼 수 있다. 문제해결~
-
0x14.CodeEngn Basic RCE 150x.리버스 엔지니어링/CodeEngn Basic RCE 2017. 11. 22. 14:19
0x14.CodeEngn Basic RCE 15 오랜만에 포스팅을 하게 되었다.이번 문제도 그 전 문제와 비슷하게 시리얼 키를 찾아내면 된다. 위의 함수가 호출되면 입력값을 받는 창이 뜨게 되고, CodeEngn이라는 이름의 시리얼 값을 찾는게 문제이기 때문에 위와 같이 시리얼 값을 임의로 입력을 하고 쫓아가 보았다. 위의 함수가 호출되고 비교문이 실행되는데 비교문의 값을 확인해보았더니 6160이라는 값이 들어가야 한다는 것을 알 수 있다. 12345라는 serial의 값은 3039이기 때문에 eax를 바꿔보았다. 임의로 6160으로 바꾸고, 아래와 같이 다시 값을 확인해보았더니 decimal로 24928이라는 것을 알 수 있었다. 시리얼의 값으로 24928을 입력하면 아래와 같이 성공 메시지를 확인할 ..
-
0x13.CodeEngn Basic RCE 140x.리버스 엔지니어링/CodeEngn Basic RCE 2017. 11. 10. 11:24
0x13.CodeEngn Basic RCE 14 어셈 코드 분석을 해야 풀 수 있는 문제였다. stolen byte가 없어서 바로 분석이 가능했다. referenced strings를 쫓아가 입력을 받는 함수의 위치를 파악하였고, 시리얼 값 비교부분을 찾았다. 이름의 길이만큼 반복문이 수행되는데 문제에서 요구하는 이름이 CodeEngn이었기에 8번 반복되는 것을 알아냈다.아래 설명처럼 산술이 완료되면 값이 PUSH ESI를 통해 스택에 저장되는데 그 값이 129A1이었다. 입력은 10진수로 받아서 16진수로 변형을 시켜주기 때문에 10진수 형태인 76193을 넣었고 성공하였다.