티스토리 뷰

CodeEngn Basic RCE의 17번 문제입니다.






해당 프로그램의 key값을 이용해서 Name을 찾는 문제네요.


프로그램을 다운로드 받겠습니다.






'17.exe'라는 이름의 파일입니다.


실행시켜보면..






Name이 한자리라길래 한자리만 입력했더니 문자를 더 치라고 하네요.


이 부분부터 고쳐야 될 것 같습니다.


그 전에 먼저 PEID로 파일의 정보를 보겠습니다.






패킹은 되어있지 않습니다.


올리디버거로 열겠습니다.






아까 봤던 문자를 더 입력하라는 문자열을 찾았습니다.


해당 문자열이 사용되는 곳으로 이동해보겠습니다.






입력받은 Name이 세 자리 이상인지 비교하는 조건문이 보입니다.


저곳을 수정해주겠습니다.






Name이 한자리일 때도 실행되도록 수정해주었습니다.


이제 이 상태에서 프로그램을 저장하겠습니다.






이제 한자리만 입력해도 더 입력하라는 문자열이 출력되지 않습니다.


이제부터 Key값이 BEDA-2F56-BC4F4368-8A71-870B일때의 Name값을 찾겠습니다.






(Name에 1을 입력했습니다)


성공 문자열 위에 성공인지 아닌지를 가르는 조건문이 있습니다.


프로그램을 분석해보니 CALL _17.00404C3C는 Name값을 이용해서 만든 Serial을 호출하는 것이고,


45B850은 Name값을 이용해서 Serial을 만드는 함수라는 것을 알 수 있습니다.


Name값을 이용해서 Serial을 만드는 45B850 함수로 들어가서 살펴보겠습니다.


밑으로 내리다 보니 첫 번째 루틴이 나왔습니다.






위 연산이 끝나고






EDX에는 63E2EBF0이 저장되었습니다.


함수 45B850이 끝나고서는




EDX에 함수 45B850에서 생성된 Serial값이 저장되었는데요.


첫번째 루틴이 끝나고 EDX에 저장된 값과 4자리가 같습니다.


그러므로 이제 위 연산을 다시 진행해서 BEDA~~이 나오는 문자를 구하면 됩니다.


간단하게 C언어로 코드를 짜보았습니다.






0-9, a-z, A-Z까지 하나씩 for 문에 대입해서 연산을 진행한 후 결과를 출력해주었습니다.






실행시켜주었더니 F를 연산한 후 결과에서 beda가 출력되었습니다.


프로그램에 Name값으로 F를 입력하고 Serial값으로 BEDA-2F56-BC4F4368-8A71-870B를 입력하고 실행시켜보았습니다.






성공 문자열이 출력됩니다.


이제 F를 MD5로 암호화해서 알파벳을 대문자로 바꾼 후 코드엔진 사이트에 인증해주면...








댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함