Reversing(44)
-
리버스엔지니어링 문제 9
http://codeengn.com/challenges/basic/09 StolenByte는 프로그램의 한 부분을 다른 부분으로 옮긴 코드 구역을 말합니다. 문제를 풀다보면 더 이해가 쉬울겁니다. 패킹 되어있었기에 OEP를 찾으면 해당 위치로옵니다. 그런데 앞부분에 NOP부분들이 있습니다. 그리고 좀 주의깊게 봐야하는데 MessageBoxA함수를 호출하는 부분이 있습니다. MessageBoxA는 총 4개의 인자를 받습니다. 그런데 위에는 PUSH가 하나밖에 없죠. 앞 부분이 잘려나간겁니다. OEP로 점프하기 바로 전의 부분입니다. ASCII 부분에 보면 POPAD 바로 아래 3개의 PUSH가 있습니다. 이 부분이 잘려나간 부분으로 StolenByte에 속합니다. 문제의 답으로는 OPCode가 됩니다. 6..
2015.03.29 -
리버스엔지니어링 문제 8
http://codeengn.com/challenges/basic/08 OEP를 구하는 문제입니다. 지난번에 한것처럼 쭉 따라가다보면 점프문이 있습니다.(PUSHADD와 POPADD를 참고합니다.) 01012475
2015.03.29 -
리버스엔지니어링 문제 7
http://codeengn.com/challenges/basic/07 C드라이브의 이름이 CodeEngn일 경우 시리얼이 생성될 때 CodeEngn이 어떤 것으로 변한다는데 무슨 말이냐면 프로그램 내부에서 C드라이브의 이름을 사용합니다. 이 이름을 문자열로 가져와서 사용하는데 다른 문자열로 변형시키게 됩니다. 이 때 변형된 값이 무엇인지를 맞추는 문제입니다. 처음 디스어셈블 하자마자 나오는 코드는 아니고 해당 위치까지 진행한 상태입니다. 키값을 임의로 넣고 버튼을 누른 후 드라이브 이름을 가져오는 GetVolumeInformationA함수까지 진행된 상태입니다. 제가 넣은 값은 aaaa이고 가져온 드라이브 이름은 Application입니다. 여기서 저 드라이브는 C드라이브가 아닌데 프로그램이 실행된 드..
2015.03.29 -
리버스엔지니어링 문제 6
http://codeengn.com/challenges/basic/06 OEP값과 키값을 찾는 문제입니다. 친절하게 언팩을 하라고 하니 일단 하고 디어셈블해봅시다. Text string을 잘 찾다보면 키값은 금방 찾을 수 있습니다. 이제 OEP를 찾아봅시다. 언팩되지 않은 상태의 파일을 디어셈블하면 PUSHAD에서 시작합니다. 밑으로 쭉 내려오다보면 POPAD가 있습니다.POPAD의 아래 점프문에 브레이크포인트를 걸어주고 이 점프문이 향하는 곳이 OEP가 됩니다.OEP=00401360
2015.03.23 -
리버스엔지니어링 문제 5
http://codeengn.com/challenges/basic/05 키값을 찾는 문제입니다. 그냥 디어셈블 해보려고 하면 뭔가 안됩니다. 결과도 이상하고... hex 에디터로 열어보면 UPX가 보입니다. 언패킹을 해줍니다. 다시 디어셈블 해주고 텍스트 스트링을 봅니다. User와 키값이 보입니다.
2015.03.23 -
리버스엔지니어링 문제 4
http://codeengn.com/challenges/basic/04 디버거를 탐지하는 함수의 이름을 찾으라는데 아시는 분들은 바로 답이 나오실겁니다. 그래도 한번 보겠습니다. 역시 IsDebuggerPresent에 브레이크 포인트를 걸었을 때 반응이 있습니다.
2015.03.23