백준 2805백준 2805, 이분 탐색(Binary Search)문제상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기을 이용해서 나무를 구할것이다.목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높..
do not concatenate text displayed with setText 1textView.setText("내용 " + content);cs 이와 같이 하드코딩된 문자열을 넣으면 해당 경고가 발생한다. 경고 내용은 다음과 같다. When calling TextView#setText:Never call Number#toString() to format numbers; it will not handle fraction separators and locale-specific digits properly. Consider using String#format with proper format specifications (%d or %f) instead.Do not pass a string literal..
Type Safety : unchecked 말 그대로 type 의 안정성을 보장할 수 없을 때 이 경고가 발생한다. 내 경우에는 intent 로 1ArrayListcs 이와 같은 데이터를 넘겨주어 전달받은 Activity 에서 1ArrayList persons = (ArrayList) getIntent().getSerializableExtra("persons");cs 다음과 같이 type cast 를 했을 때 해당 경고가 발생했다. Person 은 Serializable 을 implements 한 class 이다. 일반적으로 Java 컴파일러는 실행되는 모든 시점에서 각 변수의 유형을 알고있다. 호환되지 않는 유형으로 작동하면 프로그램이 컴파일되지 않기에 해당 경고를 보여준다. 만약 지정한 형식의 개체만..
문제 백준 11047, 탐욕적 기법 ( Greedy Algorithm ) 문제준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.입력첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)출력첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 접근&풀이 A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수 이것이 조건으로 주어지기 때문에 가장..
코드 난독화 프로그램 코드의 일부 또는 전체를 변경하는 방법 중 하나로, 코드의 가독성을 낮춰 *역공학에 대한 대비책을 제공한다. * 역공학 대부분의 개발자들은 컴파일된 바이너리를 완전한 블랙박스로 취급한다. 보안 취약점 분석가들의 주요 업무는 이런 바이너리 코드를 읽고 보안 취약점을 찾아내는 것이다. 보통 컴파일된 바이너리를 다시 원래의 소스코드로 복구하는 프로그램인 디컴파일러 ( decompiler ) 의 도움을 받는다. 디컴파일러는 원래 소스 코드를 완벽히 복구하지는 못하지만, 어셈블리에 비해서는 훨씬 이해하기 쉬운 프로그래밍 언어의 소스 코드를 생성해준다. 이처럼 바이너리 코드를 분석해 유용한 정보를 뽑아내는 작업을 역공학 ( reverse engineering ) 이라 부른다. 최근 보안 취약점..
PKI ( Public Key Infrastructure ) PKI 는 기본적으로 인터넷과 같이 안전이 보장되지 않은 공중망 사용자들이 신뢰할 수 있는 기관에서 부여된 한 쌍의 공개키와 개인키를 사용함으로써 안전하고 은밀하게 데이터나 자금을 교환할 수 있게 해준다. 공개한 의미는 수신자만 열쇠를 갖고 있는 자물쇠를 여러 사람에게 나눠주었다는 것을 의미한다. 즉, 자신에게 귀중품을 보낼 때 금고에 먼저 그것을 담고, 금고열쇠는 다시 자신만이 열 수 있는 자물쇠로 봉합해 보내라는 것이다. 데이터를 암호화하는 방법에는 공개키과 비밀키 방식이 있다. 비밀키 암호 시스템이 송수신자 양측에서 똑같은 비밀키를 공유하는데 반해 공개키는 암호화와 복호화가 다르기 때문에 데이터를 암호화하고 이를 다시 풀 수 있는 열쇠가 ..
BLE Security BLE 는 오늘날 가장 보편적인 무선 표준 중 하나가 되고 있다. 따라서 BLE 제품에 통합하려는 설계자는 이 기술의 보안 기능과 한계를 인식해야 한다. 여기서는 BLE GAP Central 및 GAP Peripheral 역할에 중점을 둔다. [ 참고 : http://dwenn.tistory.com/75?category=634155 ] * GAP 은BLE 시스템의 네트워크 토폴로지를 결정하는 BLE 스택의 계층이다. GAP Central 은 일반적으로 GAP Peripheral 과의 연결을 시작하는 장치이다. 두 장치가 연결되면 암호화된 연결을 설정하는데 필요한 정보를 교환하는 '페어링' 프로세스를 수행한다. 장치는 서로 재접속 할 때마다 페어링 프로세스가 반복될 필요가 없도록 장..
Sniffing ( 스니핑 ) 사전적인 의미로 스니핑 ( Sniffing ) 이란 '코를 킁킁거리다', '냄새를 맡다' 등의 뜻이 있다. 사전적인 의미와 같이 해킹 기법으로서 스니핑은 네트워크 상에서 자신이 아닌 다른 상대방들이 패킷교환을 엿듣는 것을 의미한다. 간단히 말하여 네트워크 트래픽을 도청하는 과정을 스니핑이라고 할 수 있다. 스니핑 공격은 공격 대상에게 직접적으로 공격을 하지 않고 데이터만 몰래 들여다 보는 수동적 공격기법이다. 간단히 스니핑 공격의 원리를 설명하면, 네트워크에서 송수신되는 많은 데이터 중 본인에게 맞는 데이터만 보기 위해서 데이터 링크와 네트워크 레이어에서 필터링을 하고 있다. MAC 주소와 IP 주소를 확인해서 내 호스트와 맞지 않는 정보는 위 레이어까지 전달하지 않고 아래..
MITM ( Man In The Middle, 중간자 공격 )MITM ?MITM 방어References MITM ?네트워크 통신을 조작하여 통신 내용을 도청하거나 조작하는 공격 기법이다.중간자 공격은 통신을 연결하는 두 사람 사이에 중간자가 침입하여, 두 사람은 상대방에게 연결했다고 생각하지만 실제로는 두 사람은 중간자에게 연결되어 있으며 중간자가 한 쪽에서 전달된 정보를 도청 및 조작한 후 다른 쪽으로 전달한다.많은 암호 프로토콜은 중간자 공격을 막기 위하여 인증을 사용한다.( TLS / SSL 프로토콜은 공개 키를 기반으로 한 인증을 사용 )MITM 예시 ) 갑이 을과 통신하려는 상황에서, 병은 그 사이에 끼어들어 을에게 잘못된 메시지를 전달한다.먼저, 갑이 을에게 공개키를 요청한다.을이 갑에게 을의..