-
저세상 개발
테크스펙 작성을 위한 효과적인 가이드라인 (A practical guide to writing technical specs)
스택오버플로우 블로그 글에 올라온 https://stackoverflow.blog/2020/04/06/a-practical-guide-to-writing-technical-specs/ 를 번역한 글입니다. 오역, 의역이 많을 수 있으니 참고 부탁드립니다. 소프트웨어 엔지니어인 당신의 해야할 일은 기술적 문제들을 해결하는 것이다. 이를 위해 바로 코드 작성을 하고 싶겠지만, 해결책에 대한 일말의 생각 없이 코드 작성을 시작하는 것은 아주 끔찍한 생각이다. 당신이 테크스펙을 작성하는 것으로 어려운 기술적 문제들을 생각할 수 있고, 글솜씨가 영 별로라면 하나를 쓰는 것에 있어 답답하다고 생각할 수 있습니다. 아마 불필요한 잡일 정도로 생각할 수도 있겠다. 하지만 테크스펙을 작성한다면 프로젝트의 이해관계자들이 ..
-
저세상 개발
우리가 nest factory를 실행시킨 사이에...
개인적으로 네스트 팩토리를 실행시킨 다음에 뭔일이 일어나는지 궁금해서 몇가지를 좀 찾아보았다. const app = await NestFactory.create(AppModule); 저걸로 보통 네스트팩토리라는걸 생성하는데, 이게 우리가 돌려야할 커다란 웹사이트의 알파이자 오메가다.. 구현체를 보면.. public async create( module: any, serverOrOptions?: AbstractHttpAdapter | NestApplicationOptions, options?: NestApplicationOptions, ): Promise { const [httpServer, appOptions] = this.isHttpServer(serverOrOptions) ? [serverOrOpti..
-
저세상 개발
Node.js/JS 면접 질문
1. var, let, const의 차이점 - var: 함수 범위에서 사용. 변수를 한번 더 선언해도 에러발생하지 않아 위험함 - let: 중괄호 범위(블록)에서 사용. - const: 중괄호 범위에서 상수를 선언할 때 사용. 따라서 선언과 동시에 할당 즉, var은 가급적 사용을 피하고 재할당 방지를 위해서는 const, 그게 아니라면 let을 사용하자. 2. hoisting - 함수 내에서 선언된 변수 선언부를 유효범위의 최상단에서 선언함. - 코드가 옮겨지지는 않고 JS 파서가 함수를 한번 preview하고 함수 도입부에서 선언하여 사용함. 3. Node.JS란? - 서버환경에서 JS를 실행할 수 있도록 개발된 자바스크립트 런타임 - 이벤트루프가 단일 스레드이므로 I/O가 잦은 서버에 있어 Non-..
-
악성코드분석 - 중급
2. 워밍업 - UPX
강사는 본 과정을 따라오지 못한다면, 초급과정으로 내려가는 것이 좋다고 권유함 1. UPX "TEST"를 출력하는 MsgBox를 출력하는 프로그램을 upx패킹해보도록 하자. 1-1. UPX자동 패킹/언패킹 upx.exe를 통해 upx로 패킹할 수 있다. 위와 같이 UPX로 패킹되어 있다는 안내 문구를 프로그램에서 확인해볼 수 있다. PE VIEW로 열어보면 다양한 메모리 할당을 위한 함수를 사용하고 있는 모습 또한 볼 수 있었다. 언패킹 또한 upx.exe로도 가능하다. 위와 같은 명령어를 사용하면 언패킹된다. 패킹되었다는 안내문구가 사라지고, 패킹되지 않은 프로그램임을 알 수 있다. 패킹되기 전 파일을 한번 집어넣어 본 것인데, 함수 호출을 위한 테이블이 그대로 살아있는 모습도 확인할 수 있으며, PE..
-
악성코드분석 - 중급
1. 실습환경 정리
추후 추가 예정
-
Core Concepts
[Angr 공식문서] 1. Top Level Interfaces
사전 준비 IPython에서 angr를 사용하고 탐색해보자(다른 파이썬 커맨드라인 도구로 하여도 상관없다.) angr는 Ipython을 통해 사용되는 것을 전제로 개발되었다. 만약 어떤 인터페이스를 사용해야 하는지 햇갈린다면 tab키를 눌러 자동완성 시킬 수 있다. 간혹가다 IPython에서 tab키를 통한 자동완성이 느릴 수 있다. 자동완성의 정확성을 낮추지 않고 도움이 되는 방법을 알려주겠다. # ipython을 킬때마다 아래 코드가 되풀이되지 않도록 Ipython 프로파일의 startup 디렉토리에 아래 내용을 넣어라 import IPython py = IPython.get_ipython() py.Completer.use_jedi = False 이 프로젝트는 angr에 기반하고 있다. 이것과 함께,..
-
Introductory Errata
[Angr 공식문서] Angr 기여 방법
버그 보고 만약 angr에 버그가 나타난다면, 우리에게 알려주세요! 1. angr/바이너리와 angr/agr의 fork를 만드세요. 2. 우리에게 angr/바이너리와 바이너리를 pull requet를 보내십시요. 3. angr/tests/broken_x.py, angr/tests/broken_y.py 등의 바이너리를 작동시키는 테스트케이스를 포함한 angr/angr에 대한 pull request를 보내십시요. 우리가 서술한 테스트케이스를 따라주세요. 그러면 저희가 쉽게 합칠 수 있고 script를 실행시킬 수 있습니다. 예를들면: 1 2 3 4 5 6 7 def test_some_broken_feature(): p = angr.Project("some_binary") result = p.analyses...
-
Introductory Errata
[Angr 공식문서] 1. 설치
angr 설치 angr는 파이썬 기반 환경에서 작동하므로 Python3가 설치되어 있어야 합니다. python2는 지원하지 않습니다. Angr의 사용에 있어서 파이썬 가상환경(python virtual environment)사용을 극히 권장합니다. angr가 의존성을 지니고 있는 z3, pyvex들이 원본에서 포크된 라이브러리들의 네이티브 코드들을 필요로 하기때문에 libz3나 libVEX가 설치되어 있다면 angr가 이 프로그램들을 덮어쓸 수도 있습니다. 가상환경 밖에서 angr를 설치하여 동작시키다 발생한 문제에 대해서는 책임지지 않습니다. 의존성 python의 의존성은 pip나 setup.py 스크립트에 의해 다뤄집니다. 그러나 설치를 완료하기 위해서는 약간의 C언어 빌드가 필요할 수 있습니다. 따..
-
Introduction
[Angr 공식문서] 1. 소개
서문 Angr는 동적 심볼릭 분석과 정적 분석을 통한 멀티 아키텍처 바이너리 분석 도구입니다. 만약, 당신이 어떻게 이것을 사용하는지 배우고 싶다면, 잘 찾아 오신 것입니다. 우리는 Angr를 가능한 쉽게 사용할 수 있게 하려고 노력했습니다. 우리는 사용자가 iPython을 간단히 시작하고 몇가지 명령으로 집중적인 바이너리 분석을 쉽게 수행할 수 있는 사용자 친화적인 바이너리 분석 제품군을 만드는 것입니다. 다시말해 바이너리 분석은 복잡하고 그것은 Angr를 복잡하게 만듭니다. 이 문서는 angr에 대한 사용법을 정리한 문서입니다. 바이너리를 분석하기 위해 극복해야 할 몇가지의 목표입니다. 대충 말하자면... 1. 바이너리를 분석 프로그램으로 연다 2. 바이너리를 IR이라는 언어로 바꾼다. 3. 실제 분..
-
포너블
ROP gadget으로 쉘 따기 feat. calc
ROP gadget으로 쉘을 따기 위해 어떤 짓을 하는지 궁금해서 좀 봤다. 일단, 우리가 해야하는건, bss영역에다가 "/bin/sh"같이 생겨먹은 문자열을 박아넣고, 인터럽트를 통해서 원하는 함수를 실행시킬 수 있다. 어떤 개지랄을 해서라도 다음과 같은 환경을 만들어 놔야 한다. 내가 execve함수를 실행한다는 조건에서 이런 환경이어야 한다. eax : 0xb, ebx : &"/bin/sh" 나머지 레지스터는 잘 모르겠고, int80으로 인터럽트를 걸 수 있는 상황이어야 한다. 우선 /bin/sh같은 경우는 bss+0x100같은 곳에 쓰는게 대부분이다. 엄... 그냥 적절한 가젯을 잘 박아서 하면 된다. 원하는 레지스터에 pop해주는거 구한 다음에 그 레지스터를 dword하면 됨~ 아 생각해보니까 ..