분류 전체보기 썸네일형 리스트형 [CodeEngn]코드엔진 Advance RCE L06 문제: 남은 군생활은 몇일 인가 정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오 올리디버거를 열어보니, 패킹되어있을 확률이 있다는 것을 알았다. PEiD를 통해 패킹되어있음을 확인했다. upx를 언패킹해준다. 언패킹한 파일의 올리디버거를 연다. ollydbg를 통해 text를 확인해보니 AutoIt이 사용되었음을 확인할 수 있다. 또 밑을 보니, C++로 작성되었음을 확인했다. 디컴파일러로 풀 수 있을 것 같다는 생각을 했다. 따라서 AutoIt의 decompiler인 Exe2Aut를 사용했다. 군 생활이 790임을 확인했다. 더보기 [Reversing.kr]Music Player This MP3 Player is limited to 1 minutes. You have to play more than one minute. There are exist several 1-minute-check-routine. After bypassing every check routine, you will see the perfect flag. MP3 Player는 1분으로 제한되어있다고 한다. 1분보다 더 play해야한다고 한다. 1분체크 루틴이 있는데, 그 체크 루틴 후에 flag를 볼 수 있다고 한다. 일단 올리디버거를 통해 잠시 봐본다. Jump to MSV~라는 게 걸리긴 한다. intermodular calls 를 확인해본다. 확인해보니, rtcMsgBox가 보인다. 이렇게 메시지박스를 띄.. 더보기 [CodeEngn]코드엔진 advance RCE L03 시리얼 문제이다. DialogBoxParamA함수와 관련한 작업이다. 함수를 확인해보니, getDigitItem이 중요할 듯 하다. bp를 걸어주고 진행해봐야겠다. 앞의 bp에서 진행되지 않길래 지우고 그 뒤에 있던 bp로 가봤다. 이 창이 뜸을 확인했다. 난 check가 안 돼서 뭐지 싶었는데 tap+enter를 누르니까 갑자기 결과가 나타났다 근데 진행이 잘 안 돼서 확인해봤는데, CMP EAX,0x3인 것을 보니, 문자열이 3자리 이상이면 바로 종료함을 확인했다. CodeEngn은 8자리이니까 8로 수정해본다. 8로 수정. 수정후 바로 시작 드디어 정상적으로 넘어간다 아까 입력했던 abcde가 보이고 3265754874랑 비교함을 확인했다. 정답과 내가 입력한 값을 비교함을 확인했다. 더보기 [Reversing.kr]Easy Unpack Easy Unpack 패킹 여부를 확인했는데, 딱히 특별한 정보는 보이지 않는다. 무엇으로 패킹되어있는지는 알 수 없다. OllyDbg로 OEP를 찾아보도록 한다. 일단 ASCII 문자열이 보이고, 저기 40A109에서는 밑에 Easy_Unp가 보여서 bp를 걸어줬다. 저기 JNE에는 모두 Easy_unp가 있어 bp를 안 걸어주었고, JMP부분에 bp를 걸어주었다. 근데 더 내려보니까 분기점이 너무 많았다... 계속 내려가보니 저기가 진짜 마지막인 듯하다. bp를 걸어준다. 처음엔 실행이 안 돼서 bp를 다 풀고 40A1FB에만 bp를 걸어주고 다시 실행해봤다. 여기로 이동함을 확인했다. 답은 00401150 더보기 [pwnable.kr]lotto 일단 cmd창으로 들어간다. cmd창에서 나와있는대로 명령어를 치고, yes를 눌러주면 된다. ls 명령어를 통해 flag, lotto, lotto.c가 있음을 확인했다. 일단 다 실행해보도록 한다. 6자리의 로또 코드를 입력하라고 한다. 당연히 틀렸다고 나온다. 이제 소스코드를 확인한다. 이런 식으로 쳐서 코드를 확인해볼 수 있다. 너무 길어서 밑에처럼 정리해보도록 했다. #include #include #include #include unsigned char submit[6]; void play(){ int i; printf("Submit your 6 lotto bytes : "); fflush(stdout); int r; r = read(0, submit, 6); printf("Lotto Start.. 더보기 [HackCTF]Reversing Me code.c는 이렇다. #include #include int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; char enter[54]; printf("키를 입력하시게 : "); scanf("%s", enter); if (strlen(enter) == strlen(serial)) { for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++); if (i - 1 == strlen(enter)) printf("정답일세!\n"); } else printf("그건 아닐세...\n"); exit(0); } 코드를 보면, enter는.. 더보기 [codeengn]코드엔진 Advance RCE L02 문제: 정답은 무엇인가 ollydbg를 통해 문자열을 확인해봤는데, password를 입력받는 문제임을 확인할 수 있고, pw가 정답임을 생각해볼 수 있다. password 입력 부분으로 가서 부근에 bp를 걸어준다. 여기서 진행해보면서 4012D2에서 값을 받음을 확인했다. 코드를 더 진행해 보도록 한다. 004013C5에서 CALL EDX하는데, 이쪽으로 가본다. 여기서 CMP를 이용해 ECX와 어떤 값을 계속 비교하고 있다. 비밀번호가 출력됨을 확인했다. 더보기 [codeengn]코드엔진 Advance RCE L01 문제: 이 프로그램은 몇 밀리세컨드 후에 종료 되는가 정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오 ollydbg로 열어보려고 했는데 encrypt되어있다고 한다. PEiD로 보니, UPX로 패킹되어있음을 알 수 있다. cmd창에서 upx로 언패킹해주었다. 이제 ollydbg로 열어보도록 한다. ollydbg로 잘 열림을 확인했다. 종료에 대한 문제이므로 search for - intermodular calls를 확인한다. 시간과 관련 있는 문제이므로, timeGetTime에 set breakpoin on every~를 해준다. bp건 곳으로 가니까 이 부분이 나오고 그다음 bp로 가면 프로그램이 꺼져버린다. time 관련하여 연산하는 걸 찾아봐야 할 듯 하다. 일단 CALL EDI부분은 time.. 더보기 이전 1 ··· 20 21 22 23 24 25 26 ··· 32 다음