728x90
한줄씩 차근차근 해보겠다.
[Register]
rcx = 0
rdx = 0
rsi = 0x400000
=======================
[Memory]
0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10
0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x43 0x55 0x5d
0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c
0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00
=======================
[code]
1: mov dl, BYTE PTR[rsi+rcx] // dl = 0x67
2: xor dl, 0x30 // 0x57
3: mov BYTE PTR[rsi+rcx], dl // PTR[0x400000] = 0x57
4: inc rcx // rcx = 0x1
5: cmp rcx, 0x19 // 0x1 < 0x19
6: jg end
7: jmp 1 // 1번으로 복귀
먼저 BYTE PTR[rsi+rcx] 값은 0x400000값의 0x67이 될 것이다.
이 값을 dl과 xor연산하면 0x57이 나오고 다시 이 값을 메모리에 저장한다.
그리고 rcx를 1증가시키고 0x19와 비교연산하는데 rcx가 0x20이 될때 0x19보다 커지면서 종료되므로 주소값 0x400019까지 xor연산을 할것이다 그래서 0x400019까지 xor연산한 값을 보면은
[Memory]
0x400000 | 0x57 0x65 0x6c 0x63 0x6f 0x6d 0x65 0x20
0x400008 | 0x74 0x6f 0x20 0x61 0x73 0x73 0x65 0x6d
0x400010 | 0x62 0x6c 0x79 0x20 0x77 0x6f 0x72 0x6c
0x400018 | 0x64 0x11 0x00 0x00 0x00 0x00 0x00 0x00
이를 아스키 값으로 변환하면 Welcome to assembly world! 가 나온다.
728x90
반응형
'Reversing > DreamHack' 카테고리의 다른 글
드림핵 rev-basic-3 풀이 (0) | 2023.12.01 |
---|---|
드림핵 Quiz: x86 Assembly 3 풀이 (2) | 2023.11.29 |