본문 바로가기

Code Engn - Basic 14 RCE UPX로 패킹되어있길래 언패킹부터 하고 시작하였다.성공 메세지 문자열을 기준으로 성공과 실패 출력 부분의 조건 분기문을 찾아보니 먼저 아래 입력받는 부분부터 시작되었다.각각 0x403038 과 0x403138에 입력받은 문자열을 저장하게 되는데, 이후 각각 다른 연산을 통해 나온 결과값을 내게 된다.이 두 결과값이 일치하면 성공, 다르면 실패. 먼저 첫번째 문자열의 연산과정0x401309 ~ 0x40132c의 루프 부분. IDA로 보면 아래와 같다. 두번째 문자열의 연산과정0x401383에 위치한 함수를 통해서 값을 반환하게 되는데 해당 함수를 보면 아래와 같다.읽어온 값에서 0x30을 뺀후 루프를 돌며 10을 곱하고, 이 값을 계속 더해나가는 것을 보니 atoi 함수와 같은 역할을 하는 것 같다. ID.. 더보기
Code Engn - Basic 13 RCE 그동안 디버깅해온 방법으로 디버깅하려했더니 제대로 디버깅이 되지 않았다.Microsoft Visual C# / Basic .Net -> C# 으로 되어있는데, C#은 컴파일시 IL(Intermediate Language)이라는 중간 형태의 코드로 변환하고실행시 이를 다시 CLR(.Net 플랫폼)을 통해 기계어로 변환된다고 한다. 일단 .Net 디컴파일러가 많은것같길래 ILSpy라는 프로그램을 통해서 디컴파일해보았다. 디컴파일해서 코드의 내용은 알 수 있었지만, 디버깅을 하지 못해 정확한 "text"의 값은 알 수 없었다.여기서 한참 헤맸는데, 풀이를 찾아보니 F12("pause") 이후 Execute till return 을 통해 접근하는 방법이 있었다. 일단 프로그램을 실행시킨후 해당 PID에 atta.. 더보기
Code Engn - Basic 12 RCE 더보기