zombie_assassin.c #include #include main(int argc, char *argv[]){ char buffer[40]; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') { printf("stack retbayed you!\n"); exit(0); } if(argv[1][47] == '\x40') { printf("library retbayed you, too!!\n"); exit(0); } // strncpy instead of strcpy! strncpy(buffer, argv[1], 48); printf("%s\n", buffer);} zombie_assassin은 strcpy가 아닌 s..
보호되어 있는 글입니다.
Base85 암호화 알고리즘 입력된 문자열을 32bit 단위로 나눕니다. 이때 모자란 bit는 0으로 채웁니다. 32bit의 비트 패턴을 10진수로 바꾼 수가 a*85^4+b*85^3+c*85^2+d*85^1+e*85^0을 만족하는 a,b,c,d,e를 구합니다. 구한 a,b,c,d,e에 각각 33씩을 더한 뒤, ascii코드표에서 해당되는 문자를 출력합니다. (양 끝에는 을 붙여줍니다.) 입력한 문자열이 I have a dog. 이라고 가정합니다. I=01001001 h=01101000 a=01100001 v=01110110 e=01100101 a=01100001 d=01100100 o=01101111 g=01100111 이때, 패딩으로 인해 추가된 문자열은 빼고 출력합니다. base85 인코딩 디코딩 ..
Base64 암호화 알고리즘 입력된 문자열 바이트를 6bit로 맞춥니다. 이때, 24bit 단위를 맞춰주어야 하므로, 나머지 부분은 0으로 채웁니다. 그 후, base64문자표에서 해당되는 문자열을 출력하고 0으로 패딩된 부분은 “=”로 출력합니다. 입력한 문자열이 TEST라고 가정합니다. T=01010100 E=01000101 S=01010011 T=01010100 TEST는 VEVTVA== 가 됩니다. base64 인코딩 디코딩 사이트 -> http://tools.web-max.ca/encode_decode.php
폴리비우스 암호 (Polibius cipher) 폴리비우스 (Polibius) 폴리비우스 암호는 고대 그리스 역사가인 폴리비우스(Polibius)가 만든 치환 암호입니다. 폴리비우스 암호는 아래와 같은 5x5 행렬의 암호표가 필요합니다. 폴리비우스 암호 또한 카이사르 암호처럼 간단한 치환암호 입니다. 암호화 하고자 하는 평문의 알파벳을 표의 윗쪽과 왼쪽에 있는 숫자를 이용하여 좌표로 치환하면 됩니다. ex) Hello polibius -> 23 15 31 31 34 35 34 31 24 12 24 45 43 -> 23153131343534312412244543
카이사르 암호 (Caesar cipher) 율리우스 카이사르 (Gaius Julius Caesar) 시저 암호라고 부르기도 하는 카이사르 암호는 로마 시대의 카이사르에 의해서 고안된 암호입니다. 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 간단한 치환암호로 로마 시대뿐만 아니라 영국의 앨프레드 1세나 칼 대제 시대에도 여러 방식으로 사용되었습니다. 예를 들어, 3칸씩 미룬다고 하면 이때 key는 3이 됩니다. 그리고 3칸씩 미루어 평문을 치환합니다. ex) Hello caesar -> Khoor fdhvdu
플레이페어 암호 (Playfair cipher) 플레이페어 (John playfair)와 휘트스톤(Charles Wheatstone) 플레이페어 암호(Playfair cipher)는 영국의 물리학자인 휘트스톤(Charles Wheatstone)과 영국의 수학자 및 지질학자인 플레이페어(John Playfair)가 만든 암호화 방식입니다. 하지만, 휘트스톤이 죽고 플레이페어는 이 암호화 방식을 자신의 이름을 본따 발표하게 됩니다. 이 암호는 5x5 알파벳 행렬을 이용하고, key값을 사용합니다. 예를들어, 키값이 CRYPTO라면 키값을 쓰고 키값에 사용되지 않은 나머지 알파벳을 5x5 행렬 구조로 맞춰 적은 것이 암호화, 복호화의 핵심이 됩니다. 5x5 행렬 구조로 알파벳을 적을 때, 칸의 개수를 맞춰주기..
assassin.c #include #include main(int argc, char *argv[]) { char buffer[40]; if(argc < 2){ printf("argv error\n"); exit(0); } if(argv[1][47] == '\xbf') { printf("stack retbayed you!\n"); exit(0); } if(argv[1][47] == '\x40') { printf("library retbayed you, too!!\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); // buffer+sfp hunter memset(buffer, 0, 44); } assassin은 ret의 주소가 \xbf와 ..
#include #include #include main(int argc, char *argv[]) { char buffer[40]; FILE *fp; char *lib_addr, *execve_offset, *execve_addr; char *ret; if(argc < 2){ printf("argv error\n"); exit(0); } // gain address of execve fp = popen("/usr/bin/ldd /home/giant/assassin | /bin/grep libc | /bin/awk '{print $4}'", "r"); fgets(buffer, 255, fp); sscanf(buffer, "(%x)", &lib_addr); fclose(fp); fp = popen("/us..
- Total
- Today
- Yesterday