본문 바로가기

Reversing

x64dbgpy Example1

개요

 

x64dbg를 이용하여 악성코드를 분석하는데, JMP문을 반복적으로 사용하여 분석에 난항을 겪었다.

명령어를 실행할 때마다 해당 명령어를 일일히 손으로 기록할 수는 없었다.

이 작업을 자동화할 방법이 필요했고 x64dbgpy를 사용하게 되었다.

 

문제 해결

 

asm.txt 라는 파일을 생성하여 EIP 레지스터의 값이 0x238240이 될 때까지 작업을 반복하는 코드를 작성했다.

DISASM_INSTR 클래스로 객체를 생성한 후, DbgDisasmAt 함수를 호출하여 디스어셈블한 내용을 파일에 저장한다.

 

try:
	from x64dbgpy import *
	f = open("C:\\Users\\forgotten\\Desktop\\asm.txt", "w")
	while pluginsdk.GetEIP() != 0x238240:
		c_eip = pluginsdk.GetEIP()
		ins =  pluginsdk.x64dbg.DISASM_INSTR()
		pluginsdk.x64dbg.DbgDisasmAt(c_eip,ins)
		f.write(ins.instruction + "\n")
		pluginsdk.StepOver()
	f.close()
except:
	print("except!")

 

결과를 보면 쓸데없이 jmp 명령어가 차지하는 비중이 크다는 느낌을 받을 것이다.

 

jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
jmp 0x002380EE
jmp 0x00238201
add ecx, 0x554E0F85
jmp 0x0023812D
jmp 0x002381C3
xor dword ptr ds:[edx], ecx
jmp 0x00238010
jmp 0x002380C7
add edx, 0x4
nop
jmp 0x002380D1
jmp 0x002380D5
jmp 0x00238117
jmp 0x00238238

 

jmp 명령어를 필터링하면 어떤 연산을 하고 있는지 좀 더 편하게 확인할 수 있다.

(edx가 가르키는 주소를 ecx 레지스터를 이용하여 반복적으로 xor 연산해주고 있다.)

 

jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
add ecx, 0x554E0F85
xor dword ptr ds:[edx], ecx
add edx, 0x4
nop
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
add ecx, 0x554E0F85
xor dword ptr ds:[edx], ecx
add edx, 0x4
nop
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
add ecx, 0x554E0F85
xor dword ptr ds:[edx], ecx
add edx, 0x4
nop
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
add ecx, 0x554E0F85
xor dword ptr ds:[edx], ecx
add edx, 0x4
nop
cmp edx, ebp
jb 0x00238069
imul ecx, ecx, 0x2B275ABB
imul ecx, ecx, 0x2B275ABB
add ecx, 0x554E0F85
xor dword ptr ds:[edx], ecx
add edx, 0x4
nop
cmp edx, ebp
jb 0x00238069

 

참조

 

github.com/schlafwandler/x64dbgpy_cheat_sheet

forum.tuts4you.com/topic/39577-dbgdisasmat-other-method/

blog.attify.com/flare-on-5-writeup-part6/

 

'Reversing' 카테고리의 다른 글

thiscall 마이크로소프트 설명  (0) 2021.06.26
xdbg 및 x64dbgpy 설치 및 실행  (0) 2021.01.04