ftz.hackerschool.org 의 이미지를 사용하여 실습했습니다.
-Level7
level7 / come together
[level7@ftz level7]$ /bin/level7
|
Insert The Password : aaa 올바르지 않은 패스워드 입니다. 패스워드는 가까운곳에... --_--_- --____- ---_-__ --__-_- |
|
[level7@ftz level7]$ /bin/level7
|
Insert The Password : mate Congratulation! next password is "break the world". |
|
> 2진수를 ASCII 문자열로 바꾸는 문제였다.
> 자동으로 바꿔주는 프로그램 작성
[level7@ftz level7]$ cd tmp
[level7@ftz tmp]$ vi conversion.c
|
#include <stdio.h> #include <string.h> #define MAXARRAY 4 int binToInt(char *bin); int main() { int i, decimal[MAXARRAY]; char *bin="--_--_- --____- ---_-__ --__-_-"; char *ptr=bin; char dec[MAXARRAY*8]; char ascii[MAXARRAY]; char cmd[5]={"\n"}; printf("Resvered signals : --_--_- --____- ---_-__ --__-_-\n"); for(i=0; i<strlen(bin); i++) { if(*ptr == '-') dec[i] = '1'; else if(*ptr == '_') dec[i] = '0'; else if(*ptr == ' ') dec[i] = '\0'; ptr++; } dec[i] = '\0'; printf("Changed binary : %s %s %s %s\n", &dec[0], &dec[8], &dec[16], &dec[24]); printf("Changed decimal : "); for(i=0; i<MAXARRAY; i++) { decimal[i] = binToInt(&dec[i*8]); printf(" %d ", decimal[i]); } printf("\n"); printf("Chaged ascii :"); for(i=0; i<MAXARRAY; i++) printf(" %c ", decimal[i]); printf("\n"); sprintf(cmd, "(printf \"%c%c%c%c\" ; cat) | /bin/level7", decimal[0], decimal[1], decimal[2], decimal[3]); system(cmd); } int binToInt(char *bin) { int i=0; int count=0; while (bin[count]) i=(i << 1) | (bin[count++] - '0'); return i; } |
|
> sprintf의 cat 은 단지 기다리는 역할을 한다.
[level7@ftz tmp]$ gcc -o conversion conversion.c
[level7@ftz tmp]$ ./conversion
|
Resvered signals : --_--_- --____- ---_-__ --__-_- Changed binary : 1101101 1100001 1110100 1100101 Changed decimal : 109 97 116 101 Chaged ascii : m a t e <enter> Insert The Password : Congratulation! next password is "break the world". <enter> |
|
> enter를 쳐야 넘어가는 이유가 cat이라는 명령어 때문이다. cat을 빼고 돌려보면 바로 출력 되는 것을 알 수 있다.
[참고] binToInt 함수
|
#include<stdio.h> int binToInt(char *bin) { int i=0; int count=0; while(bin[count]) { i=(i << 1) | (bin[count++] - '0'); printf("i = %d\n", i); } return i; } main() { printf("%d\n", binToInt("1101101")); } |
|
> 매개변수로 받은 2진수로 된 문자를 하나씩 쉬프트 하면서 10진수로 바꿔준다.
'Security > 리버싱' 카테고리의 다른 글
Level8 문제 해결 (0) | 2017.11.30 |
---|---|
Level7 의사코드 (0) | 2017.11.30 |
Level7 문제 해결 (0) | 2017.11.30 |
Level6 문제 분석 -의사 코드 (0) | 2017.11.29 |
Level6 문제 해결 (0) | 2017.11.29 |