반응형

전체 글 368

안드로이드 연결하기 및 메모리 덤프하기 - 2 (feat. adb & frida & fridump)

어제는 frida 설치까지 다 했으니, 오늘은 fridump를 사용해서 메모리 덤프를 해보도록 합시다! adb 데몬이 꺼져있을 수 있으니 다시 켜주고! 어제 배운 frida-ps -U 명령어로 디바이스 내에 frida-server가 잘 돌아가고 있는지 확인합니다~! frida-server가 꺼져 있으면 다시 켜주어야 해요! 그럴 경우, adb shell을 이용해서 다시 백그라운드로 실행시켜 줍니다> (스마트 폰을 껏다키면 frida-server는 고대로 종료됩니당.) frida-server가 제대로 실행되고 있는 거를 확인하면 이제 본 라운드로 돌아갑시다! 일단 fridump를 설치해야 합니다! fridump 란?fridump는 frida framwork를 사용하는 오픈 소스 메모리 덤핑 도구입니다. W..

안드로이드 연결하기 및 메모리 덤프하기 - 1 (feat. adb & frida & fridump)

이번 글의 최종목표는 안드로이드 메모리를 덤프하는 겁니다. 물론 곁다리로 안드로이드의 깊숙히 숨겨져있는 면까지도 접근할 수 있겠습니다만, 주 목적은 fridump 라는 도구를 이용해서 안드로이드 어플 사용시 사용자가 입력한 데이터들이 메모리에서 잘 발견이 되는지를 판단하는 것이겠습니다. 한 번에 정리하기에는 글이 너무 길어질 것 같아, 적당히 두 번에 걸쳐 정리하도록 하겠습니다. 먼저, 1 장에서는 adb를 설치해서 안드로이드와 사용자의 PC 간의 연결을 돈독히 하도록 만들어주고, frida 를 설치해서 fridump라는 메모리 덤프 도구를 사용할 기반을 만들어주도록 하겠습니다. 주의 : 루팅이 되지 않은 단말은 fridump 로 덤프할 수 있는 메모리 영역이 극도로 줄어듬을 확인하실 수 있습니다. 시작..

[pwnable.kr] random write-up

문제를 봅시당. 딱히 뭔가 특별한 정보는 없는 듯 합니다. 접속해 봅시다. 평범한 구조네요. 소스 코드를 읽어 봅시당. 결국, 사용자가 입력한 값과 random 값이 XOR 연산을 한 값이 0xdeadbeef 가 되도록 하면 되겠습니다. XOR 연산의 특징 덕분에 random 과 0xdeadbeef 가 XOR 연산하면 사용자가 입력해야 하는 값을 알 수 있겠네요. random 값을 구하는게 핵심이군요! random 값을 구해야 하는데, 위의 소스 코드에서 알 수 있는 사실하나는 rand() 함수의 시드 값이 없다는 점입니다. 컴퓨터는 기본적으로 난수를 생성하지 못합니다. 그래서 컴퓨터의 시간이나 마우스 포인터 같은 정보들에 기반한 값으로 시드 값을 생성하여, 특정 알고리즘에 넣은 뒤 난수를 구하는데요. ..

Write-up 2018.01.23

[pwnable.kr] blackjack write-up

문제는 위와 같습니다. 백만장자에게 플래그를 준다고 하네요. 서버에 접속해보면 블랙잭 게임을 진행하고 있다는 것을 알 수 있습니다. 대충 몇 몇 단서들을 종합해보면, 게임을 진행하면서 보이는 Cash 값, 즉 플레이어의 보유 자산이 1,000,000 이 넘으면 플래그를 준다는 것 같습니다. 문제에서 주어진 소스코드를 살펴보겠습니다. 플레이어의 카드 합이 딜러의 카드 합보다 작으면 배팅한 금액에서 차감하네요. 당연하네요. 근데, 여기서 한가지 생각해야 하는 점은 이게 프로그램이고, bet 가 int 형이라는 겁니다. 만약 배팅하는 금액인 bet 가 음수라면 어떻게 될까요? " - (-) = + " 아닌가요? 머릿속의 꽃밭이 실제로 실현이 가능할지, 혹여나있을지 모르는 점검 루틴을 살펴봐야겠습니다. 실제로 ..

Write-up 2018.01.22

Windows Registry

윈도우 레지스트리란?쉽게 말해서 윈도우에서 시스템을 구성하는데 사용하는 데이터베이스라고 할 수 있습니다. 각 각의 사용자, 응용 프로그램 및 하드웨어에 대한 정보 등 Windows에서 지속적으로 참조하는 설정 정보들이 담겨있어, 사용자가 윈도우를 사용한다는 것은 사용자는 레지스트리와 상호작용을 한다고 볼 수 있습니다.사용자와의 지속적인 상호작용을 하는 만큼 레지스트리는 다양한 많은 정보들을 남기고 있습니다. 이를 통해 조사관들은 수집한 자료들로부터 결정적 증거를 확보할 수 있겠습니다. 먼저 레지스트리는 5개 혹은 6개의 루트 키들로부터 이루어지는 수 많은 서브키들로 이루어져있습니다. 제가 사용하고 있는 윈도우 10 환경 기준으로 설명한다면, 다음과 같습니다.HKEY_USERS(HKU) : 로컬 상에 존재..

[pwnable.kr] cmd1 write-up

문제는 위와 같습니당. PATH 환경변수와 관련이 있는 문제인가 봅니당.요구하시는 대로 ssh로 접속하면 다음과 같은 코드를 볼 수 있습니당.1234567891011121314151617#include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r;}int main(int argc, char* argv[], char** envp){ putenv("PATH=/fuckyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0;} Colored by..

Write-up 2018.01.17

IDA 코드 패치 후 저장하기

문제 좀 풀어보려고 했더니만, 코드 패치가 필요한 문제였슴미다. 근데 문제는 IDA에서 코드를 수정한 다음에 수정한 내용을 반영한 elf 파일을 만드는 방법을 몰랐다는 점..ㅠ 파일을 저장하면 자꾸 i64 파일만 만들어지고..검색을 해도 딱히 도움되는 내용은 나오지를 않코.. 여러 번의 삽질 끝에 패치 후에 elf 파일로 만드는 방법을 알아냈스빈다!IDA의 위에 있는 옵션들 중에 Edit -> Patch program -> Apply patches to input file 를 사용하면 다음과 같은 화면을 볼 수 있습니다.위에 보이는 input file에서 이름을 바꿔줄 수도 있습니다..! 이걸 왜 이제야 알았는지 ㅠ 코드 패치 후 저장하는 방법까지 알았으니 이제 그만 문제를 풀러..힣

[angr tutorial] ais3_crackme writeup

angr 사용을 연습하도록 제공해주신 tutorial 문제 ais3_crackme에 관한 글입니다. 문제 링크는 다음과 같습니당.https://github.com/angr/angr-doc/tree/master/examples/ais3_crackme 문제를 받았으니, 한 번 실행시켜 봅시다.오잉? 뭔가를 입력하라고 하는 군요!그래서 한 번 줘봤습니다.사용자의 입력을 먼저 받아서 작동하는 프로그램인 겁니다. 그 입력 값이 뭔지를 찾아야겠습니다.IDA는 너무 치트인거 같아서 일단 objdump 로 까봤습니다. 아 학습했듯이 objdump -M intel -d [file] 이런 식으로 사용해주시면 되겠습니다.어라, 심볼들이 살아있을 줄 몰랐습니다. main 심볼이 지워지지 않았었네요. gdb 를 사용하면 더 편..

Write-up 2018.01.14

Angr 란?

Angr 는 python 기반의 바이너리 분석 프레임워크입니다. 정적, 동적으로 "Concolic" 분석을 사용해서 다양한 곳에 사용할 수 있습니다.Concolic 이라는 단어는 Concrete + Symbolic 에서 파생된 단어로 보입니다. 실제 값(Concrete)과 어떤 상징 값(Symbol)들을 사용해서 수 많은 분기문들 중에서 사용자가 원하는 영역으로 가는데에 도움을 줍니다. Concolic 이라는 개념에 대해서는 다음 링크를 참조하시는 것도 좋을 것 같습니다. https://en.wikipedia.org/wiki/Concolic_testing Angr 에서는 IR(Intermediate Representation) 이라는 것은 개념을 사용하는데요. 중간언어라는 개념입니다. 그림 출처 : ht..

Tools Repository 2018.01.14
반응형