실행파일을 peid로 열어보니 c#으로 만들어졌다는걸 알았고 c# 디컴파일러인 reflector를 사용해 분석했다.



먼저 실행시키면 키값은 16진수로 이루어져있다는 것을 알수있다


실제로 16진수 이외의 문자 (0~9,a~f가 아닌 문자)를 입력하면 프로그램에서 오류가 난다.



먼저 이과정에서 GetHashCode함수는 32bit 64bit 운영체제에서 다르게 해시값을 생성한다는 것을 알고 window7 32bit를 설치했다.


문제하나 풀라고 운영체제까지 설치했던 첫문제여서 기억이남는다.


코드를 보니 vxzzz함수를 통해 yreeeerwww의 값이 바뀌고 fsfsdf는 우리가 찾아야 하는 키값에 의해 결정된다.


vxzzz함수를 분석해보았다.



도저히 루틴을 복호화 할 자신이 없어서 브루트포싱 하기로 결정했다.



vxzzz함수에서 자료형이 unsigned int 이기 때문에 언더플로우가 발생해서 프로그램 실행시간이 매우 길어질것을 감안하여 


일단 언더플로우가 발생할 수는 아예 생략했다. 이부분은 내가 코딩을 잘 못해서 어쩔수 없는 선택이였다.


만약 언더플로우가 발생하는 수가 정답이였다면 못풀었을지도 모른다.


0~ffffffff까지 브루트포싱 했다.



거의 3억에 가까이 가서 키값이 나왔다. 두시간 돌렸다.


이부분도 내가 코딩을 잘 못해서 알고리즘을 공부했다면 좀더 효율적으로 프로그램을 짜 실행시간을 줄일수도 있었을지 모른다.



키값으로 나온 10진수를 16진수로 바꿔 인증하면 맞았다고 나온다.




//비쥬얼 스튜디오 없이 c#소스인 .cs파일을 컴파일 할 때


 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 에 있는 csc.exe를 이용해 javac.exe로  자바 컴파일 하듯이 컴파일 하면됨.

'문제 > CodeEngn_Advance' 카테고리의 다른 글

CodeEngn Advance 09  (0) 2017.01.10
CodeEngn Advance 08  (0) 2017.01.10
CodeEngn Advance 06  (0) 2017.01.10
CodeEngn Advance 05  (0) 2017.01.10
CodeEngn Advance 04  (0) 2017.01.10

+ Recent posts