리버싱(44)
-
리버스엔지니어링 문제 20
http://codeengn.com/challenges/basic/20 프로그램을 실행하면 별다른 동작을 하지 않습니다. 키 파일이 필요하다고 하고 crackme3.key라는 이름의 파일을 요구하는 것 같으니 만들어주고 디버깅해봅니다.00401188위치에서 AL이 1이면 크랙 성공 메시지를 띄우도록 되어있습니다. AL을 1로 바꾸면 메시지창이 뜹니다. 저 이상한 영어가 나온 부분은 CodeEngn으로 바꿔야합니다. 시작 부분부터 천천히 보면 CreateFileA, ReadFile부분이 있습니다. crackme3.key라는 파일을 열고 ReadFile을 하는데 4021A0위치의 값을 12와 비교하고 있습니다. 해당 위치는 pBytesRead부분이고 12는 10진수로 18을 의미합니다. 읽어들인 길이가 18..
2015.04.13 -
리버스엔지니어링 문제 19
http://codeengn.com/challenges/basic/19 프로그램을 실행시켜보면 메시지박스만 나오고 약 10초후에 저절로 꺼집니다.문제는 이 프로그램이 몇 밀리세컨드 후에 종료되는지를 알아내는 것입니다. 정확한 값이 필요할겁니다. 디버거로 실행하면 다음과 같은 에러가 뜹니다.그냥 실행했을 때 멀쩡했는데 디버거로 실행했을 때 이런 메시지가 뜨면 이는 안티디버깅 처리가 되어있다는 것으로 의심할 수 있습니다. 혹시 몰라 PEiD로 확인했더니 UPX팩이 되어있었습니다. 언팩을해주고(OllyDbg1.버전에서는 PUSHAD를 보고 팩이 되어있다는 걸 바로 알 수 있었는데 2. 버전은 팩된 것도 고려해서 시작지점을 보여줍니다.)함수를 우회하기 위해 반환값인 EAX를 0으로 만들어줍니다. 그리고 실행을 ..
2015.04.06 -
리버스엔지니어링 문제 18
http://codeengn.com/challenges/basic/18 시리얼을 구하는 문제입니다.16번과 동일합니다.성공문자열이 있는 곳으로 가서 조건문을 보고 넣어준 값과 정답값을 확인해보면 됩니다.넣어준 값은 123123이고 정답은 String2에 들어있습니다.
2015.04.05 -
리버스엔지니어링 문제 17
http://codeengn.com/challenges/basic/17 이번엔 키값이 주어졌을 때 네임을 구하는 문제입니다. 정답은 네임의 해시값Name이 한자리라는데 한글자를 집어넣으면 더 입력하라고합니다. 해당 문자열이 있는 곳으로 가보면 CMP EAX, 3을 해주고 점프를 합니다. 여기서 3이 문자열의 길이라는 것을 추측할 수 있고 실제로도 3글자 이상일 때 메시지를 보여주지 않습니다. 3을 1로 바꿔주고 Name에 하나씩 대입해 봅니다. 그럼 F일 때 Good Boy를 출력합니다.답은 F의 MD5 해시값입니다. 800618943025315f869e4e1f09471012
2015.04.05 -
리버스엔지니어링 문제 16
http://codeengn.com/challenges/basic/16 15번에 이어 이번에도 시리얼을 구하는 문제입니다.풀이방법은 같습니다.분기점으로 간 후 비교하는 레지스터의 값을 확인하면 됩니다.
2015.04.04 -
리버스엔지니어링 문제 15
http://codeengn.com/challenges/basic/15 14번에 이어 이번에도 시리얼을 구하는 문제입니다.성공 문자열, 분기점이 있는 곳으로 갑니다.CMP를 통해 EAX와 45B844위치의 값을 비교하고 있습니다. EAX에는 두번째 텍스트박스에 넣어준 값이 들어있으므로 45B844위치의 값이 키값입니다. CodeEngn을 넣었을 때 해당값은 24928이라고하네요.
2015.04.04