드디어!!!!!!!!!! 대망의 codeengn basic 의 마지막문제 20번을 풀었습니다!!!

우선 파일을 열었을때의 모습입니다.

crackme3.key파일이 있어야 한다해서 임의로 만들어 메모장으로 안의 내용도 채워보았습니다.

이제 디버거로 열어보겠습니다. 시작부터 createfile과 readfile이 보입니다. 

create파일은 파일이 있는지 보는 거겠고,

readfile은 아마 그 파일을 읽어주는 기능을 하겠는데 여기서 중요한게 있습니다. 바로 12라고 적혀있는 곳인데요 이 숫자를 변환해보면 바로 파일의크기가 18바이트가 되어야한다는 사실입니다. 그래서 파일의 크기를 우선 18바이트로 맞춰줘야 합니다.

그렇게 맞춰주면 CMP로 파일이 18바이트가 맞느냐 라고 검사를 하는데 손쉽게 통과할 수 있게됩니다. 그럼 점프문을 통과합니다.

이제 두번째 관문을 맞이했습니다. CALL으로 F7 스텝인투를 해보겠습니다.

CALL부분입니다 XOR연산자가 많습니다. XOR은 쉽게말해서 두 값이 같으면 0, 아니면 1이라고 생각하면편합니다. 우선 ECX값을 0으로 만들고 EAX값도 0으로 만들어버립니다.

ESI에 입력된 값이 들어오고 EBX의 끝에 두자리를 41로 바꾸는군요 참고로 41은 A입니다.

AL에도 입력값의 값을 넣는데 제가 만들때 시작을 'A11111...'로해서 A가 있기 때문에 AL에도 41이 들어갑니다.그러곤 XOR AL,BL입니다. AL도 41이고 BL도 41이니 당연히 0이되겠습니다. 그렇게 쭉쭉 내려와서 ADD연산자가 보입니다. EAX값이 현재 0이니 더해도 아무 변화가 없습니다. CMP AL,0을 하면 당연히 참이되겠습니다. 그렇게 점프를 합니다. 만약에 참이아니라면 CL을 1 증가시켜 처음으로 점프해서 다시내려오고 다시 올라가고 하는 방식이 반복되더군요...

위와같이 말입니다..

리턴을통해 나오게되면 이녀석이 기다리고있습니다. 제가 입력한 값과 12345678을 연산시키는것 같습니다. 이곳을통과하려면 0을 만들어야겠습니다. 여기에 보면 DS는 313131이라고 나옵니다 제가 바뀌는 부분을 알아보니 가장 마지막 4칸이 바뀌어야 한다는 것을 알게되었습니다.

여길 보면 알수있습니다.

그렇게 저는 여기를 CTRL+E 로 바꿔보았습니다.


이렇게 둘 다 12345678이 되었습니다 그렇게 점프를하지않고 또 통과할 수 있게됩니다.

그렇게 쭉 내려오다보면 우리가 봐야하는 문구가 달린 MESSAGEBOX를 찾게됩니다.

완료!!


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 19  (0) 2015.08.08
CodeEngn Basic 18  (0) 2015.08.08
CodeEngn Basic 17  (0) 2015.08.05
CodeEngn Basic 16  (0) 2015.08.05
CodeEngn Basic 15  (0) 2015.07.27


Basic 19번 문제입니다.

파일을 실행시켜본 화면입니다.

형식을보니 패킹이 되어있는것 같습니다.

디버거로 열어보았습니다. PUSHAD로 시작하는군요.

POPAD를 찾아 점프문을통해 점프 해보았습니다.

본 코드가 나왔습니다.

하다보니 안티디버깅 함수 IsDebuggerPresent함수가 나왔습니다.

손쉽게 처리해주시고 넘어갑니다.

문제를 풀다가 발견한 함수가 있는데 sleep함수와 이 timegettime함수였습니다. 몇개를 살펴보니 sleep함수와 timegettime함수가 같이있어야 한다해서 후보를 몇개 지워봤습니다. 그래서 찾은 부분이

이부분입니다. timegettime함수로 갔다가 sleep함수로 넘어와서 일정한 time이 지난후에 sleep함수로 가는 방식일거라 생각했습니다. 각각의 아래에 CALL EDI 도 눈에 띄었습니다.

그렇게 cmp eax,esi를 한 후에 점프를 하여 

다시 cmp명령어가 나옵니다. 아마도 여기의 2B70값의 10진수가 정답일거라 생각했는데 정답이었습니다. 

'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 20  (0) 2015.08.09
CodeEngn Basic 18  (0) 2015.08.08
CodeEngn Basic 17  (0) 2015.08.05
CodeEngn Basic 16  (0) 2015.08.05
CodeEngn Basic 15  (0) 2015.07.27


Basic 18번 문제입니다.

파일형식을 먼저 보니 딱히 잡아낼건 없는것 같습니다.

디버거를 통해 열어보았습니다.

성공했단즌 Your serial is correct! 라는 문구가 있는 곳으로 이동해보겠습니다.

흠 이번엔 다른문제와 다르게 CMP 명령어가 직접적으로 적혀있진 않았습니다. 하지만 CALL명령어에 보면 IstrcmpiA함수를 불러내는것이 보였습니다 CMP가 비교 명령어니 여기에 뭔가 잇을것같아 BP를 걸어보았습니다.

BP를걸고 실행시켜보았습니다.

NAME는 codeengn이라 문제에 언급하였고 serial은 임의로 넣어보겠습니다.

check를 누르면 함수부분에 제가 입력한값 하나와 다른값 하나가 적힙니다.

저 위에 적힌 값을 한번 똑같이 적어보겠습니다.

저렇게 적어주고 다시한번 check를 눌러보겠습니다.

이렇게 나오며 이제 넘어보면 JE점프문을 통과해서 

성공했다는 메세지가 나오게됩니다!


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 20  (0) 2015.08.09
CodeEngn Basic 19  (0) 2015.08.08
CodeEngn Basic 17  (0) 2015.08.05
CodeEngn Basic 16  (0) 2015.08.05
CodeEngn Basic 15  (0) 2015.07.27


Basic 17번 문제입니다.

파일을 열어 네임과 키에 적절한 값을 입력해봅니다.

더많은 문자를 입력하라... 문제에서는 한글자만 입력하면 된다했는데 뭔가 문제가 생긴 모양입니다.

문제의 그 문구로 가보겠습니다.

여기를 보면 CMP명령어에 3글자 가 되어야 하게끔 되어있었습니다. 손봐주면 될것같습니다.

한글자로 바꿨습니다.

이제 성공을 말해줄 문구가 필요합니다.딱히 뭔가가 잘 보이지않아서

파일을 새로 덤프하고

실행시켜보았습니다. 그래서 한글자니까 하나하나 대입을 하니 성공하게되었습니다.

너무 노가다로 푼 점이 조금 아쉬운 문제였습니다. 시간이나면 다시한번 풀어봐야할 문제였던것같습니다.


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 19  (0) 2015.08.08
CodeEngn Basic 18  (0) 2015.08.08
CodeEngn Basic 16  (0) 2015.08.05
CodeEngn Basic 15  (0) 2015.07.27
CodeEngn Basic 14  (0) 2015.07.27


Basic 16번의 문제입니다.

파일을 열어보니 위와 같은 창이 나왔습니다.

파일의 정보를 보니 패킹되어있진 않은것 같고 C++로 코딩되어있는것같습니다.


디버거를 통해 열어보았습니다.

우선 성공했다는 Good job!이 있는 문자열로 이동해 보겠습니다.

이부분에 보면 CMP를 통해 비교를 한 후 성공한지 실패한지 점프문을 통해 이동시켜버리는 부분이 있습니다.

점프문은 아주 아주 멀리로 가버리는군요 Good job!과는 거리가 멉니다.

여기에 bp를 걸고 실행시켜보겠습니다.

파일을 실행시킨것과 같은 창이 나오는데 이름은 codeengn이고 패스워드는 아무거나 임의로 입력해줍니다.

그러면 비교를 하는데 eax값은 우리가 입력한 값이니 다른값이 정답이 되겠습니다.

10진수로 변환해서 입력하면

Good Job!

'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 18  (0) 2015.08.08
CodeEngn Basic 17  (0) 2015.08.05
CodeEngn Basic 15  (0) 2015.07.27
CodeEngn Basic 14  (0) 2015.07.27
CodeEngn Basic 13  (0) 2015.07.26


Basic 15번 문제입니다.

우선 파일을 실행시켰을때의 모습입니다. 임의로 넣어봤더니 Try Again!이라는 메세지가 나왔습니다.

패킹되어있진 않은것 같습니다.

디버거를 통해 열어보겠습니다.

텍스트를 보니 성공했다는 메세지가 보입니다. 여기로 가보겠습니다.

성공했다는 메세지와 실패했다는 메세지 위에보면 CMP(비교)하는 명령어가 있습니다. 계속해서 비슷한 문제군요 BP를걸어 F9실행을 시킵니다.

그러면 이렇게 파일을 실행할때와 똑같이 나오는데 다시한번 임의로 입력을하고 Check it!을 해보겠습니다.

그러면 아래와같이 16진수의 숫자가 나옵니다.

이것을 변환하면 시리얼 키가 되겠습니다.


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 17  (0) 2015.08.05
CodeEngn Basic 16  (0) 2015.08.05
CodeEngn Basic 14  (0) 2015.07.27
CodeEngn Basic 13  (0) 2015.07.26
CodeEngn Basic 12  (0) 2015.07.26


Basic 14번 문제입니다.

패킹되어있는 파일입니다. 디버거로 열어보니

POPAD를 찾아 점프문으로 점프해보겠습니다.

본래 코드가 나왔습니다.

텍스트를 검색해보면 성공했다는 문구가 나옵니다 그곳으로 이동해보겠습니다.

성공했다는 문구와 실패했다는 문구 위에보면 CMP(비교)를 하여 성공한지 실패한지 보여주고있습니다. 여기에 BP를걸어보겠습니다.

그리고 F9해보면 파일을 실행했을때의 상황이 됩니다. 

여기에 위와같이 입력합니다.

그리고 체크하면 다음과같은 상황이 벌어지는데 CMP로 EAX와 ESI를 비교한다 하였으니 EAX를 10진수로 바꿔보면 12345가 됩니다. 그렇다면 ESI를 10진수로 바꾸면 시리얼 넘버가 되겠습니다.


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 16  (0) 2015.08.05
CodeEngn Basic 15  (0) 2015.07.27
CodeEngn Basic 13  (0) 2015.07.26
CodeEngn Basic 12  (0) 2015.07.26
CodeEngn Basic 11  (0) 2015.07.20


Basic 13번 문제입니다.

이파일은 보아하니 C#으로 만들어진듯 한데 디버거로도 열리지 않는것보니 다른방법을 찾아보도록 했습니다.

일단 내가 봐야하는 코드의 시작점은 00400000부터이입니다.

ILSpy라는 디컴파일러를 통해 열어보았습니다.

main부분을 들여다보니 코드 몇개만 바꾸면 뭔가 풀 수 있을것 같은 느낌이 들었습니다.

우선 코드를 저장하고, visual studio로 가보겠습니다.

main부분을 보면 다음과같이 나와있는데 text가 패스워드인듯 합니다. 그래서 콘솔창에 패스워드가 나오도록 해야한다는 생각을 하였습니다.

Console.WriteLine("~~~~~");를 하니 콘솔창에 문자가 나왔으니 이대로 하면 문자가 나올거라 생각하여 위와같이 직접 한줄 적어서 컴파일 해보았습니다.

그랬더니 위와같이 패스워드같은것이 나왔습니다.

입력해보니 성공한것같습니다.

'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 15  (0) 2015.07.27
CodeEngn Basic 14  (0) 2015.07.27
CodeEngn Basic 12  (0) 2015.07.26
CodeEngn Basic 11  (0) 2015.07.20
CodeEngn Basic 10  (0) 2015.07.16

+ Recent posts