반응형

MD5: 43978645947da7404f705386a6bfaf6b


.NET으로 만들어 진 Malware입니다.



"JohnJack.Faster.org"라는 리소스에서 Base64 디코딩을 합니다.

key를 UTF8로 인코딩 한 뒤 MD5 hash를 통해 TripleDES ECB의 키로 사용하는 것을 볼 수 있습니다.

이후 디코딩 된 리소스를 실행하는 것 같습니다.




간단히 긁어와서 파일로 출력하게 했고 MZ 헤더가 보입니다.

또 .NET 파일입니다.


TO BE CONTINUE

반응형

주관적인 리버싱 공부 단계

1. 코딩

코딩 능력은 리버싱 뿐만 아니라 여러분이 해킹공부할때 거의 반드시 필요하게 되어 있다.

python 같은 언어는 배우기 쉽고 빠르게 응용할 수 있으므로(생산성이 좋다고 한다) 추천한다. 이미 다른 언어를 잘 사용할 수 있다면 그걸 계속 쓰는 것이 맞다. 리버싱을 공부하게 된다면 C언어 또한 배우는 것을 추천한다.

2. 어셈블리

어셈블리 언어가 어렵다고 하는데 이는 사람마다 다르다(마치 영어처럼). 하지만 리버싱을 공부하는 이상 어셈블리 언어는 반드시 공부해야 하는 것 중 하나이다.

어셈블리 언어는 아키텍쳐 마다 다르다. 하지만 우리가 쓰는 x86,x64를 위주로 공부하는 것이 좋다. 이후 다른 어셈블리 언어를 볼 때 도움이 될 수 있다.

어셈블리 언어는 어려워 보이지만 팁을 주자면 대부분 영어 약칭을 사용하는 경우가 많기에 꾸준히 보고 공부한다면 쉽게 외울 수 있을 것이다.

3. 분석

분석 능력을 키우는 것은 처음에는 너가 만든 프로그램을 직접 어셈블리 디버거로 분석해 보는 것이 좋다. 이후 디버거 정보를 제거한다던지 난이도를 높이면 좋다.

리버싱에서 분석 방법은 숲에서 나무로, 나무에서 숲으로 두 가지가 있을 수 있다. 이것은 너 마음대로 하면 되지만 분석하다 중요한 부분을 놓치면 안된다는 말을 전하고 싶다.

처음부터 IDA PRO 와 같은 프로그램을 사용하면 편하겠지만 가끔 분석이 안되는 것이 있을때도 있다(MIPS, 스택 범위 초과)

그때는 어셈을 가지고 분석해야 하므로 분석 능력을 배우는 것은 좋다.

4. 여러가지 안티 디버깅 공부, packer, 트릭들

몇 프로그램은 여러 안티 디버깅이 존재한다. 나도 이것 전체를 외우지 못했으며 간간히 찾아 보는 일이 있다. 하지만 IsDebuggerPresent와 같은 기본적인 부분은 공부해야 편할 것이다. 그리고 여러 트릭들은 문제를 풀어보며 배우는 것이 좋을 듯 하다

5. 인내 그리고 검색

아마도 제일 중요하지 싶다. 내가 삽질이라고 주위에 말하는 건데 리버싱은 삽질이 많이 필요할 때가 많다. 그래서 포기하지 않고 꾸준이 할 수 있는 인내심이 필요하다.

또한 리버싱을 공부하면 항상 모르는 부분이 나올 것이다. 그런건 검색을 해라 대부분 다른 분들이 미리 알아내서 정리해둔 글이 있을 것이다. 그리고 대부분 글은 영어다.




'Reversing > Etc' 카테고리의 다른 글

APK 정적 분석  (0) 2017.02.17
Angr 설치  (4) 2017.01.20
반응형

프로젝트에서 APK 정적 분석을 할 필요가 있어서 만들었던 문서


APK분석.pdf


'Reversing > Etc' 카테고리의 다른 글

주관적인 리버싱 공부 단계  (0) 2017.08.06
Angr 설치  (4) 2017.01.20
반응형

Angr는 python 기반으로 되어 있는 바이너리 동적 분석 도구로 Computer Security Lab at UC Santa Barbara에서 관리되어지고 있다.

AEG(Auto Exploit Generation)에서 Symbolic Execution에 속하는 도구라고 생각하면 된다.

따라서 CTF 리버싱 문제를 풀때 사용하면 편하게 풀 수 있다.


설치 홈페이지: http://angr.io/install.html

위 사이트를 통해 쉽게 설치할 수 있으나 나는 github에 있는 angr-dev를 통해 설치하는 것을 권장한다.

Angr는 많은 연산을 필요로 하는데 cpython으로 할시 엄청난 시간을 소비하게 된다.

따라서 Angr 문서에서도 Pypy를 사용하는 것을 추천하고 있다.


Pypy: http://pypy.org/download.html

나는 2.7 호환 버전을 다운받아 /opt/에 압축풀었다.


Root 권한을 추천한다.


# mkvirtualenv -p /opt/pypy/bin/pypy angr

# deactivate

# git clone https://github.com/angr/angr-dev

# cd angr-dev

# ./setup.sh -i -p angr


이후 workon angr를 사용해  angr를 사용하면 된다.

'Reversing > Etc' 카테고리의 다른 글

주관적인 리버싱 공부 단계  (0) 2017.08.06
APK 정적 분석  (0) 2017.02.17
반응형




OEP와 분기점의 OPCODE를 구하라고 합니다.


이번 문제는 ASPack이라는 팩커로 팩킹되어 있습니다.



RET까지 가다보면 OEP를 찾을 수 있습니다.

그다음 분기점은 문자열 찾기로 찾을 수 있습니다.



'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 09  (0) 2015.11.20
CodeEngn basic 08  (0) 2015.11.13
CodeEngn basic 07  (0) 2015.11.13
CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
반응형



파일은 일단 UPX로 팩킹되어있습니다.

언팩킹을 하게 될 경우 실행되지 않습니다.

이는 StolenByte와 연관이 있습니다.


StolenByte란 어떤 코드를 다른 곳에 옮겨 놓은것을 의미합니다.
우리는 언팩킹을 하고 난 뒤 실행이 안됬으므로 원래 OEP로 가는 도중에
StolenByte가 있을 확률이 높습니다.


보통 UPX는 popad를 한 뒤 바로 JMP를 하지만

여기에서는 몇 코드가 더 있습니다. 이것이 StolenByte입니다.

'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 10  (0) 2015.11.25
CodeEngn basic 08  (0) 2015.11.13
CodeEngn basic 07  (0) 2015.11.13
CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
반응형


UPX 팩킹되어 있습니다.

CodeEngn basic 6에 한 내용과 같습니다.





'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 10  (0) 2015.11.25
CodeEngn basic 09  (0) 2015.11.20
CodeEngn basic 07  (0) 2015.11.13
CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
반응형

바로 비밀번호 체크 루틴으로 들어왔습니다. 

BOOL WINAPI GetVolumeInformation(

_In_opt_ LPCTSTR lpRootPathName,

_Out_opt_ LPTSTR lpVolumeNameBuffer,

_In_ DWORD nVolumeNameSize,

_Out_opt_ LPDWORD lpVolumeSerialNumber,

_Out_opt_ LPDWORD lpMaximumComponentLength,

_Out_opt_ LPDWORD lpFileSystemFlags,

_Out_opt_ LPTSTR lpFileSystemNameBuffer,

_In_ DWORD nFileSystemNameSize

);

이중 0x040225C에 저장되는 VolumeNameBuffer는 

첫번째 볼륨의 이름이 저장됩니다.



위 루틴을 분석해보면


str = VolumName + 4562-ABEX

str앞 4글자 각각 2더함

Serial = L2C-5781 + str




'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 09  (0) 2015.11.20
CodeEngn basic 08  (0) 2015.11.13
CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
CodeEngn basic 04  (0) 2015.11.13
반응형


UPX 팩킹 되어 있음을 알 수 있습니다.

이번에는 OEP를 알아야 함으로 툴을 사용할 수 없습니다.

UPX는 언펙킹을하고 마지막에 원래 OEP로 가는 JMP문이 있는 특징이 있습니다.


OEP는 0x0401360 입니다.


DialogBoxParam API는 다이얼 로그를 표시하는 함수입니다.

INT_PTR WINAPI DialogBoxParam(

_In_opt_ HINSTANCE hInstance,

_In_ LPCTSTR lpTemplateName,

_In_opt_ HWND hWndParent,

_In_opt_ DLGPROC lpDialogFunc,

_In_ LPARAM dwInitParam

);

이중 lpDialogFunc가 중요합니다.



여기가 lpDialogFunc 주소 위치입니다.


F9로 실행하고 값을 넣고 실행하면



키를 찾을 수 있습니다.


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 08  (0) 2015.11.13
CodeEngn basic 07  (0) 2015.11.13
CodeEngn basic 05  (0) 2015.11.13
CodeEngn basic 04  (0) 2015.11.13
CodeEngn Basic 03  (0) 2015.11.13
반응형






UPX로 팩킹되어 있습니다.

UPX로 팩킹되어 있을경우 툴이나 디버깅으로 풀 수 있습니다.

저는 툴을 사용했습니다.



언팩킹한 파일로 열어서 문자열을 찾아보면0




'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn basic 07  (0) 2015.11.13
CodeEngn basic 06  (0) 2015.11.13
CodeEngn basic 04  (0) 2015.11.13
CodeEngn Basic 03  (0) 2015.11.13
CodeEngn Basic 02  (0) 2015.11.13

+ Recent posts