본문 바로가기

Code Engn - Basic 16 RCE C++로 되어있다. IDA로 열어보면.. 문자열 Name을 입력받고 58라인과 62 라인의 연산을 통해 세팅되는 v20과 Pssword로 입력받는 v19를 비교한다.Name의 길이값만을 가지고 연산하기 때문에 크게 어렵지 않다. 더보기
Code Engn - Basic 15 RCE Main함수의 시작부분부터 찾아서, 인증 성공-실패의 분기점이 되는 조건문을 찾아보니0x458831의 CMP EAX, DWORD PTR DS:[45b844] 이었다. 0x407774의 함수의 반환값으로 전달되는 EAX레지스터 값과 0x45b844에있는 값을 비교하는데,0x45b844에 있는 값은 Name으로 전달된 "CodeEngn"의 값을 이용하여 0x458760 함수의 결과 이후 세팅되는 것 같다. 아마도 쨋든 비교되어지는 0x407774함수는 serial로 입력된 값에 대하여 atoi와 비슷하게 동작하는데, 내부를 보면 0x와 같이 16진수도 계산이 되는듯 비교 조건문을 통과하면 크랙성공! 더보기
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 더보기
Code Engn - Basic 11 RCE 더보기
Code Engn - Basic 10 RCE UPX 패킹된건줄 알고 많이 헤맸다.. 디버깅보다 언패킹이 어려운 느낌 더보기
Code Engn - Basic 09 RCE ( 출처 : http://muhan56.tistory.com/80 ) 더보기
Code Engn - Basic 08 RCE UPX 패킹의 특징 -> pushad ~ popad로 EP코드가 둘러쌓여 있고, OEP 코드는 popad 이후 점프하는 주소가 된다. 더보기
Code Engn - Basic 07 RCE 처음에는 문제 지문에 나온 내용이 무슨 말인지 몰랐었는데, GetVolumeInformation() 함수에 대한 내용을 찾아보니 대충 알 것 같다.GetVolumeInformation()을 통해서 2번째 인자로 전달되는 0x40225C(여기에 하드디스크 이름이 저장된다.)가아래 명령어들이 실행되면서 문자열이 추가로 덧붙여지거나, 수정된다 -> 이게 시리얼이 됨. 먼저 C드라이브 이름을 바꿔주고, 문자열 비교 직전 시리얼의 내용을 확인해보면.. 그리고 해당 시리얼을 넣어보면 성공 더보기