본문 바로가기

리버싱

[SuNiNaTaS]써니나타스 28번 zip파일의 비밀번호를 알아내야 한다. 그래서 아래처럼 zip파일의 구조를 알아봤다. Flag의 숫자를 바꿔봐야겠다는 생각을 하게 됐다. 신기하게도 'PK'가 1개가 아니라 밑에 계속 되어있음을 확인했다. 이 수 정도의 파일이 압축되어있는 듯 하다. 일단 6,7(즉 7,8번째) 자리의 Flag를 00 00으로 모두 바꿔주었다. 근데 뭔가 잘못된 듯 하다. 하나만 성공하고 다른 것들은 잘 안 됐다. 일단 성공된 것만 봤는데 답이 이게 아닐까 싶기도 하다. 근데 실패가 뜬 파일을 생각해봐야겠다. 아까 알아봤던 걸 다시 본다. 여기서 핵심은 bit임을 확인할 수 있다. 0809를 계산기로 돌려본다. 1000 0000 1001 --> 1000 0000 1000 이렇게 마지막 비트를 0으로 바꿔야 한다. 그럼, .. 더보기
[Wargame.kr]EASY_CrackMe 아무거나 입력했는데 'nono'가 나온다. 그래서 IDA를 통해 디컴파일해본다. 그럼 이렇게 디컴파일되는데, 1114_my_birth임을 생각해볼 수 있다. 숫자는 제대로 잘 몰랐었는데, 0x45A와 비교하는 것을 보고 유추할 수 있었다. 10진수로 바꿔주면 1114이므로 이를 사용하면 된다. 더보기
[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는.. 더보기