전체 글 28

Java JSONObject에서 키 값이 없는 경우 파싱하기

Github API를 사용해서 한달간의 commit 수를 나타내는 json 값을 파싱해와야 하는 일이 있었다. 그런데 key값이 없어서 값을 다루는 데 삽질하다가 JSONArray로 접근해서 해결한 내용을 포스팅하려 한다. 아래는 내가 가져올 JSON 값이었다. key값이 하나도 지정돼있지 않고, value의 배열이 나열되어 있었다. 각 배열의 3번째값이 그 날의 Commit 수를 나타내고 있었기에, 나는 각 배열의 3번째 값들 (3, 10, 8)만 get해와서 더해주고자 했다. [ [ 0, 0, 3 ], [ 0, 1, 10 ], [ 0, 2, 8 ] ] 그런데 key값이 없어서 값을 get 해올 수가 없었다. //참고 --- 일반적인 JSON 형식 (key값 존재) { "age":22, "name":"..

Tech 2021.07.18

SW 개발보안 경진대회(소개딩) 2020 참가 후기

작년 여름에 소프트웨어 개발보안 경진대회(소개딩)에 참여해서 최우수상을 수상했다. 첫 해커톤이고 경험도 없던 때라 지원 때부터 기대도 안 하고 나가본 대회였는데, 우당탕탕 결과물도 올려보고 생각지도 못한 상까지 받아 서 정말 뜻깊은 경험이었다. 지원할 때 '보안 약점이 제거된 소프트웨어를 만드는 대회'라는 것 외에 아무런 정보가 없어서 시작하기 어려웠었는데 어떻게 준비하고 수상했는지 참가기를 기록해보려고 한다. 1. 예선 지원서 작성 사이버보안전공이지만 막 2학년 1학기를 마쳤던 우리 팀은 아무도 웹/서버 개발을 해본 적도 없던 상태였다. 전공 수업에서 보안개론을 배우긴 했지만 서비스 개발이나 보안에 대해서 아는 게 많이 없었어서 지원서를 쓰는 동시에 공부를 많이 했다. 참가할 때부터 수상이 아니라 본선..

일상 2021.04.25

[Forensics] DFC 2019 AF100 풀이

1. 문제 2. 번역 당신은 산업 기밀 누설 사건의 심사관입니다. 검사를 하는 동안 의심스러운 보관 파일을 발견했습니다. 이 ZIP 파일은 다른 용의자에게 보낸 전자 메일에 첨부되었으며 다른 기밀 파일이 배포된 당시 작성되었습니다. 따라서 아직 맥락에서 확인되지 않은 정보가 포함되어 있다고 추정됩니다. 주어진 ZIP 파일에서 이 사건과 관련된 단서를 찾으십시오. Teams must : - 결론을 이끌어 내기 위해 사용된 도구를 모두 지정하십시오. - zip 파일의 구조, 찾은 내용 및 단계별 처리 방법 (압축된 비밀 JPEG 파일의 해시 값 포함)을 설명하십시오. 3. 나의 풀이 0) 문제 파일 준비, 010 editor 도구 설치 다운로드 링크: www.sweetscape.com/download/010..

Security 2021.04.19

NP-hard 란? Linear Classification의 NP-hard 문제

머신러닝 이론 공부 중, Linear Classification의 문제점으로 NP-hard 문제가 나왔는데 뭔지 짚고 넘어가고자 포스팅한다. 사전 지식 결정성(deterministic) 알고리즘 VS 비결정성 알고리즘 1) 결정성 알고리즘 : input에 따라 결과가 정해져있는 알고리즘. 즉, A -> B로 결정되어 있는 알고리즘이다. 2) 비결정성 알고리즘 : 답이 유일하게 결정되지 않는 알고리즘이다. A -> B,C,D 인지 정해지지 않음. NP의 반대 개념, P (polynomial) NP전에 우선 P를 알아야 한다. P는 결정론적 (deterministic) 알고리즘을 사용해서 다항 시간 내에 답을 구할 수 있는 문제의 집합이다. 즉, P는 yes/no 로 답할 수 있는 문제이다. ​​ # NP ..

Tech 2021.04.19

SQL DATE 타입 insert 하기

방법 1. 일/월/년 순으로 입력 > INSERT INTO {테이블명} values ('김윤서', '05/03/2000') 방법 2. 년-월-일 순으로 입력 > INSERT INTO {테이블명} values ('김윤서', '2000-05-03') 명시되지 않은 시간 분/초는 default값이 12:00:00으로 입력됨. 원하는 포맷으로 저장하고 싶을 경우 방법 3. > ALTER session set NLS_DATE_FORMAT = 'DD/MM/RR HH:MI:SS'; DATE 의 format (NLS_DATE_FORMAT)을 변경시킨 후 > INSERT INTO {테이블명} values ('김윤서', '2000/03/05 12:10:17'); 입력. 방법 4. > INSERT INTO {테이블명} va..

Tech 2021.04.16

Nodejs TypeError: Cannot read property undefined 해결 방법

오류 상황 template.js 파일에서 html 코드를 return 하는 함수 templateHTML()를 exports 하고, main.js 파일에서 require(./template.js)를 통해 받아서 templateHTML() 함수를 사용하려고 하는데 아래와 같은 에러가 발생했다. TypeError: Cannot read property 'templateHTML' of undefined 아래 방법들을 통해 해결했다. 방법 1. module.exports = HTML 를 소스 코드 가장 아래로 내리기 HTML 정의 후에 export 하도록 해주는 것이다. 방법 2. main.js 에서 불러오는 코드를 아래처럼 변경한다. var HTML = require('./template.js'); // 새로운..

Tech 2021.04.07

Nodejs `JavaScript heap out of memory` 오류 시 해결방법

nodejs 웹페이지를 구현할 때 콘솔창에 node main.js 를, (main.js는 내가 만든 js파일 이름) 검색엔진에 localhost:3000 을 입력해서 페이지로 이동한다 (3000 은 내가 지정한 포트번호) ​ 그런데 아래와 같이 콘솔창에 에러 메시지가 뜨면서 웹이 안뜬다면 JavaScript heap out of memory 오류가 발생한 것이다. 이 오류는 과도한 메모리 점유로 인하여 js 엔진이 폭발한 것인데, 이럴 때는 더 큰 메모리를 할당해주면 된다. 1. JavaScript heap out of memory Nodejs의 기본 메모리 사이즈를 512MB 초과하면 자동으로 앱이 종료된다. 기본 메모리 사이즈를 늘리는 방법에 대해서 알아보자. 커맨드라인 환경에서는 node --max..

Tech 2021.04.07

[Forensics] SHA-1 충돌 현상과 해시함수 개념 정리

암호화한 해시함수의 조건 A ≠ B 이면 h(A) ≠ h(B) 즉, 동일한 파일이라면 해시가 모두 같아야 하고, 다른 파일이라면 해시가 모두 달라야 한다. '충돌'이란? A ≠ B 인데 h(A) = h(B) 인 사례가 발견되는 경우를 말한다. 안전하다고 여겨지던 SHA-1 함수의 충돌 현상을 2017년에 구글에서 찾아냈고 , 이를 SHAttered 에 공개, 그리고 크롬과 여러 사이트에서 SHA-1의 지원을 중단하였다. 이와 관련하여, DFC 2020 (Digital Forensics Challenge) 에서는 SHA-1이 안전하지 않음을 깨닫게 하기 위한 문제로서 101번 "Same or Different?" 문제를 출제하였다. 해당 문제에 대한 풀이는 여기에서 볼 수 있다. SHA-1 충돌 사례 위에..

Security 2021.04.05

[Forensics] DFC 2020 101번 문제 풀이

# 문제 # 문제 해석 (checker.pyc 파일에 담긴 내용) : SHA1로 해싱했을 때는 같은 값이, SHA2로 해싱했을 땐 다른 값이 나오는 두 값을 찾아, 이 두 파일의 각 SHA3-256 값을 구해 XOR 연산하여라. # 풀이 방법 1. checker.pyc 파일을 다운받아, 리버싱하여 .py 형태의 소스코드로 만든다. *이 때 내가 받은 파일이 올바른지 확인하기 위해 CyberChef 사이트에서 SHA256으로 해싱하여 문제에 명시된 값과 같은지 비교해보았다 * .pyc 파일을 리버싱할 때는 Uncompyle2 라는 도구를 사용했다. 2. 리버싱하여 얻은 소스코드를 해석해보면, SHA-1 해시는 같으면서 SHA-2 등의 다른 해시 값은 다른 파일을 찾으라는 내용임을 알 수 있다. 이 값은 S..

Security 2021.04.05

10가지 악성코드 특징 (바이러스, 트로이목마, 백도어, 웜, 스파이/애드웨어, Hoax, 랜섬웨어, 루트킷, Exploit)

악성코드는 의도적으로 컴퓨터 사용자에게 피해를 주고자 만든 악의적인 프로그램을 총칭한다. 1. 컴퓨터 바이러스 : 생물학적 바이러스와 같이 컴퓨터(숙주) 내에 기생하여 활동하는 악성코드이다. 컴퓨터 바이러스는 활동 중에 자기와 동일한 것들을 복제하여 증식하고, 복제된 것들을 다른 곳에 퍼뜨리며 전염성이 강한 것이 특징이다. 컴퓨터 바이러스에 감염되면 이미 감염된 파일을 되돌리기는 어렵고, 파일을 삭제하고 원본 파일로 교체하는 작업을 통해서 원상복귀가 가능하다. 2. 트로이 목마 트로이목마는 겉보기에 유용한 프로그램으로 가장해있기 때문에, 사용자가 직접 설치하는 경우가 많다. 하지만 컴퓨터에 설치되고 나면 자료 삭제/정보 탈취 등의 악성코드를 실행한다. 주로 감염된 컴퓨터의 정보를 외부로 유출하는 것이 특..

Security 2021.03.22