Security ★ Development(154)
-
리버스엔지니어링 문제 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 -
리버스엔지니어링 문제 20
http://codeengn.com/challenges/basic/20 프로그램을 실행하면 별다른 동작을 하지 않습니다. 키 파일이 필요하다고 하고 crackme3.key라는 이름의 파일을 요구하는 것 같으니 만들어주고 디버깅해봅니다.00401188위치에서 AL이 1이면 크랙 성공 메시지를 띄우도록 되어있습니다. AL을 1로 바꾸면 메시지창이 뜹니다. 저 이상한 영어가 나온 부분은 CodeEngn으로 바꿔야합니다. 시작 부분부터 천천히 보면 CreateFileA, ReadFile부분이 있습니다. crackme3.key라는 파일을 열고 ReadFile을 하는데 4021A0위치의 값을 12와 비교하고 있습니다. 해당 위치는 pBytesRead부분이고 12는 10진수로 18을 의미합니다. 읽어들인 길이가 18..
2015.04.13 -
리버스엔지니어링 문제 19
http://codeengn.com/challenges/basic/19 프로그램을 실행시켜보면 메시지박스만 나오고 약 10초후에 저절로 꺼집니다.문제는 이 프로그램이 몇 밀리세컨드 후에 종료되는지를 알아내는 것입니다. 정확한 값이 필요할겁니다. 디버거로 실행하면 다음과 같은 에러가 뜹니다.그냥 실행했을 때 멀쩡했는데 디버거로 실행했을 때 이런 메시지가 뜨면 이는 안티디버깅 처리가 되어있다는 것으로 의심할 수 있습니다. 혹시 몰라 PEiD로 확인했더니 UPX팩이 되어있었습니다. 언팩을해주고(OllyDbg1.버전에서는 PUSHAD를 보고 팩이 되어있다는 걸 바로 알 수 있었는데 2. 버전은 팩된 것도 고려해서 시작지점을 보여줍니다.)함수를 우회하기 위해 반환값인 EAX를 0으로 만들어줍니다. 그리고 실행을 ..
2015.04.06