Reverse Engineering(38)
-
리버스엔지니어링 문제 14
http://codeengn.com/challenges/basic/14 네임이 CodeEngn일 때 Serial을 구하라고 합니다.답은 쉽게 찾을 수 있습니다.비교 구문에서 EAX와 ESI를 비교해주는데 키는 ESI에 들어있고 사용자가 2번째 에디트박스에 입력한 값은 EAX에 들어있습니다. ESI는 129A1로 10진수로 76193이며 이 값이 키가 됩니다.
2015.04.04 -
리버스엔지니어링 문제 13
http://codeengn.com/challenges/basic/13 패스워드를 찾는건데 Ollydbg로 열리지 않습니다. PEiD를 보면 닷넷으로 되어있다고하네요.dotpeek을 이용해서 디컴파일 합니다.암호문, salt값이 보이고 암호화, 복호화 알고리즘이 보입니다. 여기선 평문키를 구할 수 없을 것 같습니다. 암호문을 복호화 함수를 통해 평문키를 뽑아내도록 합니다. dptpeek에서 솔루션으로 export 합니다. 평문을 암호문으로 바꿔주는 소스 수정이 필요없이 바로 ReadLine()에서 복호화한 암호문과 비교하고있습니다. 정답은 Leteminman
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