IT (192) 썸네일형 리스트형 malwares,virustotal python script malwares,virustotal python script 먼저, 두 사이트는 모두 API를 제공한다. API란 무엇인가?.. API는 Application Programming Interface의 약자이다. 응용 프로그램 개발자들이 애플리케이션을 만들 떄 운영체제에서 동작하는 프로그램을 쉽게 만들 수 있도록 화면 구성이나 프로그램 동작에 필요한 각종 함수를 모아놓은 것을 말한다. 위 그림에서 예를 들면 API는 메뉴판 라이브러리는 주방이라고 볼 수 있다. C언어에서 printf는 메뉴판(API)을 통해 주방(라이브러리)에서 printf()의 완성된 함수 양식을 꺼내어 보여주고, 손님은 그것을 이용할 수 있습니다. 그럼 이제 API를 알고 malwares.com부터 알아 보도록하겠습니다.! malwar.. assembly div, idiv, cdq 32bit의 나눗셈을 한다고 가정해보자. 명령어 div(부호가 없는 나눗셈), idiv(부호가 있는 나눗셈)은 많이 알고 있는 개념이다. 그 외에 알아야할 개념은 2가지 정도이다. 피제수와 cdq이다. 피제수는 나눔을 당하는 수 즉, dividied이다. 17과 5를 (32bit data라 가정) 나눈다고 하면 eax에 17을 넣고, ebx(다른 레지스터나 메모리도 상관은 없다)에 5를 넣는다. 그리고 div나 idiv연산을 하면 잘 될 거같지만 그렇지 않다. 제수가 32bit data라면 피제수는 64bit가 되어야한다. 그래서 피제수의 bit를 확장해 줘야하는데 그것이 cdq 연산이다. eax를 eax(상위16비트):edx(하위32비트)로 바꿔준다. 그리고 idiv 연산을 하면 몫은 eax 나머지는 .. EFLAGS - 제어 플래그, 상태 플래그 EFLAGS 레지스터는 CPU의 동작을 제어하거나 연산 결과를 반영하는데 사용되는 레지스터들이다. EFLAGS 영역은 리버스 엔지니어링에 핵심적인 추적을 위한 용도로 자주 사용되므로 꼭 숙지해야한다. [제어 플레그] 제어 플레그는 CPU의 동작을 제어하는 플레그이다. Direction Flag(DF) 스트링 조작을 할 때에 이 플래그가 0이면 0번지를 나타내는 레지스터 값이 자동적으로 증가하고 1이면 레지스터값은 자동적으로 감소한다. Interupt Flag(IF) 플래그가 0일때 INTR 단자로부터의 외부 인터럽트 요구는 무시하고, 1일 때는 외부 인터럽트 요구를 받아들인다. Trap Flag(TF) 플래그가 0일때 CPU는 보통대로 명령을 실행하지만, 1일 때는 CPU는 한 명령을 실행할 때마다 자동.. IDA 를 이용한 C언어 디스어셈블(1~10) IDA란?? IDA는 Interactive Disassembler의 약자로 디스어셈블러이다. 따라서 주 기능역시 디스어셈블이다. ※ 특징 - IDA에서 작업할 때는 원본 실행파일이 아닌 idb라는 데이터베이스에 작업을 하게 된다. 따라서 IDA에서 어떠한 작업을 하더라도 원본 실행파일에 영향을 주지 않는다. idb파일만 있다면 원본파일이 없어도 분석이 가능하다. - IDA에는 되돌리기 기능이 없다. 따라서 뭔가 큰 실수로 원래되로 되돌리기 위해서는 IDA를 종료할 때 DON'T SAVE the database에 체크를 해야한다. - IDA는 많은 단축키가 있기 때문에 아무생각 없이 키를 눌렀다가 난처한 상황이 일어날 수 있다. IDA를 이용해 C언어 300문제를 디스어셈블 하겠습니다. 또한 알게된 IDA.. level10 - 공유 메모리 암복호화 키를 다른 서버에 둔다는 개념을 바탕으로 한 애플리케이션 개념 1. 안전한 키 관리를 위해 외부에 노출돼 있는 웹서버와 분리해 독립적인 장소인 키 관리 서버에 키를 따로 둔다. 2. 키 관리 서버에서 웹서버로 키를 전송한다. 3. 웹서버에서는 키를 디스크에 저장하지 않고 메모리의 특정 위치에 둔다. 4. 웹서버에서는 데이터를 저장하고 읽을 때 암복호화 과정에서 메모리의 특정 위치에 있는 키를 읽어서 사용한다. # 이번 레벨10의 핵심은 암복호화 과정에서 메모리의 특정 위치에 있는 키를 읽는 다는 것이다. [문제] # 힌트를 보면 암호화 키가 있는 메모리 위치에 대한 정확한 정보가 문제에 제시 되어 있다. 먼저, 공유 메모리에 대해 알아보자. 공유메모리란?? 용어 그대로 공유 메모리란 프로세스 간.. level9 - 오버플로우(overflow) 문제 # 취약점은 fgets 명령어에서 발생한다. buf는 10바이트가 할당 됐지만, 입력값은 40바이트를 받고있다. 따라서 오버플로우를 발생시켜 buf2의 메모리를 조작할 수 있고 level10의 권한을 얻을 수 있다. # 먼저 아무 계산하지않고 go를 무작정 입력해 보자, Good Skill과 함께 레벨 10의 권한을 얻었다. 이번 level에서 중요하게 알아야 할 것은 buf에 10바이트의 배열을 선언 했다고해서 메모리상에도 10바이트가 그대로 적용되지는 않는다는 것이다. 컴퓨터는 기본 원칙이 있고, 운영체제와 컴파일러마다 최고의 성능을 낼 수 있도록 기본 원칙을 어기지 않는 범위 안에서 약간의 변형을 가한다. 10 6 10 6 4 4 buf[10] dummy buf2[10] dummy SFP RET level8 - find 명령어, 패스워드 파일 크랙 문제 # 용량이 1481로 정해주었기 때문에 쉽게 찾을 거라고 생각했다. 하지만, 아무리 정확한 명령어를 입력해도 나오지 않았다. 그래서 결국 어둠의 정보(?)로 파일명이 found.txt라는 것을 알아보고 그 파일을 찾아보니.. # 용량이 2700이다.. ! 뭔가 잘못 된 거같지만 일단 파일을 열어보자. # shadow파일을 열었을때 처럼 나오고 2번째 파티션이 암호화된 패스워드이다. 문제 해결 위의 해당 암호화된 패스워드 부분을 패스워드 크랙 툴인 존 더 리퍼를 이용해 크랙했다. # found.txt파일을 pass.txt라는 이름으로 바꿔서 파일로 저장했다. # 비밀번호가 간단해서 딕셔너리 공격을 통해 0초만에 찾아 냈다. # 존 더 리퍼를 통해 크랙된 결과는 john.pot 파일에 저장된다. level7 - 2진수, 10진수, 아스키코드 # hint는 위와 같다. # --_--_- 이것을 보자마자 -는 1 _는 0을 나타나겠구나 바로 알아 봤다.! # 띄어쓰기를 기준으로 7개씩 나눠져있었고, 각각을 10진수로 바꿔보니, 109 97 116 101 라는 10진수가 나왔다 . # 여기서 1~127까지있는 아스키코드가 바로 떠올랐다. # 아스키코드로 바꿔보면 mate가 나오고 바로 입력해 보았다. # 바로 비밀번호를 획득 할 수 있었다.! 암호화 ※ 암화관련 상식적 단어! 암호문 - 알아볼 수 없는 형태로 만들어진 이상한 글자 평문 - 우리가 알아볼 수 있는 글자 암호화 알고리즘 - 평문을 암호문으로 암호문을 평문으로 바꿔주는 함수나 라이브러리 이전 1 ··· 10 11 12 13 14 15 16 ··· 24 다음