Security ★ Development(154)
-
패치(크랙)
Key4.exe라는 파일을 크랙해보도록 하겠습니다.Key4는 위와 같이 두 입력란이 있고 아무거나 입력했을때 아래와 같은 창을 띄웁니다. 어셈블리 코드를 보면 다음과 같은 구간이 있습니다. CMP EAX, ESI를 통해 두 메시지박스 중 하나를 띄워줍니다. 단순히 성공했다는 메시지를 띄우는것이 목적이라면 JMZ명령어를 수정해 줄 수 있습니다.EAX와 ESI의 값을 같게 수정해줘도 되지만 JMZ명령어를 없애줘도 됩니다.위와 같이 JMZ명령이 있던 부분을 NOP로 채웠습니다. 그럼 점프가 발생하지 않고 바로 아래의 Great, 메시지를 출력하도록 할 수 있습니다. OllyDbg는 이렇게 변경된 파일을 실제 프로그램으로 생성하는 기능이 있습니다. 디버거에서만 변경사항을 확인해보지 않고 실제 변경 사항이 적용된..
2015.04.04 -
리버스엔지니어링 문제 12
http://codeengn.com/challenges/basic/12 Key값을 구하고 Key값을 메시지박스에 출력하도록 하라고하네요.Key는 바로 구할 수 있습니다.7A2896BF의 10진수인 2049480383가 키가 됩니다. 이 값을 넣으면 축하한다는 메시지박스가 뜨는데 이 메시지 대신 키값을 띄워야합니다.HexEdit로 열고 메시지 부분을 봅니다. 단순히 이 값을 키값으로 변경해주면 됩니다. 위치는 0x0D3B~0x0D45(NULL포함)이 됩니다.답은 20494803830D3B0D45
2015.04.03 -
리버스엔지니어링 문제 11
http://codeengn.com/challenges/basic/11 OEP와 Stolenbyte를 구하는 문제입니다.Ollydbg2.01로 열게되면 바로 제대로된 시작부분을 보여줍니다. OEP=0040100C그리고 OEP에서 이전 문제처럼 MessageBoxA를 호출하고 있습니다. 4개의 인자가 필요한데 하나밖에 없습니다. 답은 0040100C6A0068002040006812204000(더 자세한 풀이는 문제9번을 봐주세요.)
2015.04.03 -
리버스엔지니어링 문제 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