전체 글(169)
-
리버스엔지니어링 문제 10
http://codeengn.com/challenges/basic/10 OEP와 분기점의 OPCODE를 구하는 문제입니다.9번 문제와 같은 방식으로 OEP를 구하는 것이 쉽지 않습니다. upx를 써보려니 UPX로 팩되지 않았다고 합니다.PEiD를 통해 확인하면 ASPack이 적용되어있습니다. UPX와 비슷하게 아래로 계속 찾아보면 POPAD가 있습니다. 그리고 RETN을 하는 곳으로 가보면 00445834위치가 나오는데 이곳이 OEP입니다. String을 찾아보면 등록성공이라고 Registered...well done 부분이 있습니다. 이 부분의 주소는 0044550C이고 이전의 조건분기문은 004454D4부분입니다. 이곳의 OPCODE는 7555입니다.문제에서 요구하는 값은 004458347555가 됩..
2015.04.03 -
리버스엔지니어링 문제 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