Basic을 끝내고 advance로 들어오게되었습니다.

파일은 패킹이 되어있는것 같습니다.

디버거로 한번 열어보았습니다.

언패킹을 하여 본래코드로 들어왔습니다.

분석을 하다보니 안티디버깅 함수가 존재하길래

우회를 해주었습니다.

이제 밀리세컨드안에 프로그램을 끝내버리는 함수를 찾아야하는데 베이직에서 푼 문제와 같은 함수가 여기 존재합니다. 이 함수들 중 하나겠죠

찾았습니다. CMP명령어를 보시면 EAX값과 ESI값을 비교하여 EAX값이 커야 점프를 하게됩니다.

바로 이부분입니다.

점프를 하게되면 EAX값과 ESI값을 연산시켜주는데 연산 시켜준 후 CMP를 하여 EAX값과 EBX+4값을 비교시켜줍니다. 만약에 EAX값이 더 크다면 끝이나는것입니다.

그렇다면 끝이나려면 EAX값이 EBX+4 값 보다 커야지 끝나게됩니다. 고로 EBX+4값이 정답이 되겠습니다.

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

CodeEngn Advance 06  (0) 2015.08.23
CodeEngn Advance 05  (0) 2015.08.20
CodeEngn Advance 04  (0) 2015.08.20
CodeEngn Advance 03  (0) 2015.08.15
CodeEngn Advance 02  (0) 2015.08.15


드디어!!!!!!!!!! 대망의 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


Istrcmp함수입니다. CodeEngn Basic 18번 에서 사용했던 함수입니다. 

영어를 한번 보시면 두개의 문자열을 비교하는 함수라는 소리같습니다. 


리턴타입은 int입니다

'Reversing > Function' 카테고리의 다른 글

strcomp함수  (0) 2015.08.20
timeGetTIME  (0) 2015.08.08


timeGetTime함수입니다. 바로 CodeEngn Basic 19번에서 다루었던 함수입니다. 

영어로 되어있는 것을 조금 풀어쓴다면 밀리세컨드 단위로서 윈도우가 우선 시작되고 난 후 부터 시스템의 시간을 재는 함수입니다. 

파라미터는 없는 함수이며 리턴값은 시스템시간을 밀리세컨드로 리턴하는 함수입니다.

'Reversing > Function' 카테고리의 다른 글

strcomp함수  (0) 2015.08.20
Istrcmp  (0) 2015.08.08


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

리버싱을 하기위해 필요한 아주 기본적인 프로그램입니다.

ollydbg download : www.ollydbg.de



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

+ Recent posts