본문 바로가기

전체 글

(73)
ARP Spoofing(recover 시점 파악, packet relay) 1. sender에서 infect가 풀리는(recover가 되는) 시점을 정확히 파악하여 재감염 시키기 첫번째 경우sender에서 arp request를 보내는 경우 -> target이 arp reply를 보내면 감염 풀림=> arp request는 broadcast니까 attacker에게도 오기 때문에 탐지 가능=> 다시 공격하면 됨 두번째 경우target이 arp request를 보내는 경우 -> sender가 arp reply를 보내면 감염 풀림=> arp request는 broadcast니까 attacker에게도 오기 때문에 탐지 가능=> 다시 공격하면 됨 세번째 경우 (arp poll)요즘은 캐시 만료 몇 초 전에 arp table에 있는 주소로 unicast  확인 arp request를 보냄..
ARP table infection ARP(Address Resolution Protocol) 프로토콜은 네트워크 상 IP주소를 MAC주소로 대응시키기 위해 사용하는 프로토콜이다.이를테면, IP 호스트 A가 IP 호스트 B에게 IP 패킷을 전송하려고 할 때 IP 호스트 B의 물리적 네트워크 주소를 모른다면, ARP 프로토콜을 사용하여 목적지 IP 주소 B와 브로드캐스팅 물리적 네트워크 주소 FFFFFFFFFFFF를 가지는 ARP 패킷을 네트워크 상에 전송한다. IP 호스트 B는 자신의 IP 주소가 목적지에 있는 ARP 패킷을 수신하면 자신의 물리적 네트워크 주소를 A에게 응답한다. 이와 같은 방식으로 수집된 IP 주소와 이에 해당하는 물리적 네트워크 주소 정보는 각 IP 호스트의 ARP 캐시라 불리는 메모리에 테이블 형태로 저장된 다음, ..
[SQL] 프로그래머스/재구매가 일어난 상품과 회원 리스트 구하기 Q. ONLINE_SALE 테이블에서 동일한 회원이 동일한 상품을 재구매한 데이터를 구하여, 재구매한 회원 ID와 재구매한 상품 ID를 출력하는 SQL문을 작성해주세요. 결과는 회원 ID를 기준으로 오름차순 정렬해주시고 회원 ID가 같다면 상품 ID를 기준으로 내림차순 정렬해주세요. SELECT USER_ID, PRODUCT_IDFROM ONLINE_SALEGROUP BY USER_ID, PRODUCT_IDHAVING COUNT(PRODUCT_ID)>=2ORDER BY USER_ID, PRODUCT_ID DESC 조건문 having과 wherehaving은 group by와 함께 사용, 그룹화해서 조건 적용하고 싶을 때where은 전체 컬럼에 대해 적용GROUP BY USER_ID, PRODUCT_ID ..
[SQL] 프로그래머스/서울에 위치한 식당 목록 Q. REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요. SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE),2) AS SCOREFROM REST_INFO AS IJOIN REST_REVIEW AS RON I.REST_ID = R.REST_IDWHERE I.A..
[드림핵/암호학] Double DES #!/usr/bin/env python3from Crypto.Cipher import DESimport signalimport osif __name__ == "__main__": signal.alarm(15) #15초 제한 시간 with open("flag", "rb") as f: flag = f.read() key = b'Dream_' + os.urandom(4) + b'Hacker' key1 = key[:8] #key의 앞 8바이트, 뒤 2바이트는 모름 key2 = key[8:] #key의 뒤 8바이트, 앞 2바이트는 모름 print("4-byte Brute-forcing is easy. But can you do it in 15 seconds?")..
[softeer/c++] [21년 재직자 대회 본선] 코딩 테스트 세트 di는 ci로 갈 수도, ci+1 로 갈 수도 있음ci, di 범위 주의 -> double이나 long long으로 선언1부터 늘려가면서 가능한 세트 수를 확인해본다면 O(N*T*2*10^12) 이라서 불가능출력값을 0부터 10^12까지 이진탐색해서 최댓값 구하기 -> 2*10^12가 logN으로 줄어듦ci가 이미 num보다 크다면 di는 ci+1에 줌ci가 num보다 작으면 ci+di가 num보다 큰지 확인, 크다면 ci+1는 di에서 ci에 주고 남은 거 줌크지 않으면 false
[논문리뷰] VMHunt: A Verifiable Approach to Partially-Virtualized Binary Code Simplification 가상화 난독화프로그램의 선택된 부분을 새로운 사용자 정의 ISA에서 바이트코드로 변환실행 시 바이트코드가 실제 머신에서 임베디드 가상머신 또는 인터프리터에 의해 에뮬레이트됨데이터 인코딩, 메타모르피즘, 제어 흐름 난독화 같은 다른 난독화 기법과 통합되어 전통적인 정적, 동적 분석 기술 적용 어려움하지만 성능과 호환성이 떨어져 코드의 주요 부분만 가상화 기존의 가상화 deobfuscation1.가상 프로그램 카운터의 현재 값에 따라 바이트코드 조각을 가져오고(디코드), 그 다음 해당 바이트코드를 에뮬레이트하는 머신 코드를 포함하는 핸들러로 디스패치하는 중앙 루프2.실행 명령어에서 가상화 난독화 계층 제거  => 두 연구 모두 가상화된 코드의 범위를 알고 있다는 가정=> 오버헤드를 줄이기 위해 난독화된 프로..
LCS(Longest Common Substring) 알고리즘 두 문자열에서 최장 공통 부분문자열(연속) 찾기 DP(Dynamic Programming) 이용int dp[n][m];int a[n];int b[m];if(i==0 && j==0) dp[i][j] = 0;else if(a[i] == b[j]) dp[i][j] = dp[i-1][j-1]+1;else dp[i][j] = 0; dp배열의 최댓값 => 최장 공통 부분문자열 길이