Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

kaka09

code engn basic 11 본문

Reversing

code engn basic 11

kaka09 2017. 8. 1. 22:36

[사진]1-1



이번 문제도 OEP를 언급하는것으로 보아 패킹된 프로그램임을 알 수 있다. 왠지 앞으로는 계속 패킹된 문제들만 제공할듯?? 아무튼 이번 문제에서는 예전에 풀어봤던 문제인 StolenByte를 찾는 문제이다. 먼저 PEID를 사용하여 어떤 패킹 알고리즘을 사용하였는지 확인해 보자





[사진]1-2



PEID로 확인결과 UPX로 퍠킹이 되었음을 확인할 수 있다.  이번엔 따로 언패킹을 시도하지 않고 바로 올리 디버거를 이용해 풀이를 시도해보았다.



[사진]1-3


9번 문제와 똑같은 느낌이 난다.. 참조하는 문자열도 말이고.. 혹시나 싶어서 한번 실행을 시켜 보았다.





[사진]1-4




9번문제와 완전 똑같은 문제다.. StolenByte 찾는 문제도 똑같고 단순히 OEP만 추가 되었는데.. 조금 풀어보다 왜 이런 문제를 추가하게 되었는지 의도를 알 수 있었다.




[사진]1-5


[사진]1-5를 살펴보면 9번문제에서 풀어봤던 것처럼 OEP로 진입후 StolenByte를 인자로서 직접 넣어줬다. 사진을 잘 보면 처음 시작 부분이 00401000이다. 하지만 EP에서 OEP로 넘어갈때의 주소응 0040100c이다. ([사진]1-3참고) 00c에서 000 즉 12바이트가 밀린 이유는 StolenByte때문이다. EP에 존재하는 StolenByte를 직접 MessageBoxA에 인자로 넘겨주기 때문이다.




[사진]1-6


[사진]1-6을 살펴보면 000~00B(12바이트) 까지 NOP로 채워져 있다. 즉 해당공간에 EP 마지막 부분에서 PUSH된 인자들이 들어갈 공간이라고 보면 된다.  (이래야 패킹된 프로그램이 제대로 인자를 참조하면서 실행이 되는 것일테고..) 고로 기존의 OEP는 0040100C였지만 실제 인자가 삽입이 되면서 00401000으로 밀려났기 때문에 실 OEP는 00401000으로 봐야한다. 아무래도 이번 문제의 의도는 이러한 것들을 물어본게 아닐까 한다.



'Reversing' 카테고리의 다른 글

code engn basic 13  (0) 2017.08.02
code engn basic 12  (0) 2017.08.02
code engn basic 10  (0) 2017.08.01
code engn basic 9  (0) 2017.08.01
code engn basic 8  (0) 2017.08.01