일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CodeEngn Basic 01
- BoB 12기 최종합격 후기
- 코드엔진 basic 5
- 리버싱
- 코드엔진 베이직
- CodeEngn
- 자살론
- codeengn basic rce 01
- 코드엔진
- BoB 12기
- 사회적 사실
- Best of the Best
- 디지털 포렌식 트랙
- CodeEngn Basic 5
- 철학
- 에밀 뒤르켐
- h4ckinggame
- 사회분업론
- bob
- malware
- 논문리뷰
- Today
- Total
목록분류 전체보기 (97)
woonadz :)
https://h3llouniverse.blogspot.com/2016/09/event-mfc.html Event 추적을 통한 MFC 리버싱 모든 MFC 파일들은 특정 행동들을 모두 Event로 보고 사용자의 행위에 따라 맞는 Event를 발생시키며 동작한다. 이 점을 통하여 MFC를 이해해고 있다면 리버싱을 통하여 자신이 원하는 부분을 빠르고 h3llouniverse.blogspot.com 위 글에서 Control ID 값으로 MFC 호출 함수를 찾아가는 내용을 확인했습니다. 처음보는 내용이라 신기해서 DreamHack babycmp 예제로 따라해본 내용을 풀이하겠습니다. (처음에 이해 못하고 뻘짓해서 팀에 계신 연구원님께 여쭙고 알게된 내용 바탕으로 적었습니다..ㅋㅋ) 먼저 참고 글에서는 32bit ..
SERIAL을 구하는 문제입니다. DA로 열었을 때, mfc로 GUI를 구현한 프로그램인 것을 확인할 수 있습니다. 이때 사용자 입력값을 찾아가는 방법은 여러가지가 있을 수 있지만 저는 두가지 방법으로 따라가보았습니다. 사용자 입력값과 관련되어 호출되는 문자열을 따라간다. Event ID를 이용하여 사용자 입력값을 검증하는 함수를 따라간다. 2번 방법은 인터넷에서 mfc를 분석할 수 있는 재미있는 방법인 것 같아 해당 예제로 공부해보았습니다. 좀 예전에 풀었던 문제인데 2번 분석을 해보고 싶어 다시 쓰게된 라업이라… 어떻게 풀었는지 잘 기억이 안납니다..ㅎㅎ 주석을 달아두었던 ida 파일도 삭제한 상태여서 처참히 코드만 남았습니다… (라업을 바로바로 작성해야하는 이유) 2번과 관련된 방법은 아래 링크를 ..
동적 프로그래밍(Dynamic Programming)이란? 동적 프로그래밍(Dynamic Programming)은 작은 하위 문제로 나누어 그 결과를 저장해가며, 전체 문제를 해결하는 알고리즘 설계 기법입니다. 이를 통해 중복 계산을 줄여 계산 속도를 높이고 효율적으로 계산할 수 있습니다. DP 기법을 적용시킬 수 있는 조건 1. 중복되는 부분 문제(Overlapping Subproblems) 동일한 작은 문제들이 반복하여 나타나는 경우, 반복적으로 같은 문제를 해결하는 성질입니다. 2. 최적 부분 구조(Optimal Substructure) 부분 문제의 최적 결과 값을 사용해 전체 문제의 최적 결과를 낼 수 있는 성질로, 작은 문제의 최적해를 통해 큰 문제의 최적해를 구할 수 있습니다. DP 문제 풀이..
sub_160A의 반환값이 1이 되는 조건을 찾아야 합니다. sub_1395, sub_11D6, sub_14B6 함수의 반환값이 모두 1이 되는 조건을 찾아야 합니다. 사용자 입력값의 길이가 43 입니다. 위 로직을 통해 input 값의 형태가 DH{00000000-0000000000-0000000000-00000000} 이라는 것을 알 수 있습니다. calculate_string 함수를 통해 input 값에 대한 연산을 진행하고 반환값을 v4, v3, v2, v1 변수에 할당합니다. 각 문자에 대해 ASCII를 16진수로 변환해주는 연산을 수행하고 그 값을 v5 변수에 더하여 반환합니다. 위 함수들의 연산을 통해 calculate_string 함수의 반환값인 v1, v2, v3, v4의 값을 방정식으로..
PEB 구조체 내의 NtGlobalFlag 위치 32비트 : 0x68 offset 64비트 : 0xBC offset NtGlobalFlag 값 Default 값 : 0 디버거에 의해 프로세스가 생성된 경우 FLG_HEAP_ENABLE_TAIL_CHECK (0x10) FLG_HEAP_ENABLE_FREE_CHECK (0x20) FLG_HEAP_VALIDATE_PARAMETERS (0x40) LockBit 2.0에서의 NtGlobalFlag 사용법 NtGlobalFlag 값과 0x70 값을 and 연산하여 현재 프로세스가 디버깅 중인지 확인 => 디버깅 중이라면 무한루프 생성 DLL을 동적으로 로드하기 이전에 안티 디버깅 기술로 분석 방해
덤프된 환경이 아닌 실시간 환경이므로 비휘발성 데이터 수집을 통해 풀이 “로그인 할 때 마다 네트워크 데이터에 민감한 로그인 정보가 유출” ⇒ 로그온 관련 아티팩트 수집 crontab, /var/run, /etc/service, /etc/init.d 등의 스케줄링 관련 아티팩트 X 로그인 시에 발생하는 네트워크 패킷 분석 tcpdump를 뜨면 특정 경로로 불필요한 패킷이 너무 많이 보였습니다. 침해 PC 경로에서 시작하고, 175.117.153.116으로 도착하지 않도록 필터링을 걸어 확인해주었습니다. 다른 터미널에서 로그인을 했을 때 발생하는 패킷을 보면, 123.45.67.89의 경로로 사용자의 로그인 비밀번호가 전송되는 것을 확인할 수 있습니다. 처음에는 root 내의 모든 폴더를 대상으로 키워드 ..
#include int card[500000]; int main (){ int num; scanf_s("%d", &num); for (int i = 0; i < num; i++) { card[i] = i + 1; } int result = num; int front = 0; int back = num-1; while (1) { front = (front + 1) % num; if (front == back) { break; } back = (back + 1) % num; card[back] = card[front]; front = (front + 1) % num; if (front == back) { break; } } printf("%d", card[front]); return 0; }