https://github.com/zyantific/IDASkins

 

IDA에 많은 테마가 있지만 정보가 별로없길래 도움이 될지는 모르겠지만 제가 적용한 방법을 알려드릴게요. 

위에 링크도 참고해주세요.

 

ida-consonance.clr
다운로드

 

adwaita-dark.clr
다운로드

 

 

저는 clr파일을 이용해서 테마 적용시켰습니다. 

경로는 그냥 일단 그냥 IDA 디렉토리 안에 넣어놓았습니다. 어차피 Import 할거라 위치는 상관없습니다.

 

IDA를 키고 Options -> Colors -> Import 해줍니다.

아까 clr 파일을 임포트해주고 재시작하면 될겁니다.

 

 

수고링^^~

'Hacking' 카테고리의 다른 글

LFI Vuln  (0) 2019.11.11
ARM Reversing  (0) 2019.08.04
메모리 보호기법 해제  (0) 2018.12.19
Volatility Commands  (0) 2018.12.02
메모리포렌식 Volatility  (0) 2018.10.09

-fno-stack-protector 메모리 보호 기법 SSP(Stack Smashing Protector) 해제

-mpreferred-stack-boundary= 스택의 경계값 설정

-m32 32비트 컴파일 

-z execstack 스택 실행권한 설정

-no-pie 메모리 보호 기법 PIE 해제

 

gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -no-pie -o asdf asdf.c

보호 기법 설정

ASLR

> cat /proc/sys/kernel/randomize_va_space
2

값이 0이면 ASLR 없음, 1이면 stack, library가 랜덤, 2이면 stack, library, heap이 랜덤.

DEP/NX

> gcc -z execstack ...

STACK에 실행권한 줌. DEP/NX 제거라고 봐도 될듯

CANARY

> gcc -fno-stack-protector ... # SSP 해제
> gcc -fstack-protector ...    # SSP 설정

PIE

> gcc -no-pie ...    # PIE 해제
> gcc -fpie ...      # .text 랜덤
> gcc -fpie -pie ... # PIE 설정

RELRO

> gcc -z relro ...        # PARTIAL-RELRO 설정
> gcc -z relro -z now ... # FULL-RELRO 설정
> gcc -z norelro ...      # NO-RELRO

32bit Compile

> sudo apt install gcc-multilib # 관련 라이브러리 설치 후 사용가능
> gcc -m32 ... # 64bit에서 32bit 컴파일
> gcc -m64 ... # 디폴트이므로 없어도 됨

DUMMY

> gcc -mpreferred-stack-boundary=2 ... # 32bit
> gcc -mpreferred-stack-boundary=4 ... # 64bit

DUMMY 제거

함수 최적화

> gcc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 ... # 함수 최적화 제거

단독 링크

> gcc -fno-builtin ... # 라이브러리와 링크되지 않고 단독으로 링크

 

 

'Hacking' 카테고리의 다른 글

ARM Reversing  (0) 2019.08.04
IDA PRO 테마 적용  (0) 2018.12.27
Volatility Commands  (0) 2018.12.02
메모리포렌식 Volatility  (0) 2018.10.09
PNG 구조  (0) 2018.10.09

2018 OtterCTF Writeup

1 - What the password? - 100pt

you got a sample of rick's PC's memory. can you get his user password?

format: CTF{...}

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 hashdump -s 0xfffff8a0016d4010

Volatility Foundation Volatility Framework 2.6
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Rick:1000:aad3b435b51404eeaad3b435b51404ee:518172d012f97d3a8fcc089615283940:::

hivescan 해준걸 hashdump떠서 봤는데 이렇게 3개의 계정이 나왔다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 lsadump
Volatility Foundation Volatility Framework 2.6
DefaultPassword
0x00000000 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   (...............
0x00000010 4d 00 6f 00 72 00 74 00 79 00 49 00 73 00 52 00   M.o.r.t.y.I.s.R.
0x00000020 65 00 61 00 6c 00 6c 00 79 00 41 00 6e 00 4f 00   e.a.l.l.y.A.n.O.
0x00000030 74 00 74 00 65 00 72 00 00 00 00 00 00 00 00 00   t.t.e.r.........

DPAPI_SYSTEM
0x00000000 2c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ,...............
0x00000010 01 00 00 00 36 9b ba a9 55 e1 92 82 09 e0 63 4c   ....6...U.....cL
0x00000020 20 74 63 14 9e d8 a0 4b 45 87 5a e4 bc f2 77 a5   .tc....KE.Z...w.
0x00000030 25 3f 47 12 0b e5 4d a5 c8 35 cf dc 00 00 00 00   %?G...M..5......

lsadump 떠줘서 가져왔다.

예시 : https://www.aldeid.com/wiki/Volatility/Retrieve-password

lsadump plugin : https://github.com/volatilityfoundation/volatility/blob/master/volatility/plugins/registry/lsadump.py

FLAG : CTF{MortyIsReallyAnOtter}


2 - General Info - 75pt

Let's start easy - whats the PC's name and IP address?

format: CTF{flag}

PC name

hive스캔을 먼저 떠줬다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 hivescan

그리고 컴퓨터 이름이 저장된 레지스트리로 가서 가져왔다.

컴퓨터 이름 레지스트리 : HKLM\SYSTEM\ControlSet00X\Control\ComputerName\ActiveComputerName

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 printkey -o 0xfffff8a000024010 -K \ControlSet001\\Control\\ComputerName\\ActiveComputerName
Volatility Foundation Volatility Framework 2.6
Legend: (S) = Stable   (V) = Volatile

----------------------------
Registry: \REGISTRY\MACHINE\SYSTEM
Key name: ActiveComputerName (V)
Last updated: 2018-08-04 19:26:11 UTC+0000

Subkeys:

Values:
REG_SZ       ComputerName   : (V) WIN-LO6FAF3DTFE

FLAG : CTF{WIN-LO6FAF3DTFE}

PC IP

netscan 해줘서 local Adress를 가져왔다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 netscan

FLAG : CTF{192.168.202.131}


3 - Play Time - 50pt

Rick just loves to play some good old videogames. can you tell which game is he playing? whats the IP address of the server?

format: CTF{flag}

Game name

프로세스 목록들보면 LunarMs.exe라는 게임을 하고 있었다.

FLAG : CTF{LunarMS}

Server IP

netscan따서 192.168.202.131과 LunarMs의 Foreign Address를 가져왔다.

FLAG : CTF{77.102.199.102}


4 - Name Game - 100pt

We know that the account was logged in to a channel called Lunar-3. what is the account name?

format: CTF{flag}

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 memdump -p 708 -D .

먼저 LunarMS 게임을 덤프 떠서 가져온다. LunarMS의 pid는 708이다

strings -a 708.dmp > prob3.txt

거기서 strings로 따서 Lunar-3를 검색해보면 Lunar-3 밑에 0tt3r8r33z3 가 적혀있었다. FLAG같아서 인증했다.

FLAG : CTF{CTF{0tt3r8r33z3}}


5 - Name Game2 - 150pt

From a little research we found that the username of the logged on character is always after this signature: 0x64 0x??{6-8} 0x40 0x06 0x??{18} 0x5a 0x0c 0x00{2} What's rick's character's name?

format: CTF{...}

No Solve...


6 - Silly Rick - 100pt

Silly rick always forgets his email's password, so he uses a Stored Password Services online to store his password. He always copy and paste the password so he will not get it wrong. whats rick's email password?

format: CTF{flag}

복사 붙여넣기를 사용한다고 했다. clipboard 플러그인을 사용해서 해당 값을 가져왔다.

$ vol.py -f OtterCTF.vmem --profile=Win7SP1x64 clipboard
Volatility Foundation Volatility Framework 2.6
Session   WindowStation Format                         Handle Object             Data
---------- ------------- ------------------ ------------------ ------------------ --------------------------------------------------
        1 WinSta0       CF_UNICODETEXT               0x602e3 0xfffff900c1ad93f0 M@il_Pr0vid0rs
        1 WinSta0       CF_TEXT                         0x10 ------------------
        1 WinSta0       0x150133L             0x200000000000 ------------------
        1 WinSta0       CF_TEXT                           0x1 ------------------
        1 ------------- ------------------           0x150133 0xfffff900c1c1adc0

FLAG : CTF{M@il_Pr0vid0rs}


7 - Hide And Seek - 100pt

The reason that we took rick's PC memory dump is because there was a malware infection. Please find the malware process name (including the extension)

BEAWARE! There are only 3 attempts to get the right flag!

format: CTF{flag}

FLAG : CTF{vmware-tray.exe}


10 - Bit 4 Bit - 100pt

We've found out that the malware is a ransomware. Find the attacker's bitcoin address.

format: CTF{...}

vol.py -f OtterCTF.vmem --profile=Win7SP1x64 procdump -D dump/ -p 3720

https://transfer.sh/Dss8z/hidd.exe 이걸 사용해 비트코인 주소를 뽑아낼 수 있다.

FLAG : CTF{1MmpEmebJkqXG8nQv4cjJSmxZQFVmFo63M}


11 - Graphics is for the weak - 150pt

There's something fishy in the malware's graphics.

format: CTF{...}

dnspy를 이용해서 열면 확인할 수있다.

FLAG : CTF{S0_Just_M0v3_Socy}

'CTF WriteUp' 카테고리의 다른 글

2019 Dimi CTF Prequal Writeup  (0) 2019.08.04
2019 Tamu CTF Writeup  (0) 2019.08.04
2019 Codegate Quals Writeup  (0) 2019.08.04
2018 고등해커 본선 Writeup  (0) 2019.08.04
2018 picoCTF Writeup  (0) 2018.11.22

암스트롱수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main(){
    int n,m,i,copy,sum;
    scanf("%d %d",&n,&m);
    for(i=n; i<=m; i++){
        copy=i;
        sum=0;
        while(copy>0){
            sum+=(copy%10)*(copy%10)*(copy%10);
            copy= copy/10;
        }
        if(sum==i)
            printf("%d ",i);
    }
 
    return 0;
}
cs



최단거리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
int main(){
    int n,*arr,min,i;
    scanf("%d",&n);
    arr =(int*)malloc(sizeof(int)*n);
    for(i=0; i<n; i++){
        scanf("%d",arr+i);
    }
    min = arr[1- arr[0];
    for(i=2; i<n; i++){
        if(arr[i] - arr[i-1< min){
            min = arr[i] - arr[i-1];
        }
    }
    printf("%d",min);
    return 0;
 
}
cs



레고블럭

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <stdlib.h>
 
int main(){
    int n, *arr, max, i, cnt=1;
    scanf("%d",&n);
    arr = (int*)malloc(sizeof(int)*n);
    for(i=0; i<n; i++){
        scanf("%d", arr+i);
    }
    max = arr[0]; //max는 앞에 보이는 블럭의 높이
    for(i=1; i<n; i++){ //블럭을 좌>우로 순회 (왼쪽이 앞)
        if(arr[i] > max){ //앞에 보이는 블럭보다 뒤에 블럭이 더 크면
            max = arr[i]; //max를 바꿔줌
            cnt++//보이는 블록수 +1
        }
    }
    printf("%d " ,cnt); //왼쪽에서 봤을 때 블록 수
    cnt = 1;
    max = arr[n-1];
    for(i=n-2; i>=0; i--){ //블럭을 우>좌로 순회(오른쪽이 앞)
        if(arr[i] > max){
            max = arr[i];
            cnt++;
        }
    }
    printf("%d", cnt);
    return 0;
}
cs


Shell Script

#!/bin/sh
#!/bin/bash
#!/bin/zsh

#으로 시작하면 주석인데 # 바로 뒤에 ! 가 오면 스크립트를 실행할 쉘을 지정하는 선언문이다.

주석

# example it's comment!

맨 앞글자에 # 을 붙여주면 된다.

출력

#!/bin/bash
echo "My name is Sung"
printf "Hello World!"

echo

문장을 출력해주는데 python의 print()처럼 자동 줄바꿈이 된다. 변수 출력시에는 앞에 $ 을 붙여준다.

printf

C언어와 매우 유사하다. 줄 바꿈이 안 된다.

변수

#!/bin/bash
var1="Apple"
var2="Strawberry"

fuction f(){
local var3="it's Local variable"
echo $var3
}
echo $var1 $var2
printf "local variable : "
f

변수를 사용하려면 앞 뒤 공백 없이 = 를 입력하면 대입연산자가 된다.

그리고 그냥 선언한 변수는 전역 변수가 된다. 함수 안에서 지역변수를 사용하려면 변수 이름 앞에 local을 붙여주면 된다.

함수

#!/bin/bash
function test1(){
   echo "It's test1"
}
test2(){
echo "It's test2"
}
test1
test2

함수를 선언할 때 function을 붙여도 되고 안붙여도 상관 없다.

단, 함수 명을 쓰면 함수가 호출이 되는데 호출 코드가 함수 코드보다 반드시 에 있어야 된다. 함수 코드 보다 앞에서 호출 시 오류가 발생한다.

배열

#!/bin/bash
arr=('a' 'b' 'c' 'd')

arr[4]='test'
echo ${arr[4]}

arr[5]='input'
echo ${arr[5]}

echo ${arr[@]}

unset arr
echo ${arr[@]}

배열 사용시에는 괄호를 사용해야한다.

기존 배열에 값을 추가할 수 있고 바꿀 수도 있다.

특정 배열의 함수를 보고싶으면 arr[@] 또는 arr[*]을 사용한다. unset을 이용하면 배열을 지울 수 있다.

참고로 1차원 배열밖에 사용하지 못 한다.

조건문

#!/bin/bash
var1=10
var2=11
if [ ${var1} -eq ${var2} ]; then
echo "var1 Equal var2"
elif [ ${var1} -ne ${var2} ]; then
echo "var1 Not Equal var2"
fi

if문의 기본 형태는 아래와 같다.

값 조건식 값을 넣을 때 띄어쓰기가 안 들어가면 스크립트 에러가 난다.

if

[ 값 조건식 값 ]; then

~~~

fi

조건식설명
-z문자열의 길이가 0이면 참
-n문자열의 길이가 0이 아니면 참
-eq값이 같으면 참
-ne값이 다르면 참
-gt값1 > 값2
-ge값1 >= 값2
-lt값1 < 값2
-le값1 <= 값2
-a&& , And연산과 동일
-o|| , xor 연산과 동일

선택문

#!/bin/bash
echo "Enter a Num between 1 to 5"
read num
case $num in
1) echo "You pick Number 1" ;;
2) echo "You pick Number 2" ;;
3) echo "You pick Number 3" ;;
4) echo "You pick Number 4" ;;
5) echo "You pick Number 5" ;;
*) echo "Invalid Number" ;;
esac

문장 끝은 ;; 으로 끝내준다. 그리고 case에 없는 값은 *) 을 사용해서 예외 할 수 있다.

반복문

반복문을 빠져 나갈 때 braek 를 사용하고 반복문이나 조건문을 건너 뛸 때는 `continue를 사용한다.

#!/bin/bash
for i in {1..5..2}
do
echo ${i}
done

count=5

for((i=1; i<=count; i++)); do
printf ${i}" "
done

echo ""

i=0
while [ $i -le 5 ]
do
   echo $i
    i=$(($i+1))
done

for문은 아래와 같은 형식으로 이루어져 있다.

for [변수] in [반복 조건]
do
  [실행문]
done

while문은 아래와 같은 형식으로 이루어져있다.

while [ 값1 조건식 값2 ]
do
  [실행문]
  [실행문]
done

변수 타입

#!/bin/bash
declare -r str_var="Hello"
declare -i num_var=9999
declare -a arr_var=(1 4 'NOP' 10)
declare -x exp_var="export"

func(){
echo "fuction..."
}

declare -f func

echo ${str_var} ${num_var} ${arr_var[*]} ${exp_var}

변수는 타입을 구분하지 않고 기본적으로 문자열이다. 단 문맥에 따라 연산 처리를 한다.

그래서 변수 타입을 지정하기 위해서 declare , typeset 타입 지정 명령을 지원한다. 옵션은 같다.

-r은 읽기전용 -i는 정수 -a는 배열 -x는 환경 변수 -f는현재 스크립트의 함수 출력을 해준다.

예약 변수

문자설명
HOME사용자의 홈 디렉토리
PATH실행 파일을 찾을 경로
LANG프로그램 사용시 기본 지원되는 언어
PWD사용자의 현재 작업중인 디렉토리
FUNCNAME현재 함수 이름
SECONDS스크립트가 실행된 초 단위 시간
SHLVL쉘 레벨(중첩된 깊이를 나타냄)
SHELL로그인해서 사용하는 쉘
PPID부모 프로세스의 PID
BASHBASH 실행 파일 경로
BASH_ENV스크립트 실행시 BASH 시작 파일을 읽을 위치 변수
BASH_VERSION설치된 BASH 버전
BASH_VERSINFOBASH_VERSINFO[0]~BASH_VERSINFO[5]배열로 상세정보 제공
MAIL메일 보관 경로
MAILCHECK메일 확인 시간
OSTYPE운영체제 종류
TERM로긴 터미널 타입
HOSTNAME호스트 이름
HOSTTYPE시스템 하드웨어 종류
MACHTYPE머신 종류(HOSTTYPE과 같은 정보지만 조금더 상세하게 표시됨)
LOGNAME로그인 이름
UID사용자 UID
EUIDsu 명령에서 사용하는 사용자의 유효 아이디 값(UIDEUID 값은 다를 수 있음)
USER사용자의 이름
USERNAME사용자 이름
GROUPS사용자 그룹(/etc/passwd 값을 출력)
HISTFILEhistory 파일 경로
HISTFILESIZEhistory 파일 크기
HISTSIZEhistory 저장되는 개수
HISTCONTROL중복되는 명령에 대한 기록 유무
DISPLAYX 디스플레이 이름
IFS입력 필드 구분자(기본값: - 빈칸)
VISUALVISUAL 편집기 이름
EDITOR기본 편집기 이름
COLUMNS현재 터미널이나 윈도우 터미널의 컬럼 수
LINES터미널의 라인 수
LS_COLORSls 명령의 색상 관련 옵션
PS1기본 프롬프트 변수(기본값: bash\$)
PS2보조 프롬프트 변수(기본값: >), 명령을 ""를 사용하여 명령 행을 연장시 사용됨
PS3쉘 스크립트에서 select 사용시 프롬프트 변수(기본값: #?)
PS4쉘 스크립트 디버깅 모드의 프롬프트 변수(기본값: +)
TMOUT0이면 제한이 없으며 time시간 지정시 지정한 시간 이후 로그아웃

위치 매개 변수

문자설명
$0실행된 스크립트 이름
$1$1 $2 $3...${10}인자 순서대로 번호가 부여된다. 10번째부터는 "{}"감싸줘야 함
$*전체 인자 값
$@전체 인자 값($* 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과 나옴)
$#매개 변수의 총 개수

특수 매개 변수

문자설명
$$현재 스크립트의 PID
$?최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태
$!최근에 실행한 백그라운드(비동기) 명령의 PID
$-현재 옵션 플래그
$_지난 명령의 마지막 인자로 설정된 특수 변수

매개 변수 확장

문자설명
${변수}$변수와 동일하지만 {} 사용해야만 동작하는 것들이 있음
${변수:위치}위치 다음부터 문자열 추출
${변수:위치:길이}위치 다음부터 지정한 길이 만큼의 문자열 추출
${변수:-단어}변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수는 사용 불가
${변수-단어}변수 미선언시만 기본값 지정, 위치 매개 변수는 사용 불가
${변수:=단어}변수 미선언 혹은 NULL일때 기본값 지정, 위치 매개 변수 사용 가능
${변수=단어}변수 미선언시만 기본값 지정, 위치 매개 변수 사용 가능
${변수:?단어}변수 미선언 혹은 NULL일때 단어 출력 후 스크립트 종료
${변수?단어}변수 미선언시만 단어 출력 후 스크립트 종료
${변수:+단어}변수 선언시만 단어 사용
${변수+단어}변수 선언 혹은 NULL일때 단어 사용
${#변수}문자열 길이
${변수#단어}변수의 앞부분부터 짧게 일치한 단어 삭제
${변수##단어}변수의 앞부분부터 길게 일치한 단어 삭제
${변수%단어}변수의 뒷부분부터 짧게 일치한 단어 삭제
${변수%%단어}변수의 뒷부분부터 길게 일치한 단어 삭제
${변수/찾는단어/변경단어}처음 일치한 단어를 변경
${변수//찾는단어/변경단어}일치하는 모든 단어를 변경
${변수/#찾는단어/변경단어}앞부분이 일치하면 변경
${변수/%찾는단어/변경단어}뒷부분이 일치하면 변경
${!단어*}, ${!단어@}선언된 변수중에서 단어가 포함된 변수 명 추출(

비트 연산자

문자설명
<<비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함)
<<=left-shift-equal
>>비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔)
>>=right-shift-equal(<<=와 반대)
&비트 and
&=비트 and-equal
|비트 OR
|=비트 OR-equa
~비트 negate
!비트 NOT
^비트 XOR
^=비트 XOR-equal

기타 연산자

문자설명
,콤마 연산자(comma operator), 2개 이상의 산술 연산을 묶어줌

정수 비교

문자설명
-eq같음
-ne같지 않음
>, -gt더 큼(> 이중 소괄호에서 사용 가능)
>=, -ge더크거나 같음(>= 이중 소괄호에서 사용 가능)
<, -lt더 작음(< 이중 소괄호에서 사용 가능)
<=, -le더 작거나 같음(<= 이중 소괄호에서 사용 가능)

문자열 비교

문자설명
=, ==같음
!=같지 않음
<ASCII 알파벳 순서에 더 작음
>ASCII 알파벳 순서에서 더 큼
-z문자열이 NULL, 길이가 0인 경우
-n문자열이 NULL이 아님
${변수}문자열이 NULL이 아님

'ShellScript' 카테고리의 다른 글

Shell Script Game v1.0  (0) 2018.12.02

Volatility 명령어

vol.py -f [덤프뜰 파일] --profile=[프로파일] (플러그인)

 

Plugins

 

Image Identification : 덤프 파일의 하드웨어 정보

- imageinfo, kdbgscan, kprcscan

 

 


 

Processes and DLLs : 프로세스 분석 및 DLL 분석

- pslist, pstree, psscan, dlllist, dlldump, handles, getsids, verinfo, enumfunc

 

 


 

Process Memory : 프로세스 메모리 분석

- memmap, memdump, procmemdump, dumpfiles, procexedump, vadwalk, vadtree, vadinfo, vaddump

 

memdump

특정 프로세스 PID값을 넣어 그 프로세스 추출 가능

vol.py -f [덤프뜰 파일] --profile=[프로파일] memdump -p [PID] -D [디렉토리]

 

dumpfiles

메모리상에 있는 파일 복구

vol.py -f [덤프뜰 파일] --profile=[프로파일] dumpfiles -Q [메모리주소] -D [디렉토리]

 

 


 

Kernel Memory and Objects : 커널 분석

- modules, modscan, moddump, ssdt, driverscan, filescan, mutantscan, symlinkscan, thrdscan

 

filescan

메모리상에 로드된 모든 파일을 볼 수있다.

 

envars

환경변수 보기

 


 

Networking : 네트워크 분석

- connections, connscan, Sockets, sockscan, netscan

 

connections

네트워크 접속 관련 정보

 

 


 

Registry : 레지스트리 분석

- hivescan, hivelist, printkey, hivedump, hashdump, lsadump, userassist

 

 


 

Crash Dumps, Hibernation, and Conversion : 덤프 분석

- crashinfo, , hibinfo, imagecopy

 

 


 

Malware and Rootkits : 악성코드 및 루트킷 분석

- malfind, , svcscan, ldrmodules, impscan, apihooks, idt, gdt, threads, callbacks, driverirp, devicetree, psxview, ssdt_ex, timers

 

malfind

시그니처 패턴 정보

 

 


 

Miscellaneous : 스트링 분석

- strings, volshell, bioskbd, yarascan, iehistory, mftparser

 

iehistory

인터넷 히스토리

 

mftparser

메모리에 로드된 디코딩 자료들 분석

 

 


 

참고 : https://code.google.com/archive/p/volatility/wikis/CommandReference23.wiki

 

 

'Hacking' 카테고리의 다른 글

ARM Reversing  (0) 2019.08.04
IDA PRO 테마 적용  (0) 2018.12.27
메모리 보호기법 해제  (0) 2018.12.19
메모리포렌식 Volatility  (0) 2018.10.09
PNG 구조  (0) 2018.10.09

Python z3 Module

더 추가할 예정!

z3에 대해 공부할겸 올려봅니다.. ㅎ 틀린부분이나 팁?그런거 있으면 알려주세요

모듈 링크 : https://github.com/Z3Prover/z3

유용한 외국 문서 : https://ericpony.github.io/z3py-tutorial/guide-examples.htm

일반적으로 그냥 근의 공식을 사용해서 프로그래밍을 해서 방정식의 근을 구하는 것은 imperative programming 방식이다.

파이썬의 z3 SMT solver 모듈을 사용해서 방정식의 근을 구하는 것은 decalarative programming이다.

나는 SMT solver 모듈을 사용하는 법에 대해 간단하게 공부하면서 포스팅하겠돠..

SMT solver?

Satisfiability Modulo Theories의 약자이다.

수식을 만족하는 값이 존재하는지 찾아준다. 수식을 만족하는 값이 존재할 경우 그 값을 구해준다.

True or False + 방정식, 부등식 해 구하기

Function

from z3 import *

z3 모듈 사용하기 위해 임포트

x = Int('x')
y = Int('y')

Int()는 미지수(정수)를 선언

x = Real('x')
y = Real('y')

Real()은 미지수(실수)를 선언

x = BitVec('x',8)
y = BitVec('y',8)

BitVec() 미지수(비트 벡터)를 선언

비트 연산을 할 때 사용되는데 BitVec('미지수',n)으로 n비트 미지수를 선언 해준다.

set_option(precision=3)

Real()을 사용했을 때 3자리 까지만 출력하고 싶다면 set_option 함수 사용

s = Solver()

Solver 객체 생성하는 함수

https://z3prover.github.io/api/html/classz3py_1_1_solver.html

위에 Solver()에 대해 많은 예제와 함수들이 있습니다.

s.add()

s.append() 

s.assert_exprs()

s.Insert()

수식을 추가하는 함수

s.assertions()

추가된 수식을 반환하는 함수

s.push()

s.pop()

수식을 넣고 빼는 함수

s.check()

값이 존재하면 sat 값이 존재하지 않으면 unsat을 반환

s.model()

값이 존재할 경우 값을 구해주는 함수

unsat , unknown이면 에러를 반환

s.reason_unknown()

check() 함수의 반환 값이 unknown인 이유를 알려줌

s.reset()

추가한 수식을 초기화 시키는 함수

Example

from z3 import *
x = Int('x')
s = Solver()
s.insert(x*x-4*x+3==0)
print s.check()
print s.model()

x^2 - 4x +3 =0을 풀어주는 예시다.

'Python' 카테고리의 다른 글

python struct module  (0) 2019.11.21
파이썬 리스트의 문자열을 int 형태로 변환  (2) 2019.02.18

+ Recent posts