0x.리버스 엔지니어링
-
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을 입력하면 아래와 같이 성공 메시지를 확인할 ..
-
0x00.Easy Crack0x.리버스 엔지니어링/Reversing.kr 2017. 11. 17. 10:47
0x00.Easy Crack 사용자로부터 값을 입력받고 확인 후 일치 여부를 출력해주는 간단한 프로그램이다. 갓갓 아이다로 뜯어보면 조건문이 있다. 입력값으로 123456789를 넣고, 이 조건문들을 올리디버거로 추적해보았다. 입력 받는 함수를 따라가보면 위의 주소와 같다. 아래부터 CMP 명령어들이 있는데 이것들을 다 확인해보았다. 첫 번째 조건문을 확인해보니 ESP+5에 저장된 값을 "61"과 비교한다. 그래서 ESP+5를 따라가 보았더니, 0019F7D5에서 2라는 값에 해당되는 것을 알아내었다. 이를 통해 입력 값의 2번째 요소가 0x61즉 a가 들어가야 한다는 사실을 알 수 있다. 이번에는 1a3456789f를 넣고 진행해보았다. 계속해서 실행해보면 Arg1의 값으로 3456789가 들어간다. ..
-
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을 넣었고 성공하였다.