Advance 09번 문제입니다.

디버거로 열어 시작해보겠습니다.

이렇게 관련된 문자열이 있는 부분으로 가보겠습니다. 우선 UserName 을 입력받는 함수가 있었습니다.

이렇게 아무렇게 입력하고,

password를 받는 함수에서도 이렇게 입력해줍니다.

그다음에 나오는 함수가있는데 여기로 들어가보겠습니다.

여기보면 저기 제가 입력한 username도 있습니다. 여기를 하나하나 살펴보면

중간에 이렇게 제가입력한 password를 비교하는 문자열이 나옵니다. EAX값은 제가입력한 비밀번호의 16진수 값이고 그걸 비교하는 다른 값은 10진수로 바꿔주게되면 PASSWORD가 되겠습니다.

이름은 다음을 통해 알수있습니다. 저기 루프문을 보면 ABCD와 DonaldDuck을 비교하는 루프문임을 알 수 있습니다. 이를 조합해보면

정답을 맞추게 됩니다. 위를 다 해도 원래 2번째 Welcome...은 나오지않습니다. 이는 성공했다는 문자열로 가는 문턱에 점프문이 있어 여기를 계속 띄어넘어버리기 때문입니다. 그부분을 찾아 NOP으로 바꿔주시면 위와같이 나오게 됩니다.

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

CodeEngn Advance 08 (미해결)  (0) 2015.08.26
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


Advance 08번 문제입니다.

우선 디버거를 통해서 프로그램에서 입력했을 때 나온 문자열을 찾아 이동하였습니다.

CMP EAX,3이라고 되어있는 부분을 CMP EAX,2라고 바꾸어주었습니다. 그리고 실행시켜보면

이렇게 입력하고 CHECK IT을 눌러보겠습니다.

그리고 많은 CALL 명령어 중에 맨밑에는 시리얼 번호를 판별하는 함수이고 그 위에함수가 NAME을 판별하는 함수여서 저부분에 먼저 들어가보겠습니다.

정말 길게 늘어진 코드들을 보며 하나하나씩 이해하려고 노력했습니다...

이렇게 루프문도 하나 찾았습니다. 총 두번 왕복하는 루프문인데 아마 문자가 2자리라서 그런것 같습니다. 이부분은 첫번째 문자를 찾아내는 루프문이고


두번째 루프문도 찾아내었습니다. 첫번째와 비슷한 형식인데 역시 2번 왕복합니다. 두번째 문자를 찾아내는 루프문인것 같습니다.

세번째도있고

4번째도 있지만 그냥 단순히 계산을 해주는 모양인것 같습니다. 

이런 루프문을통해서 BRUTE FORCE기법을 사용하기위해  코딩을 해줘야하는데 아직 저에게 코딩실력이 갖추어지지 않아서 문제를 풀지 못하고있습니다. 어느정도 배우고나면 다시 문제를 손봐야겠군요 ㅠㅠ

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

CodeEngn Advance 09  (0) 2015.08.27
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



아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ정말 힘들었습니다. 6번;

일단 패킹이되어있습니다.

뚫어주시면 됩니다.

이제 본격적으로 시작해봅니다.

일단 안티디버그 함수가 발견되었습니다.

없애주면 됩니다.

일단 메세지 창이 떳기때문에 이함수를 위주로 보면될것같습니다.

맨위에 messageboxa는 안티디버그 함수가 디버깅을 감지했을때 나오는 경고창이고 다른함수를 탐색해봤습니다. messageboxw함수를 말이죠

그랬더니 스택창에 이렇게되어있는 함수하나를 찾았습니다.

여기서 저는 몇일간 삽질을 했습니다.막 CALL이란 CALL부분은 전부 F7해서 들어가본것같습니다. 그렇게 하다가 드디어 오늘 이시각에 찾아내었습니다. 

정말 그럴싸한 부분아니겠습니까?!!!?!?!?!?

제가 마지막에 메세지에 띄운 창에 5가 적혀있었는데 바로 이 5와 어떤 숫자를 비교하는것을 발견했습니다!!!!!!!!!!!!!!!!!!

정답은 나온것같습니다 MD5해쉬값으로 변환하면 답이되겠군요

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

CodeEngn Advance 09  (0) 2015.08.27
CodeEngn Advance 08 (미해결)  (0) 2015.08.26
CodeEngn Advance 05  (0) 2015.08.20
CodeEngn Advance 04  (0) 2015.08.20
CodeEngn Advance 03  (0) 2015.08.15


strcomp 함수입니다. 이 함수는 문자열 비교 함수인데 

vbaStrCmp 함수 등과 똑같은 역할을 하는 함수입니다. 

string1 과 string2가 있는데

string1이 string2보다 우선 정렬 된다면 -1을 반환하는것 같고

string1=string2이면 0을 반환하고

string1이string2보다 나중 정렬 된다면 1을 반환하는것 같습니다. 


잘못된점이나 피드백을 주실 분 계시면 댓글 달아주시면 감사하겠습니다.

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

Istrcmp  (0) 2015.08.08
timeGetTIME  (0) 2015.08.08


Advance 05번 문제입니다.

프로그램을 실행시켜보겠습니다.

임의로 값을 넣어보니 위와같은 메세지가 나옵니다.

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

텍스트를 찾으니 별다른 것이 나오지않아서 함수를 찾아보았습니다. 그랬더니 vbaStrCmp함수가 있어서 이부분으로 가보았습니다.

BP를 걸고 실행시켜보니 프로그램이 실행되어서 값을넣고 OK를 눌렀습니다.

그리고 함수 안으로 들어오니 위와같이 되어있었습니다. ESP+8번지에 값을 넣고 함수를 호출한 후 리턴하는 형식입니다.

내리다보니 제가넣은 값과 어떠한 다른값이 보였습니다. 다시보니 첫번째 PUSH에는 제가 넣은 값이 들어갔고 2번째 PUSH에는 어떤 다른 값이 들어갔습니다.

EAX에는 제가 넣은값, ECX에는 함수에서 비교가 되는 값이 들어있었습니다.

그대로 넣어보니 정답이었습니다.

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

CodeEngn Advance 08 (미해결)  (0) 2015.08.26
CodeEngn Advance 06  (0) 2015.08.23
CodeEngn Advance 04  (0) 2015.08.20
CodeEngn Advance 03  (0) 2015.08.15
CodeEngn Advance 02  (0) 2015.08.15


Advance 04번 문제입니다.

프로그램에 문제와같이 codeengn 을 넣고 12345를 넣어보았습니다.

에러 메세지가 나옵니다..

디버거를 통해 열어보았습니다. 흠 시작부터 점프문으로 시작하는군요 한번 내려가보겠습니다.

밑으로 내려가면 저부분에서 다시 위로 올려버립니다. 저밑에 JMP문으로 가고싶은데 말입니다. 그래서 저는 JMP에 BP를걸고 F9로 넘어와 계속 진행하니 어떤 코드가 나왔는데 거기서 CTRL + A를 누르니 본코드가 나왔습니다.

위와같이 말입니다. 이제 쉽게 성공했다는 문구를 찾아가보도록 하겠습니다.

저는 우선 저부분이 비교하는 함수 IstrcmpA함수 가 있기때문에 BP를 걸고실행시켜 codeengn을 입력하고 12345를 넣어보니 저렇게 나왔습니다. 12345와 뭔가를 비교하는것 저것이 serial이라 생각하여 입력했더니 답이 아닌것입니다..

그래서 저는 차근차근 분석을 해보았습니다. 옆에 코멘트를 달면서 저기 JNZ까지는 아마도 NAME이 적혀있는가를 보는곳 같았습니다. 그밑에는 name에 따른 시리얼값을 만드는 곳이고 그 다음은 입력한 값과 시리얼값을 비교하는 함수였습니다. 의외로 문제는 가까운 곳에 있었습니다. 제가 입력한 부분은 'codeengn'에 대한 시리얼값을 비교한것이었고, 원래는 'CodeEngn'에 대한 시리얼값을 비교해야 했습니다. 그래서 저는 다시 CodeEngn 을 넣고 비교하니 답을 찾게되었습니다.


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

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


Advance 03번 문제입니다.

디버거를 통해 열어 실패했다는 문자열로 달려가보았습니다. 문자열이 나오기 전인 저 부분에 BP를 걸고 실행시켜보았습니다.

프로그램이 실행되기에 적절한 값을 넣고 CHECK를 눌러보았습니다.

그렇게 쭉 내려오다보면 두 값을 비교하는 함수에 제가넣은값과 또 다른값이 비교되고있었습니다. 이값이 정답이 되겠습니다.


'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 02  (0) 2015.08.15
CodeEngn Advance 01  (0) 2015.08.15


Advance 02번 문제입니다.

파일을 실행시켜보았습니다. Enter Password: 라는 문자열이 있습니다. 아무거나 쳐보니 그냥 꺼져버렸습니다.

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

Enter Password라는 문자열이 있는곳으로 이동하였습니다. 하나하나 실행시켜보며 입력함수 까지 찾아내었습니다.

마지막 입력함수를 실행시켜보니 이렇게 비밀번호를 입력할 수 있게 되어 12345를 넣어보았습니다.

그렇게 내려오다보면 어느샌가 반복하고있는 제가 보였습니다. 계속 위로 다시 점프를 시켜버리길래

그냥 맨밑에 점프문을 없애버렸습니다. 그렇게하니 자연스래 아래로 내려올 수 있게되었습니다.

그렇게 내려오다보면 이부분을 지나면 프로그램이 끝나게됩니다.

여기로 들어가보면 위와같은 수많은 CMP가 보일것입니다. 죄다 CMP 비교를 해서 아니면 저 아래로 점프시켜버립니다. 고로 저는 ECX값을 계속 맞춰주며 한글자씩 얻어간 끝에 답을 얻게 되었습니다.

'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 01  (0) 2015.08.15

+ Recent posts