본문 바로가기

[CodeEngn Challenges] Basic RCE 13 Ollydbg로 보니, 여태까지와는 달라 보여 PEiD로 확인해보니 C# 코드인 듯 하다. .NET Reflector를 이용해 소스코드로 변환해준다. Visual Studio로 코드를 확인해 본다. RijndaelSimple.cs는 Rijndael 암, 복호화 함수로 이루어져 있고, RijndaelSimpleTest.cs에는 Main 함수가 있다. Password를 입력하라고 한 후, 입력값과 plainText(평문)와 비교하고 있다. 즉 plainText에 들어있는 값이 Auth key이다. 이 변수의 값을 출력하기 위해 소스 코드를 아래와 같이 변경했다. Password 입력 메시지 위에 답이 출력된다. 그대로 입력해 보면, 정답임을 알 수 있다. 더보기
[CodeEngn Challenges] Basic RCE 12 우선 Key 값을 찾기 위해 성공 메시지 부분을 살펴보았다. 40107D에 breakpoint를 걸고 이 부분을 한 줄씩 실행해 보았다. 403000부터 403527을 아우르는 문자열을 ESI에 넣고, 4바이트씩 더해서 EBX에 넣어 40110F 함수의 연산을 하는데, 그 문자열이 null일 때까지 반복한다. 이 문제를 푸는 데에는 별 의미 없는 낚시 코드이다. 결국 Key 값은 40107D의 CMP operand 중 하나이다. 그 다음, Hex Editor에서 성공 메시지 대신 key 값을 넣으려면 어느 범위에 넣어야 하냐는 문제이다. 12.exe을 복사한 후 hex editor로 열어보자. Block 안의 값이 성공 메시지이다. 이 곳을 key 값이 되도록 채워보자. 채우고 남은 부분은 null(00.. 더보기