WinAPI를 이용해서 PC 카카오톡 하단에 나타나는 광고창을 비활성화시키는 프로그램을 만들어보았습니다. Spy++로 카카오톡의 클래스 구조를 본 결과 하단의 광고는 EVA_Window란 클래스이고, 그 위에 있는 카카오톡의 핵심 부분은 EVA_ChildWindow란 클래스인 것을 알 수 있었습니다. 그래서 SetWindowPos 함수로 광고 클래스를 비활성화시키고, 그 위에 있는 창의 크기를 밑으로 늘려 광고가 없어져서 생긴 하단의 빈칸을 없애주었습니다. ※github : https://github.com/A6ly/HideKakaoTalkAd 2020-02-18 사용하기 편하게 Qt 라이브러리를 사용해서 Ui를 구현했습니다. PC 카카오톡 채팅방처럼 만들어 보았습니다. ㅎㅎ
import datetime import os from shutil import copyfile, copystat s = datetime.datetime.now() dir_name = str(s).replace(' ','_') os.mkdir(dir_name) os.chdir(dir_name) for root, dirs, files in os.walk('/var/log'): for f in files: if 'log' in f: src = root + '/' + f copyfile(src, './' + f) copystat(src, './' + f) 리눅스 로그 파일을 자동으로 백업 해주는 코드입니다.
Hackerschool FTZ의 Level 20 풀이입니다. 배열의 길이는 80인데 fgets 함수로 입력받는 길이는 79네요. 그렇다면 버퍼 오버플로우 공격을 할 수 없습니다. 그런데 printf 함수에서 %s 를 사용하지 않고 문자열을 출력했습니다. 그래서 FSB, 즉 포맷 스트링 버그를 이용해서 풀 수 있을 것 같습니다. 포맷 스트링 중에 %n이 있는데 %n은 쓰인 총 바이트 수를 지정할 정수형 포인터를 출력할 때 쓰는 것입니다. 그리고 이번에는 버퍼 주소 대신 함수가 끝나고 실행하는 소멸자 .dtors를 이용할 것입니다. 먼저 .dtors의 주소를 알아보겠습니다. .dtros가 끝날 때 호출하는 명령을 저장한 주소는 0x0849598입니다. 이번에는 쉘코드를 환경변수에 등록하고 주소를 알아내겠습니..
Hackerschool FTZ의 Level 19 풀이입니다. 18번 코드와 비교하면 너무나도 짧네요.. ㅋㅋ 하지만 자세히 보면 setreuid 함수가 없습니다. level 20의 uid를 'cat /etc/passwd | grep level20' 명령어로 확인해보니 3100이 나왔습니다. 그러니 기존의 쉘코드 앞에 setreuid(3100,3100);를 추가하면 될 것 같습니다. buf부터 ret까지의 거리는 0x100000000+4-0xffffffd8=44이므로 44입니다. 그럼 이제 setreuid(3100,3100);를 추가한 쉘코드를 환경변수에 등록하고 주소를 알아내겠습니다. 이제 공격 코드를 만들어서 넣어주면.. Password : we are just regular guys
Hackerschool FTZ의 Level 18 풀이입니다. 이번에는 코드가 엄청나게 깁니다.. shellout 함수를 실행시키면 될 것 같습니다. 그러려면 check 값을 0xdeadbeef로 만들어야 하는데 check에 값을 입력하는 부분이 없습니다. 그러므로 char string[100]; 보다 더 작은 주소에 있는 check에 접근하기 위해서 case 0x08: count--; printf("\b \b"); break; default: string[count] = x; count++; break; 위 코드를 이용해서 0x08로 4byte 뒤로 이동해서 check에 값을 넣어주면 됩니다. Password : swimming in pink
Hackerschool FTZ의 Level 17 풀이입니다. 16번 문제와 유사하지만 이번에는 shell 함수가 보이지 않습니다. 직접 shell을 실행시켜주는 코드를 작성해야 할 것 같습니다. 16번 문제와 shell 함수가 없다는 것만 빼고는 똑같기에 이번에도 40개의 문자를 앞에 넣어주면 됩니다. 이제 직접 쉘코드를 환경변수로 등록하고 shell 코드의 주소를 알아보겠습니다. 이제 공격 코드를 작성해서 넣어주면.. Password : why did you do it
Hackerschool FTZ의 Level 16 풀이입니다. void 형 call 변수에 들어가 있는 printit 함수를 shell 함수로 바꿔주면 될듯합니다. 0xfffffff0 - 0xfffffc8 = 40이므로 40개의 문자 뒤에 shell 함수의 시작 주소를 넣어주면 될 것 같습니다. shell 함수의 시작주소는 0x080484d0 이제 공격 코드를 만들어서 넣어주면.. Password : king poetic
Hackerschool FTZ의 Level 15 풀이입니다. 14번 문제와 거의 같지만 check 변수가 포인트 변수라서 check 포인트 변수에 있는 값이 가르키는 메모리 주소에 0xdeadbeef를 넣어줘야 합니다. gdb로 디버깅 해보니 14번 문제와 같게 buf와 check 사이의 거리가 40으로 같습니다. 0xdeadbeef 값이 존재하는 주소를 찾기 위해서 0x080484b0 주소부터 메모리들을 출력해보았더니, 0x08048b2 주소에 저장되어있는 것을 확인했습니다. 이제 공격 코드를 만들어서 넣어주면... Password : about to cause mass
Hackerschool FTZ의 Level 13 풀이입니다. 버퍼 오버플로우를 일으켜야 하는데 i 값을 보존시키면서 쉘코드를 삽입해야 할 것 같습니다, main 함수를 분석해보니 변수 i의 값을 보존시켜야만 한다는 것만 제외하면, 기존의 문제와 같게 strcpy 함수를 이용해서 버퍼 오버플로우 공격을 해야 하네요. 입력받은 값을 0xfffffbe8부터 붙였는데 0xfffffff4가 변수 i 값입니다. 0xfffffff4 - 0xfffffbe8 = 1036 그러므로 1036개의 값 뒤에 변수 i의 값을 넣고 ebp-4 까지 덮어 씌어주기 위해 12byte를 더 쓰고 RET과 더미 크기만큼인 4byte, 그리고 공격 코드를 넣어주는 방식으로 쉘코드를 작성하면 될 것 같습니다. 변수 i 값과 버퍼값을 비교하는..
IDA와 올리디버거로 지뢰찾기를 분석해서 지뢰찾기 게임의 맵 정보를 찾았습니다. 이 부분을 검색해서 실시간으로 게임의 맵 정보를 출력해주는 맵 핵 프로그램을 만들었습니다. 아래는 프로젝트의 소스코드입니다. 자세한 코드 설명은 주석에 달아놓았습니다! ※github : https://github.com/A6ly/WinmineMapHack #include #include #include #include #include #include #define BUFFER_SIZE 512 #define MAP_SIZE 700 typedef struct { BYTE MaxWidthX; BYTE MaxHeightY; BYTE ALLMineCount; }GameInfo; const unsigned int ADR_MINE_MEM..
Hackerschool FTZ의 Level 12 풀이입니다. level 11과 굉장이 비슷하지만 입력받는 함수가 다르네요. 입력을 strcpy가 아닌 gets로 받아서 main 함수의 인자로 넘겨 줄 수 없어서 입력 대기 상태에서 입력해주어야 합니다. 먼저 버퍼의 크기를 알아내 보겠습니다. 0x08048473과 0x08048479에서 264와 8, 총 272를 빼주고 있습니다. 메모리 구조는 다음과 같습니다. [Buffer(256)][dummy(8)][SFP(4)][RET(4)] level 11과 같은 메모리 구조로 되어 있네요. 이제 버퍼를 저장하는 주소를 찾아보겠습니다. 버퍼가 저장되는 주소는 0xbfffdfc0이네요. gets는 입력 대기 상태에서 값을 입력받으므로 위처럼 공격 코드를 괄호로 묶어주..
adb devices : 현재 연결된 디바이스 확인 adb connect 127.0.0.1:62001 : NOX adb 연결 adb root : 루트 권한으로 접근 adb unroot : 루트 권한 해제 adb remount : /system 파티션이 읽기, 쓰기가 가능하도록 다시 마운트 adb shell : adb shell 실행 adb start-server : adb 실행 adb kill-server : adb 종료 adb push [파일 이름] [디바이스 경로] : PC에서 연결된 디바이스로 파일 복사 adb pull [파일 이름] [PC 경로] : 연결된 디바이스에서 PC로 파일 복사 adb install [파일 이름].apk : [파일 이름].apk를 설치
Hackerschool FTZ의 Level 11 풀이입니다. 버퍼 오버플로우 기법에 대해서 공부를 한 뒤 풀었습니다. attackme 파일의 소스코드로 보입니다. strcpy 함수에서 문자열 길이 검사를 하지 않아서 오버플로우 취약점이 발생합니다. printf 함수에서 포맷 스트링 버그 취약점도 있네요. 이번에는 버퍼 오버플로우 취약점을 이용해서 풀어보겠습니다. attackme를 실행시키니 입력한 숫자를 다시 똑같이 출력해줍니다. gdb를 사용해서 분석해보겠습니다. 0x08048473과 0x08048479에서 264와 8, 총 272를 빼주고 있습니다. 메모리 구조는 다음과 같을 것입니다. [Buffer(256)][dummy(8)][SFP(4)][RET(4)] 그렇다면 공겨코드는 25바이트 쉘코드를 사용..
CodeEngn Advance RCE의 06번 문제입니다. 남은 군 생활이 며칠인지 구하는 문제네요.. 프로그램을 실행시키고 확인 버튼이나 닫기 버튼을 누르면 숫자가 1씩 계속 올라갑니다. 닫기 버튼을 눌러도 종료되지 않아서 작업 관리자에서 강제로 종료시켜야 했습니다. PEID로 확인해보니 UPX 패킹이 되어 있네요. 언패킹을 해준 뒤 올리디버거로 분석하겠습니다. 안티 디버깅 함수인 IsDebuggerPresent를 만나서 간단하게 우회해주었습니다. IsDebuggerPresent 함수를 우회한 뒤 함수 목록을 보니 아까 안 보였던 MessageBoxW 함수를 찾을 수 있었습니다. 모든 MessageBoxW 함수에 BP를 걸고 실행시켜보겠습니다. 실행시켜보니 45E071에서 브레이크가 걸렸습니다. 스택 ..
- Total
- Today
- Yesterday
- Level 05
- 풀이
- 안드로이드 멘토링
- Level 02
- Level 03
- Android
- HackingCamp
- xcz.kr
- Basic RCE
- wargame
- Level 01
- 멘토링
- Level 06
- CodeEngn
- hackerschool
- Reversing
- Advance RCE
- reversing.kr
- Programming
- Level 04
- 유니티
- 안드로이드
- Unity
- unity2d
- C#
- Write-up
- c++
- ftz
- pwnable
- 17th HackingCamp CTF
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |