Reverse Engineering(38)
-
리버스엔지니어링 문제 Advance 6
http://codeengn.com/challenges/advance/06Problem : How many more days to serve for the military The solution is the MD5 hash of the answer 프로그램을 실행해보면 1부터 숫자가 계속 올라갑니다. 종료하려면 작업관리자에서 프로세스 종료를 해야합니다.UPX와 안티디버깅을 우회해주고 문자열, 의심되는 함수들을 보지만 쉽게 눈에 띄는게 없습니다.이번문제는 상당히 코드를 유심히, 많이 보면서 풀었습니다. 이전 문제들처럼 코드의 흐름을 일일이 설명해드리기가 어렵네요. 일단 크게 메시지를 띄우는 부분과 카운트를 생성하는 부분으로 나눴는데 카운트는 저거 위의 CALL에서도 생성됩니다. 일단 이부분을 보면 Mess..
2015.04.19 -
리버스엔지니어링 문제 Advance 5
http://codeengn.com/challenges/advance/05Problem : Find the Serial 이번문제도 4번과 마찬가지로 쉽습니다. 함수를 찾다보면 비교함수인 vbaStrCmp를 볼 수 있습니다. bp를 걸어두고 진행합니다. 답이 아닐경우 Mal Cracker!!! 메시지가 뜹니다. 정답은 677345
2015.04.17 -
리버스엔지니어링 문제 Advance 4
http://codeengn.com/challenges/advance/04Problem : Find the Serial when the Name is CodeEngn 이번 문제도 3번과 비슷합니다.코드 아랫쪽에 ExitProcess를 호출하는 부분을 보면 점프문이 여러개 있습니다. lstrcmpA에 bp를 걸고 계속 봅니다. 진행하다보면 Serial로 입력한 123과 다른 문자열 하나가 보입니다. Serial로 LOD-59919-A0024900을 입력해봅니다.
2015.04.17 -
리버스엔지니어링 문제 Advance 3
http://codeengn.com/challenges/advance/03Problem : Find the Serial when the Name is CodeEngn 전체적으로 빠르게 훑어봅니다. String값을 보고 어디에 성공 분기점이 있는지, 실패 메시지를 어디서 띄워주는지, 입력한 값은 어디에 들어가고 비교는 어떻게 해주는지 등등.2번 문제보다 쉽게 풀 수 있습니다. Name 위치에 CodeEngn이라고 입력하고 한번 체크를 눌러줍니다. lstrcmp와 MessageBoxA를 호출하는 부분이 있고 PUSH 값으로 여러 문자열이 보입니다. 그런데 lstrcmp 파라미터를 보면 원래 있던 Serial...이란 문자열 아래 3265754874라는 문자열이 있습니다. 이게 바로 CodeEngn이라는 값을..
2015.04.17 -
리버스엔지니어링 문제 Advance 2
http://codeengn.com/challenges/advance/02 키를 찾는 문제입니다.키가 String으로 들어있나 찾아봤지만 그럴듯한건 없습니다. 프로그램을 한번 돌려보면 맞지 않는 키일 경우 그냥 종료되는 것 같습니다.디버깅을 한만한 근거를 잡기 위해 살펴보면 Enter Password: 라는 문자열이 보입니다. 문자열을 입력해주기 직전에 bp위치로서 적절할 것 같습니다. 그 후 흐름을 보기 위해 CALL마다 bp를 걸어줍니다. 그럼 004012D2에서 문자열을 입력받기위해 block되어 있다는 것을 알 수 있습니다. 아무 문자열이나 입력한 경우 004013C5 밑으로는 더이상 코드가 진행되지 않습니다. 해당 CALL을 살펴봅니다. 비교와 점프문이 많습니다. 대략 정답으로 추측 할 수 있지..
2015.04.17 -
리버스엔지니어링 문제 Advance 1
http://codeengn.com/challenges/advance/01 몇초 후에 종료하는지를 알아내는 문제입니다.UPX로 되어있으니 풀어줍니다. 그런데 풀어줘도 ollydbg로 실행해보면 에러메시지가 발생합니다. IsDebugger가 있으니 해당 부분을 우회해줍니다.시간에 관련된 함수를 찾아보면 이전에 보았던 timeGetTime이 있습니다. 모두 bp를 걸어줍니다. 위에서 부터 내려오다보면 CALL EDI가 있습니다. EDI에는 함수의 포인터가 있으므로 CALL EDI는 timeGetTIme을 호출하는 부분입니다. 두번째 CALL EDI부터 loop가 형성되어있습니다. 두번째 CALL EDI를 하고 바로 아래 JAE를 통해 노란색으로 여기서비교 이 부분 위로 점프합니다. 그리고 SUB와 CMP는 ..
2015.04.15