목록분류 전체보기 (63)
Front-end_dev
* 노드옆에 문서같이 생긴것을 각 노드가 가지고있는 체인이라고가정한다. 그림은 5번노드가 블록체인 네트워크에 이제 막 합류한 그림이다. 이때 5번은 3,4노드와 P2P로 통신할수있다. 그래서 5번노드는 블록동기화를 위해서 3,4번 노드에게 쿼리를 던진다 "마지막 블록이뭐야?" 3번노드에게서 먼저 답장이왔다고가정하고, 3번노드가 알려줬지만 이미 3번노드는 이제막 합류한 5번노드(제네시스블록만가지고있는상태)와 체인길이가 상당히 차이난다. 그래서 아에 체인을 바꿔야하는 상황이다.5번노드는 체인을 3번노드가가지고있는 체인으로 바꿨다.그리고 4번노드에게서 답장이왔는데 4번노드도 3번이랑 길이가같기때문에 특별히 취할 조치는없다.그럼 여기서끝이난다. 엥??? 위 그림의 블록체인네트워크상에서 가장긴 체인을 갖고있는건 ..
Login brute forcing (로그인 브루트포싱) 알고리즘 1. 비밀번호 생성 알고리즘. 경우의 수는 총 7가지이다. 숫자10개로만구성 영어소문자(26개)로만 구성 영어대문자(26개)로만 구성 숫자10개 + 소문자26개 = 36개 숫자10개 + 대문자26개 = 36개 소문자26개 + 대문자26개 = 52개 숫자10개 + 소문자26개 + 대문자26개 = 62개 2. 브루트포싱 알고리즘 찾으려고하는 패스워드의 길이만큼 루프를 돌린다 예를들어, 패스워드가 1234라면 숫자로만 구성되어있으므로 for-loop가 4번 중첩되며 각 루프는 10번씩 반복하게된다. 따라서 10^4만큼 돌게된다. 1번에서 못찾으면 2번의 경우의수로 다시 돌려보고, 2번에서도못찾으면 3번에서 찾게된다. 그리고 7번까지 가게됬을떄는..
keylogger 알고리즘 1. 운영체제에서 지원하는 키보드(device)감지 함수호출 2. 입력하는 키마다 공격자 서버로 전송 3. 공격자는 피해자로부터 전송받는 키를 한글로 치환해야함3-1. 초성,중성,종성 조합으로 한글로치환 필요한 기술로는 소켓프로그래밍, 시스템프로그래밍, 초성중성종성 조합 알고리즘 3가지정도이다. 해킹툴 기초로 만들어볼만한 가장 쉬운툴이 아닌가싶다. * 위 3단계에서 가장어려운건 초성중성종성 조합알고리즘임.
PART1 : 랜섬웨어 알고리즘 1. 루트디렉터리에서 출발해(DFS) 모든디렉터리내의 파일(특정확장자)을 암호화시킴 2. 랜섬웨어 프로그램을 실행시키면 암호화할 키(private key)를 random하게 생성함 3. 생성된 private key와 피해자의 ip address를 공격자 서버로 전송. 4. 공격자의 데이터베이스에 피해자의 private key, ip address, 감염된날짜, 컴퓨터시스템이름 총4개를 저장 (primary key는 컴퓨터시스템이름) 5. 피해자가 공격자의 요구조건을 만족시켰을 시 피해자의 컴퓨터 이름을 기반으로 private key를 데이터베이스에서 조회후 피해자에게 알려줌 6. 피해자는 private key를 가지고서 decoder 프로그램을 통해 파일 복호화 PART2..
native javascript로 작성된 module(ex. NPM을통해 다운로드받은)들은 크게상관이없는데, Node.js addon 기술을 통해 C++기반의 코드로작성된 module을 node.js module로 binding했을떄 그 module을 못찾는 문제가 있음. 브라우저는 기본적으로 보안이슈떄문에 운영체제가 제공하는 함수들을 쓰지못함(즉 system call 불가능) 그래서 addon을통해 C++에서 system call할수있게 하는 module을 만들어 javascript로 binding하는경우가 많음. 해결법은 크게 3가지가있는듯함 1. module.paths에 module path를 추가해줌. (그냥 밑의코드 복붙하면됨 mainWindow만 본인 앱의 window변수로바꾸고) mainWi..
const log = console.log; const isIterable = a => !!(a && a[Symbol.iterator]); function *flatten(iter) { for(const a of iter) { // if(!isIterable(a)) for(const b of a) yield b; if(!isIterable(a)) yield* b; else yield a; }} function *map(f, iter) { for(const a of iter) yield f(a);} const flatMap = (f, iter) => flatten(map(f,iter)); log([...flatten([[1,2], [3,4]])]);// [1,2,3,4]log([...flatMap(a =>..
Javascript V8 Engine은 C++기반으로 만들어져있다.javasript에서 object의 property를 런타임시에 동적으로 마음대로 바꿀수잇다. 그럼 C++도 가능하다는뜻인데..함수포인터로간단하게 구현할수있다.아마 V8 Engine은 javascript object들을 map형태 혹은 다른 자료구조(테이블형식)로 관리하지않나 싶다. Javascript const str1 = 'this';const str2 = 'isfunction'; class C { m1() { console.log('foo'); } [str1]() { console.log('bar'); } [str1 + str2]() { console.log('baz'); }} C++ #include #include #include ..
Streaming multiprocessor당 32개의 core와 Control unit은 1개가 존재한다. 이말은 32개 core를 전부 실행하냐 전부실행하지않느냐로 볼 수 있다.Control unit이 1개밖에 존재하지않기떄문에 특정 core의 ALU에만 신호를 보낼 수 가 없기떄문. 즉, if-else로 분기가 되어있다하더라도 모든쓰레드가 다 if-else 두개의 분기를 전부 실행하게된다.하지만 실제 코드를 작성하고 실행해보면 결과가 우리가생각하고 코딩했던것과 일치하게되는데, 조건에맞지않은 쓰레드가 그 scope영역내의 코드를 실행했을떄 ALU까지는 수행되지만 write-back이 되지않기때문에(저장을 하지않기떄문에) 문제가 되지않던것이였다. 결국 clock cycle이 낭비되고있다는말. 그래서 c..
GenTwoDimArr() 함수는 초기에 입력받은 파라미터로 2차원 배열을 생성하고 각 row가 초기에 입력받은 col값을 넘어섰을때 에러를 강제시킴. const GenTwoDimArr = (row,col) => { let arr = []; for(let i=0; i col) // if length of array is overflowed, it will be force to generate error return false; else { target[property] = value; return true; } } }); } for(let i=0; i
Conceptual -> Logical -> Physical3단계로 모델링을하는데 Conceptual에서 개체정의 및 관계정의를하고 Logical에서 attribute 및 constraint정의를하고 Physical에서 물리적인 컴퓨터저장소에 어떻게 저장시킬지 정의함. 간단하게 병원을 모델링해봄. 데이터를 삽입할때는 참조무결성제약을 조심해야함.FK가 가리키는 인스턴스가 아직 생성이안됬거나 잘못가리키고있을경우에 참조무결성에러가발생.