분류 전체보기 114

[dreamhack] rev-basic-1

분석 시작~! ida 로 정적분석 해봅시다 옹~ 얘도 chall0 처럼 비슷하네요 함수 이름 싹다 바꿔줍시다 그러면 중간에 있는 저 sub_140001000 함수가 굉장히 거슬리죠? 이 함수 코드를 함 봐봅시다 당황쓰... a1[] 이라는 리스트에 하나하나를 대입해서 아스키코드와 같은지 보고 있는 것 같다! 그럼 저 아스키 코드를 하나하나 변환해보면 답이 나오겠죠?? 꿀팁! IDA 에서 숫자를 문자로 (아스키코드) 바꾸고 싶다면 r 을 누르면 됩니다... 그럼 이렇게 바뀌어용~~~~ 이들을 다 조합해보면 답은? Compar3_the_ch4ract3r ^_^

WARGAME/reversing 2023.09.15

[dreamhack] rev-basic-0

분석을 해봅쉬다 먼저 실행을 해보면 다음과 같이 나온다 이때 아무거나 입력하면 당연히 실행이 종료되겠죠 IDA 로 정적분석을 해서 디컴파일을 해봅시다 여기서 sub_14001190 은 printf() 함수이고 sub_1400011F0 는 scanf() 함수로 보이네용 우리 가독성을 위해 각 함수명을 바꿔봅쉬다 이러면 조금 더 보기 편하죠 그럼 저 중간에 있는 sub_140001000 함수가 뭔지 알아야겟다! 당황쓰.. 바로 strcmp 함수였네요?! 저기서 Compar3_the_str1ng 이라는 문자열과 동일한 경우에만 1 을 리턴하고 있습니다 같지 않다면 0이 리턴되겠죠 그럼 메인 함수에서 같은 경우에는 Correct 가 나오고 안 같으면 Wrong 이 실행되고 종료되는 거겠네요... 그럼 정답은 ?..

WARGAME/reversing 2023.09.15

[Crackme] #1

학교 수업 중에 진행되었던 크랙미 1번을 풀이해봅시다~~ 실행을 하면 패스워드를 입력하라는 창이 뜨고 아무거나 입력해보면 프로그램이 꺼진다. 알맞은 패스워드를 입력해야지 실행되는것으로 보임! 아이다 프로로 먼저 분석을 해보자 일단 psedocode를 보면 다음과 같이 나와있는데, 무조건 패스워드의 길이는 24여야지 넘어가는것으로 보인다. 이부분은 어셈블리에서도 확인이 가능하다 여기에서 패스워드를 입력받고 esp+0ACh+Format 이라는 곳에 아까 저장해뒀던 eax 를 넣고 있고 (우리가 입력한 값) eax에 strlen이라는 함수를 불러 문자열의 길이를 저장하고 있다. 그 후, eax를 16진수로 18h, 즉 10진수로 24 길이와 비교하고 있다. 만약 아닐 경우 함수로 점프를 하지 못하게 되어 밑에..

WARGAME/reversing 2023.09.11

[abex crackme] 2번

2번을 실행해보면 다음과 같은 화면이 나온다 그리고 아무거나 입력해보면 다음과 같이 메세지 박스가 뜬다 디버거로 분석을 해보자. 우리는 저 문자열을 참조한 부분을 찾아보자. 다 중단점(F2)을 걸어놓고 더블클릭해서 자세히 봐보자. 그리고 점프 문들 위로 함수 호출 하는 부분들도 브레이크 포인트를 걸고 아무 값 입력해서 체크 버튼을 눌러보면 다음과 같다 이때, 계속 진행을 하다가 보면 Congratulations을 하기 위해서는 00403332에 있는 명령인 점프를 하지 않고 그냥 밑으로 진행을 해야한다. 그러면 test ax,ax 를 했을때 ZF 가 0으로 설정이 되면 안된다. push edx 와 push eax 에서 스택에 값을 넣고 있는데, 이때 스택을 따라가 보면 다음과 같다 여기서 aaaaaaaa..

WARGAME/reversing 2023.09.11

x64 어셈블리 언어 - 주요 명령어 정리 (1)

데이터 이동 mov dst, src : src에 들어있는 값을 dst에 대입 mov rdi, rsi rsi의 값을 rdi에 대입 mov QWORD PTR[rdi], rsi rsi의 값을 rdi가 가리키는 주소에 대입 mov QWORD PTR[rdi+8*rcx], rsi rsi의 값을 rdi+8*rcx가 가리키는 주소에 대입 lea dst, src : src의 유효 주소(Effective Address, EA)를 dst에 저장 lea rsi, [rbx+8*rcx] rbx+8*rcx 를 rsi에 대입 퀴즈! [Register] rbx = 0x401A40 ================================= [Memory] 0x401a40 | 0x0000000012345678 0x401a48 | 0x0..

study/보안 2023.09.08

윈도우 메모리 구조

섹션 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있음 섹션: 유사한 용도로 사용되는 데이터가 모여있는 영역 .text: PE의 코드가 적혀있음 .data: PE가 실행중에 참조하는 데이터가 적혀있음 PE 헤더에 저장되는 섹션에 관한 데이터 섹션의 이름 섹션의 크기 섹션이 로드될 주소의 오프셋 섹션의 속성과 권한 .text 실행 가능한 기계 코드가 위치하는 영역 읽기/실행 권한 부여 (프로그램이 동작하려면 실행할 수 있어야함) 쓰기 권한은 제거함 -> 공격자가 악의적인 코드 삽입 가능 ex) 정수 31337을 반환하는 main 함수가 컴파일 되면 554889e5b8697a00005dc3라는 기계코드로 변환되는데, 이 코드가 세그먼트에 위치하게 됨 int main() { return 3..

study/보안 2023.09.07

정적분석 vs 동적분석

정적 분석 프로그램을 실행시키지 않고 분석하는 방법 [장점] 프로그램의 전체 구조를 파악하기 쉬움 구성된 함수, 함수간의 호출관계, 사용된 API, 포함된 문자열 등을 종합적으로 살펴볼 수 있음 분석 환경의 제약에서도 비교적 자유로움 안드로이드의 apk 파일을 소프트웨어 사용하지 않고도 분석 가능 바이러스와 악성 프로그램의 위협으로부터 안전함 바이러스를 동적 분석한다면 실행한 컴퓨터가 감염될 수 있음 정적 분석은 프로그램을 실행하지 않으므로 감염이 되지 않음 [단점] 난독화(Obfuscation)가 적용되면 분석이 매우 어려워짐 난독화가 적용되면 코드가 변형되어 실행흐름을 파악하기가 어려워짐 해제(Deobfuscation)하기 위한 여러 연구가 진행되고 있지만, 여전히 난독화 서비스들을 모두 무력하하는 ..

study/보안 2023.09.07

Computer Architecture 컴퓨터 구조

컴퓨터 구조와 명령어 집합 구조 컴퓨터 구조 컴퓨터가 효율적으로 작동할 수 있도록 HW 및 SW의 기능을 고안하고, 이들을 구성하는 방법을 말함 컴퓨터의 기능 구조에 대한 설계, 명령어 집합 구조, 마이크로 아키텍처, 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등 포함 ‘컴퓨터의 기능 구조에 대한 설계’ : 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고 설계하는 분야 폰노이만 구조, 하버드 구조, 수정된 하버드 구조 명령어 집합 구조 : CPU의 명령어에 대한 설계 → CPU가 처리해야하는 명령어를 설계하는 분야 ARM, MIPS, AVR, 인텔 X86 및 x86-64 마이크로 아키텍처 : CPU의 하드웨어적 설계 → 정의된 명령어 집합을 효율적으로 처리할 수 있도록, C..

study/보안 2023.09.07