'분류 전체보기'에 해당하는 글 49건

rule test

{
condition:
false
}

해당 코드는 가장 기본적인 yara rule이다.

각 룰은 'rule'로 구별 되며, test의 위치에 식별자가 들어가게 된다.



위 표는 yara rule의 키워드들이다. 키워드는 식별자로 사용할 수 없음을 유의하자.


rule sample
{
meta:
author = "dukup11ch1"
type = "test"
filetype= "Win32 EXE"
version = "1.0"
date = "2018-09-11"
SHA256 = 18543929355CD9239E3CD4A6A17544716CDC66ADF18C185CE2A6DED7558D3653

strings:
$a1="test"
$a2={12 34 56}
condition:
$a1 or $a2
}

이제 yara rule의 구조를 알아 보자.

크게 3부분으로 나눌 수 있다. meta부분은 주석이나 마찬가지이다. 다른사람들에게 자신이 짠 yara rule의 정보를 전달하기위해 존재한다.

strings 부분은 상수를 저장한다고 생각 하면 된다.

condition에서는 조건의 참거짓을 판별한다.


지금까지가 기본적인 yara rule의 구조이다. 다음 것 부터 상세하게 알아보자



'악성코드 분석 관련 > yara rule' 카테고리의 다른 글

yara rule사용법(2)  (0) 2018.09.17

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,


themida를 언팩해보고 있는데 신기해서 써본다


보면 edi가 가리키는 값을 감소 시키는데 이게 바로 아래있는 주소를 가리키고 있다. 그래서 그냥 브포를 걸고 탈출해버리면 전혀 다른 asm이 나오게 된다.(브포를 걸면 해당주소의 값이 CC로 바뀌기 때문) 

이 주소를 다 지나갈 때까지 f8을 이용해서 하다가 지나가고 나면 브포를 걸고 진행해야한다... 바로 아래 코드가 실시간으로 변하는 걸 보니까 신기했다.


더미다 깔때는 함부로 브포걸지말자 바로 다음주소도 실제 opcode가 아니라 풀어야 하는 곳일지도 모른다... 

'리버싱 관련' 카테고리의 다른 글

angr사용법(2)  (0) 2018.05.15
angr사용법(1)  (0) 2018.04.23
codegate2018 final shall we dance? writeup  (4) 2018.04.08
facebook Video_XXXX.mp4 분석  (0) 2017.12.20
Codegate 2017 angrybird 풀이  (0) 2017.12.14

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

아마 완전한 잡담글은 이게 처음일 것 같다.


BoB 디지털포렌식트랙에 합격하게 되었다. 

합격자 명단을 보니 고등학생이 나랑 다른 한명으로 총 2명이였다.

지원서를 넣기전에 디지털포렌식트랙은 이번기수에서 고등학생을 뽑지 않는다는 소문을 들었었는데 뽑힌것이 의아 했다. 아직도 어떻게 뽑혔는지 의아하다.

 

다니고 있는데 과제가 많다.

근데 다른 트랙 과제도 들어보니 만만치 않아서 불만을 가지지는 않고 있다.

수업내용들이 대부분 처음접하는거라 너무 어렵게 느껴진다. 리버싱 공부 할 시간 쪼개서 포렌식공부도 해야했나 생각도 많이 든다.


다행인건 원하던대로 악성코드분석 수업이 있다는 것 이였다. 근데 이 부분은 분명 공부를 해본 경험이 있는데도 다른 것보다도 어렵게 느껴졋다. 공부가 많이 부족하다.


과제도 하면서 이제 themida 최신버전 full protect를 풀어보고자 한다. 예전에 한건 스크립트도 나와있고 정보도 찾으면 잘 나와서 거의 배껴하는 거나 마찬가지였으니 이번에는 스스로 처음부터 하고자 한다.


그래도 재미있다.

자신의 주분야가 리버싱이라고 생각하면 포렌식으로 오는 것도 괜찮을 것 같다. 리버싱하면서 쌓은 지식들이 도움이 많이 될 것이다.

물론 필자처럼 얕게 쌓으면 도움이 별로 안된다...


'잡글' 카테고리의 다른 글

근황  (1) 2019.04.26
요즘 근황  (1) 2018.11.03
angr 다시 정리 해야 겠네요  (0) 2018.04.23
블로그 시작  (2) 2017.11.08

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

배낭암호문제


의도한 풀이는 배낭암호의 취약점인 '격자줄이기'를 활용한 풀이였지만 출제자도 그렇고 모든 사람들이 BF로 풀었다. 


이게 1:1로 대응 되기 때문에 bf를 통해 충분히 풀 수 있다.


플래그 포멧이 정해져 있어 돌리기 편하다...


코드는... 직접 짜시길

'CTF > H3X0R' 카테고리의 다른 글

3D 출제자 Writeup  (0) 2018.06.18

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

3D 출제자 Writeup

CTF/H3X0R 2018. 6. 18. 08:54

그림판 3D문제입니다.


파일들을 보면 그림판3D의 프로젝트 파일임을 알 수 있다.


https://answers.microsoft.com/en-us/windows/forum/apps_windows_10-win_paint3d-win_start3d/location-of-paint-3d-project-file/96bf1674-6b57-48e1-97ea-a3f05cce0941를 통해 알아낸 경로에 해당파일들을 넣어주면 끝난다. 


(현재 노트북에서 그림판 3D가 오류가 나므로 플래그는 패스....)

그리고 라업받으면서 플래그마지막에 '}' 빠져있음을 깨달앗....

'CTF > H3X0R' 카테고리의 다른 글

Cryingbag,Cryingbag_returns 출제자 Writeup  (0) 2018.06.18

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

angr사용법(2)

리버싱 관련 2018. 5. 15. 16:16

Claripy를 이용한 인자값 전달 방법


import claripy

claripy.BVS("argv",설정할 크기)

설정할 크기 안에 인자값의 최대 크기를 넣어 주면 됩니다.

ex)argv = claripy.BVS("argv",100*8)


proj.factory.entry_state(args=["./바이너리",argv])

저번에 이야기한 addr변수가 아닌 args변수를 설정해주어야 합니다.


이밑은 저번과 같습니다.


다음글에서는 claripy의 더 자세한 내용을 정리해서 가져오겠습니다


'리버싱 관련' 카테고리의 다른 글

themida unpack 할때 신기한점 (1)  (0) 2018.08.10
angr사용법(1)  (0) 2018.04.23
codegate2018 final shall we dance? writeup  (4) 2018.04.08
facebook Video_XXXX.mp4 분석  (0) 2017.12.20
Codegate 2017 angrybird 풀이  (0) 2017.12.14

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

angr사용법(1)

리버싱 관련 2018. 4. 23. 17:56

angr에서 기본적으로 알아야 할 명령어


binary 선택

proj = angr.Project('binary path', option) #옵션은 생략가능

angr로 분석할 binary 선택


proj.factory.* 생성자들

proj.factory.blank_state()

빈 state 생성

ex) state = proj.factory.blank_state()


proj.factory.entry_state()

entrypoint에서의 state 생성 즉 main에서 부터 시작



proj.factory.full_init_state()

init에서 시작


proj.factory.call_state()

특정 함수에서 시작


위 생성자들은 addr인수로 정확한 위치지정(메모리 주소)이 가능, 

프로그램이 인자값을 받는 경우 entry_state나 full_init_state를 통해 인자값을 제공해야함


proj.factory.simgr, proj.factory.simulation_manager

거의 대부분의 angr리버싱문제에서 등장하는 명령입니다. symbolic execution을 제어하고 state공간탐색을위한 알고리즘을 적용합니다.

ex) simgr = proj.factory.simgr(state)


simgr.explore()

역시나 대부분의 angr문제에서 많이 보이는 명령입니다. 보통 find와 avoid인수를 가지며, find 인수는 말 그대로 우리가 찾을 위치를 의미하며, avoid는 우리가 피해야 할 위치를 의미합니다. find 인수와 avoid인수 모두 메모리 주소 뿐만 아니라 문자열도 가능합니다.


이 정도만 알아 두시면 쉬운 angr 문제들은 모두 푸실 수 있습니다.


기타 문제 예시들은 

https://github.com/angr/angr-doc/tree/master/examples에 많이 있습니다.

'리버싱 관련' 카테고리의 다른 글

themida unpack 할때 신기한점 (1)  (0) 2018.08.10
angr사용법(2)  (0) 2018.05.15
codegate2018 final shall we dance? writeup  (4) 2018.04.08
facebook Video_XXXX.mp4 분석  (0) 2017.12.20
Codegate 2017 angrybird 풀이  (0) 2017.12.14

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

angr 기억이 안나서 문서를 다시 봤는데 바뀐점이 많네요... 너무 자주 바뀌는거 아닌가

'잡글' 카테고리의 다른 글

근황  (1) 2019.04.26
요즘 근황  (1) 2018.11.03
오랜만에 생각나서 쓰는 글  (1) 2018.07.15
블로그 시작  (2) 2017.11.08

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

EXE를 메모장으로 여는 문제


메모장으로 열면 키로 보이는 문자열이 존재 합니다. 이것이 키 값입니다.

'리버싱 관련 > codeengn' 카테고리의 다른 글

codeengn basic 1  (0) 2018.04.01

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,

메모리 덤프뜨는 문제


프로그램을 실행 한 후 탱고를 선택하면 다른 선택지들과는 다르게 소리가 나오지 않습니다. 소리파일이 깨졋다고 하는 군요.


아이다가 0x402120주소가 함수 프롤로그로 시작함에도 함수로 인식하지 못하니 이곳을 함수로 지정 해 줍시다.


switch-case문으로 이루어져 있는것을 알 수 있군요. 


음악을 재생하는 부분 입니다. 재생할 음악을 나타내는 pszSound가 esi임을 알 수 있으므로 esi주소에 음악파일이 있음을 알 수 있습니다.


여기서 음악파일의 위치를 알 수 있겠군요.


디버깅 하면서 저 주소로 가게되면 wav파일이 있음을 볼 수 있습니다. wav포멧에 맞게 덤프를 뜨시면 됩니다.


그리고 덤프 뜬 음악을 재생하려 하니 에러를 내뿜길래 mp3로 파일로 변환하였습니다.


mp3로 변환한 파일을 들어보면 플래그를 말해줍니다.

'리버싱 관련' 카테고리의 다른 글

angr사용법(2)  (0) 2018.05.15
angr사용법(1)  (0) 2018.04.23
facebook Video_XXXX.mp4 분석  (0) 2017.12.20
Codegate 2017 angrybird 풀이  (0) 2017.12.14
Codegate 2017 HelloProtector 풀이  (0) 2017.12.13

WRITTEN BY
Dukup11ch1
무근본, 실력 0, 아는척하기위한 블로그. 저는 귀엽습니다

,