전체 글 76

메이플스토리 썬데이 알리미 2편

2021/01/25 - [Project] - 메이플스토리 썬데이 알리미 1편 메이플스토리 썬데이 알리미 1편 국내에서 가장 유명한 온라인 rpg 게임인 메이플스토리에는 매 주 일요일마다 썬데이메이플 이라는 이름의 이벤트를 한다. 이 이벤트는 최대한 빨리 아는게 무었보다 중요하다. 특정 재화의 가 robinjoon98.tistory.com 이전 편에 이어서 이번엔 썬데이메이플이 뜨면 안드로이드 어플로 알림이 오도록 구현하였다. 안드로이드의 절전로직인 DOZE 모드덕에, 백그라운드에서 직접 주기적으로 메이플스토리 홈페이지에서 직접 크롤링하도록 구현하는 것에는 한계가 있었다. 결론적으로 아예 불가능한 것은 아니지만, 상단바에 항상 아이콘이 노출되도록 해야하는 점, 스마트폰의 배터리를 많이 소모하는 점 때문에,..

Project 2021.01.26

메이플스토리 썬데이 알리미 1편

국내에서 가장 유명한 온라인 rpg 게임인 메이플스토리에는 매 주 일요일마다 썬데이메이플 이라는 이름의 이벤트를 한다. 이 이벤트는 최대한 빨리 아는게 무었보다 중요하다. 특정 재화의 가격이 급등하기 전에 미리 사놔야 하기 때문이다. 그래서, 홈페이지를 크롤링 하여 스마트폰으로 알림이 오게 구현하고자 한다. 보너스로, 현재 진행중인 이벤트목록을 모바일에서 바로 볼 수 있는 기능도 추가하고자 한다. 우선, 메이플스토리 홈페이지의 html을 분석해보았다. 현재 진행중인 이벤트 목록은 이 링크로 확인할 수 있다. 메이플 홈페이지에는 이렇게 이벤트리스트가 있고, 각 이미지를 누르면 해당 이벤트 설명페이지로 이동된다. html을 분석하기 위해 개발자페이지를 이용해보자. 태그 안에 태그가 있고, 그 안의 각각의 태..

Project 2021.01.25

업데이트 배포서버가 해킹된다면? - 2편

아래 글에서 이어지는 내용입니다. 2021/01/05 - [Security] - 업데이트 배포서버가 해킹된다면? - 1편 업데이트 배포서버가 해킹된다면? - 1편 개요 우리는, 여러 프로그램을 자동으로 업데이트되게 설정해놓고 사용하고 있다. 이런 프로그램은 기본적으로, 우리가 컴퓨터를 키면, 업데이트를 확인하며, 업데이트가 있으면 자동으로 서버 robinjoon98.tistory.com 위 글에서, 해커가 개인이 직접 공개키, 비밀키를 만들어 코드사인을 한 경우, 변조 탐지과정을 우회할 수 있었다. 당연히, 이를 막기 위한 장치가 존재한다. 바로, 공인인증서다. 공인인증서 공인 인증서에는 여러가지 정보가 포함되어있는데, 그중에서 가장 중요한 주체, 주체의 공개키, 발급자, 발급자의 서명이다. 주체란, 당..

Security 2021.01.11

업데이트 배포서버가 해킹된다면? - 1편

개요 우리는, 여러 프로그램을 자동으로 업데이트되게 설정해놓고 사용하고 있다. 이런 프로그램은 기본적으로, 우리가 컴퓨터를 키면, 업데이트를 확인하며, 업데이트가 있으면 자동으로 서버로부터 다운받아 업데이트를 설치한다. 이걸 그림으로 나타낸 것이 바로 위의 그림이다. 아주 암울한 상황을 상상해보자. 악의적인 마음을 품은 해커가 프로그램의 업데이트 배포서버를 해킹했다고 가정하자. 해커가 배포서버의 정상적인 파일을 변조된 파일로 바꿔치기 하면, 각 사용자의 PC는 배포서버에 새로운 업데이트가 배포되었다고 판단하고, 이를 다운받아 PC에 설치할 것이다. 이렇게 되면, 수많은 사용자의 PC가 해커의 손에 들어오게 된다. 당연히, 모든 자동업데이트를 지원하는 서비스는 이런 경우를 방지하기 위해, 배포서버로부터 다..

Security 2021.01.05

백준 1874 스택수열 풀이

이 문제는, 1~n까지의 숫자를 스택의 push, pop 연산을 적당히 사용하여 주어진 수열을 만들 수 있는지 확인하고, 만들 수 있으면, push pop 하는 순서를 추력하는 문제이다. push의 경우, 첫 push 는 1이며, 그 이후 2,3,4... 오름차순으로 push된다. 이 문제의 핵심은, 스택에 만들고자하는 수열의 원소가 없으면, push를 연속으로 하고 pop을 해서 무조건 알맞은 숫자를 출력할 수 있고, 스택에 만들고자 하는 수열의 원소가 있으면, 그 원소가 top이여야만 알맞은 수열을 만들 수 있다는 사실이다. package test; import java.util.*; public class Main{ public static void main(String[] args){ Scanne..

Algorithm 2020.09.30

Integer등 랩퍼클래스 사용시 주의사항.

자바 객체들을 == 으로 비교할 경우, 객체의 값을 비교하는게 아닌, 같은 객체인지 비교한다는 것은 책에 아주 잘 나와있다. 이런 이유로 String을 비교할 때, ==이 아닌, .equal() 메소드를 사용하는 것이다. 마찬가지로, Integer 역시 값을 할당할 때 int와 같은 방법으로 할당하는 경우가 대부분이라, Integer를 그냥 ==으로 비교하는 경우가 있는데, 당연히 객체라 == 으로 비교하면 안된다. 단, Integer와 int를 ==으로 비교하면, 값이 같은지를 보게된다. Integer끼리 값을 비교하려면 Integer.intValue() 로 int화 시켜야 한다.

백준 11729 하노이탑 이동 순서 문제 풀이

하노이탑은 결국, n-1개의 블록을 1번 기둥에서 2번 기둥으로 옮기는 것 + n번째 블록을 1번 블록에서 3번 블록으로 옮기는 것 + n-1개의 블록을 2번기둥에서 3번 기둥으로 옮기는 것 으로 정의된다. 총 이동 횟수는 2^n - 1 번 이다. 각 라인을 그때마다 출력한느 것이 아니라, StringBuffer를 이용해 저장한 후 마지막에 한번에 출력해야 시간초과가 안난다. import java.util.*; public class Main{ private static StringBuffer sb = new StringBuffer(); private static void f(int n,int from, int tmp, int to) { if(n==1) { sb.append(from+" "+to+"\n"..

Algorithm 2020.09.27

XSS

1.XSS (Cross Site Scripting) XSS는 Cross Site Scripting의 약자로 웹페이지 어딘가에 악성 자바스크립트를 삽입하여 사용자의 정보를 가로채거나, 사이트의 정상적인 이용을 방해하는 공격이다. 원리는 매우 간단하지만, 한번 성공했을 때의 파급력은 경우에 따라 웹페이지 전체를 장악할 수 있을 정도로 강력하다. 방식에 따라 stored와 reflected로 나뉘어진다. 1. stored xss 위 그림처럼 어떤 사용자가 정상적인 게시물에 라고 댓글을 달았다고 하자. 이 댓글이 달린 이후에 게시물을 조회할 경우 자연스럽게 댓글도 같이 불러와 화면에 출력해줄 것이다. 브라우저가 라는 댓글을 만나면 당연히 이를 자바스크립트 코드로 해석하여 화면에 경고창을 띄워주게 될 것이다. 여..

Security 2020.07.19