분류 전체보기 (64) 썸네일형 리스트형 2024.9.9 리버싱 공부(나뭇잎 책) SEH(Structtured Exception Handler)Windows 운영체제에서 제공하는 예외 처리 시스템 소스코드에서 __try, __except 키워드로 쉽게 구현이 된다.(32bit에선 들어감 64bit에는 안들어가던데) SEH가 리버싱에서 어떻게 작동하는지, 어떻게 안티디버깅에 쓰이는지. SEH는 예외(BP, ACCESS VIOLATION, ZERO DIVISION 등)가 일어날때 처리하는 메커니즘인데, 디버깅에 있어서 예외가 발생하면 SEH로 가는게 아니라 일단 디버거에게 예외를 넘겨준 후 디버거가 DBG_CONTINUE를 인자로 ContinueDebugEvent 함수를 호출하면 예외를 처리한 것으로 처리되고 디버기에게 제어가 넘어온다. 이러면 예외는 처리되지않았기때문에 정상적인 코드.. 디버거에 대해 디버거가 작동하는 순서(?) 디버기(디버깅 당하는 프로세스)에 디버거(디버그 하는 프로세스)가 붙거나 디버기를 생성해서 디버깅 한다. 디버거는 디버기의 메모리, 레지스터를 read,write할 수 있는데, 디버기가 실행되다가 제어가 디버거로 넘어오면 그떄 위와같은 다양한 조작을 할 수 있다. 구체적으로 windows에서는 DebugActiveProcess함수로 실행중인 프로세스에 디버거가 붙는다. DebugActiveProcessStop함수로 디버깅을 끝낸다.(디버거를 뗀다) WaitForDebugEvent 디버기에 특정 이벤트가 발생하면 제어를 디버기에서 디버거로 준다(중요) ContinueDebugEvent 디버거로 제어가 넘어왔으면 예외를 처리하고, 조작을 마치고 이 함수로 디버기에게 제어를 다시.. Linux signal Windows SEH를 공부하다가 Linux에도 이런 Exception handler가 있는지 궁금했다. 보통 나는 서버를 Windows가 아닌 Linux에 올리기때문에 Exception이 일어나면 Register,memory(heap stack)를 저장해두고 분석하고싶어서 Linux에는 SEH는 없고 signal로 예외를 처리한다. signal은 linux 운영체제 수준에서 발생하는 비동기적 이벤트 메커니즘인데, 잘못된 메모리 접근이나 다른 인터럽트들이 signal로 프로세스에 전달이 된다. 이를 처리하기 위해서는 signal handler를 등록하면 된다. 아무 처리하지 않으면 os기본 exception 처리 루틴을 따라 종료되거나 멈추거나 등등 한다. 아래부턴 팩트 일수도있고 아닐수도있는 나의 이.. 2024.9.5 리버싱 공부(나뭇잎 책) TEB(Thread Environment Block) - Thread에 대한 정보를 담고 있는 구조체. Thread별로 하나의 TEB구조체가 할당됨. NtTib, PEB포인터 등 다양한 정보가 있음. NtTib - SEH(예외 처리 메커니즘, Structured Exception Handler) , self 등의 멤버가 있음. TEB접근 방법 - 32비트에선 FS:[0x18], 64비트에선 GS:[0x30] 32bit에서 FS 세그먼트 레지스터는 현재 스레드의 TEB를 지시하는데 사용됨.FS 레지스터는 16비트인데 커널 메모리에 존재하는 Segment Descriptor Table의 index를 가지고 있고 그 index에 주소가 적혀있는데 그걸 가져옴. FS:[0x18] = TEB.NtTib.Self .. 2024.9.4 리버싱 공부(나뭇잎 책) TLS(Thread Local Storage) 콜백 함수EP 코드보다 먼저 실행되는 코드 PE헤더의 Data_Directory[9]에 TLS_DIRECTORY가 있음. 구조체에 Address of Callbacks이 TLS callback임. (linux에도 이런게 있나 검색해봤는데 Thread마다 local 전역변수는 있는데 callback은 없음. windows의 특성) TLS는 스레드별로 독립된 데이터 저장 공간임.스레드 내에서 프로세스의 global, static data를 마치 local데이터 처럼 취급할때 쓰임. TLS callback은 프로세스의 스레드가 생성/종료될 때마다 호출되는 함수. (메인 스레드가 생성/종료될 때도 호출됨. EP코드 보다 더 먼저) 보통 debugging을 EP코드부.. 2024.9.3 리버싱 공부(나뭇잎 책) 64bit 디버깅 64bit os에선 32bit프로그램과 64bit프로그램이 돌아가서 둘 다 디버깅이 가능함. 32bit os에선 32bit프로그램만 돌아가서 64bit프로그램은 디버깅 불가. 64bit windows에서는 PE32는 WOW64모드로 실행. ASLR(Address Space Layout Randomization) windows kernel 6부터 사용 가능한 기능. PE 파일이 메모리에 로딩될 때 로딩 시작 주소 값을 랜덤하게 바꾸는 것.또한 해당 프로세스의 스택, 힙의 시작 주소도 실행될 때마다 랜덤으로 바뀜. 보안 취약점을 노리는 코드에는 메모리 주소가 하드코딩 되어있는데( DLL이 언제나 정해진 주소에 올라오기때문) 이러한 취약점을 노리는 코드 작성을 어렵게하기 위해 ASLR 기술.. flutter에서 debug/release에서 네트워크가 다를경우 debug.apk에서는 네트워크에 정상적으로 접근하는데 release.apk를 설치해서 테스트하는 경우 네트워크에 접근을 못하는 경우가 있었다. 이런경우 앱의 권한 설정을 해줘야하는데 flutter의 android/app/src/main/androidManifest.xml파일에 http://schemas.android.com/apk/res/android" package="com.example.yourapp"> android:label="your_app_name" android:icon="@mipmap/ic_launcher"> .. Flutter 시작 0.flutter 다운받기 압축 풀기 1.환경변수 설정 환경변수 추가 환경변수 추가 됨. 1. 안드로이드 준비물 준비 android studio 다운받기 설치 준비물 다운로드 완료 이제 flutter 개발 시작 hello world 이전 1 2 3 4 5 6 ··· 8 다음