전체 글 173

apk파일 디컴파일

apktool로 apk를 까면 smali코드가 나온다. apk는 사실 압축파일이므로, unzip이 가능하다. 그럼 안에 classes.dex가 있늗네, dex2jar를 이용해 jar파일을 만들 수 있다. (jar파일은 .class파일의 압축본이다.) 사실, dex2jar로 바로 apk 파일을 조질 수 있다. 어쨌든 jar가 나오는데, jadx나 jd-gui로 이를 .java로 만들 수 있다. 정리하자면, dex2jar abc.apk 그 후 jadx나 jd-gui을 이용하면 디컴파일 사실 http://www.javadecompilers.com/apk 에서 돌리면 한방에 다 해준다.

Android 2019.01.14

bs4를 이용한 웹 크롤링 (파싱)

html은 requests 모듈을 이용해서 가져오면되고, 그다음에 원하는 데이터만을 뽑아내야 하는데, 크롬 개발자 도구와 CSS의 selector를 이용하면 개꿀빨 수 있다. 아래와 같이 말이다. import requests from bs4 import BeautifulSoup url = 'https://bluebottlecoffee.com/store/coffee' r = requests.get(url) page = r.text.encode('utf8') soup = BeautifulSoup(page, 'html.parser') my_products = soup.select( '#heap-product-card > div.dn.df-s.flex-col.grid-col-1.transitional-silve..

Programming/python 2019.01.14

파이썬에서 한글 인식

웹에서 파싱한 데이터 등 한글을 인식해야 할때 참 골치아프다. unicode를 사용하면 간단하다. #-*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import requests #print unicode("안녕") # l = [165, 178] for x in range(1, 5000): url = 'http://www.hanatour.com/asp/booking/schedule/tour/tour_tour_comment.asp?pkg_code=JKP500190104TWW&pkg_mst_code=JKP500&value_travel_type=&value_req_page='+str(x) page = unicode(requ..

Programming/python 2019.01.14

[번역] Google Project Zero 정적 링크된 취약한 라이브러리 함수 탐색 (Searching statically-linked vulnerable library functions in executable code)

Searching statically-linked vulnerable library functions in executable code실행 가능한 코드에서 정적 링크된 취약한 라이브러리 함수 탐색 원문 : https://googleprojectzero.blogspot.com/2018/12/searching-statically-linked-vulnerable.html 역자 서문이 포스팅 원문은 google project zero 블로그에 게시된 글로, “정적 링크된 취약한 라이브러리 함수 탐지”라는 주제의 글이다. 문서 초반에서는 오픈소스 라이브러리에 대한 전반적인 설명과, 같은 코드라도 컴파일러마다 다른 바이너리를 낳을 수 있음을 설명한다. 문서 중반 부터는 SimHashing이라는 알고리즘을 소개하며,..

tuctf2018 lisa

미티게이션이 특이하다. PIE와 NX가 걸려있고, canary는 없다. main함수에서 8 번째 줄에서 bss영역인 pass에 malloc을 하고, 9 번째 줄에서 그 주소를 릭해준다. 이걸로 인해 PIE나 ASLR이 우회가 가능할 것으로 보인다. (처음에는 그런줄 알았다...) 위 함수는 취약한 함수인 fail 함수이다. 매개변수인 buf에 29바이트(0x1d)만큼 받는데, buf는 ebp에서 24바이트 (0x18) 만큼 떨어져있다. 그러니까 대충 아래와 같은 구조이다.buf (24) sfp ret이 상태에서 29바이트 만큼 read받으니까 sfp를 덮을 수 있고, 그 이후에 두 번의 leave-ret이 실행되므로 (checkPass leave-ret, main leave-ret) fake ebp라고 ..

write-up/CTF 2019.01.09

쉘코드 만들기 (asm 코딩)

section .text global _start _start: jmp bin_sh bin_sh: call main db "/bin/sh",0 main: pop ebx xor eax, eax push eax mov edx, esp mov ecx, esp mov al, 0xb int 0x80 bin_sh 부분에서 call main을 하면 리턴 어드레스 (다음 주소)가 스택에 들어가므로 스택에는 자연스럽게 /bin/sh의 주소가 들어가있다 (신박ㅋ) 이 상태에서 pop ebx하면 ebx에는 바로 /bin/sh의 주소가 잡힌다. 컴파일은 nasm -f elf shell.s ld -m elf_i386 -o shell shell.o opcode 뽑기는 for i in $(objdump -d shell | grep..

pwnable/Shellcoding 2018.12.23

쉘코드 만들기 (직접)

처음으로 쉘코드를 만들어 보았다.일단 32비트 기준으로eax : system call 번호ebx : 첫 번째 매개변수ecx : 두 번째 매개변수edx : 세 번째 매개변수 맞춰준 다음에, int 0x80으로 시스템 콜 목표는 execve(&"/bin/sh", NULL, NULL); xor eax,eax push eax mov ecx,esp mov ecx,esp push 0x68732f2f push 0x6e69622f mov ebx,esp mov al,0xb int 0x80 간단 ㅋ이걸 pwntools asm 함수를 쓰거나, 온라인 어셈블러로 opcode로 만들어준 후 콜하면 된다. #include char * sc = "\xe9\x0f\x10\x00\x00\x5b\x31\xc0\x50\x89\xe2\x8..

pwnable/Shellcoding 2018.12.23

python 정수형 signed, unsigned 변환

unsigned int로 변환하는건 쉽다. & 0xffffffff 해주면 된다. 문제는 signed로 변환이다. pwnable.kr exploitable 풀면서 고민해봤다. 이 문제는 eip를 signed로 받아서 약간 골치아프다. 0xffffffff에 1 더하고 값을 빼고 음수를 취하면 된다. def int32(x): return -(0xffffffff+1 - x) ---------------- ctypes 모듈을 이용해도 편하다. from ctypes import * c_int32(4521442434223).value

Programming/python 2018.12.18

docker 명령어 정리

도커 컨테이너 만들기 docker run -it -name [container_name] -p 외부:내부 ubuntu:16.04 /bin/bash 전체 컨테이너 보기 docker ps -a 중지된(exited) 컨테이너 시작 docker start -it [container_name] /bin/bash docker attach [container_name] 컨테이너에 명령어 보내기 docker exec [container_name] 이걸 이용해서 쉘을 딸 수 있다. docker exec -it [container_name] /bin/bash 중지하지 않고 빠져나오기 [ctrl + p] + [ctrl + q] 컨테이너 삭제 docker rm [container_name] 이미지 보기 docker image..

Docker 2018.11.02