์ปดํจํฐ๊ฐ ์ซ์๋ฅผ ์ฝ๋ ๋ฐฉ์
๋น
์๋์
๋ฆฌํ์๋์
nibble (4bit) :
CHAR (1byte) : 1A 2B EC 56
WORD (2byte) : 1A 2B EC 56
DWORD (4byte) : 1A 2B EC 56
--> ๋ฆฌํ ์๋์์ผ๋ก ์ฝ์ ์
CHAR (1byte) : 56 EC 2B 1A
WORD (2byte) : EC 56 1A 2B
DWORD (4byte) : EC 56 1A 2B
ollydbg
0000 0000 ~ FFFF FFFF (32bit)
00000000 00000000 ~ FFFFFFFF FFFFFFFF (64bit)
๋ชจ๋ ๋ช
๋ น์ด์ ๊ตฌ์กฐ๋
OPcode + Operand๋ก ์ด๋ฃจ์ด์ ธ ์๋ค
(์คํ ๋ช
๋ น) + (์ฃผ์)
cd /etc/networks/interface
vi ./test.txt
mv ./test.txt ../test.txt ==> Opcode + Operand + Operand
Opcode + Operand + Operand + Operand
CPU ์ ๋ถ์ด์๋ ์ ์ฅ์ฅ์น : ๋ ์ง์คํฐ
1) ๋ฒ์ฉ ๋ ์ง์คํฐ
1-1) ์ฐ์ ๋ ์ง์คํฐ
- AX(Accumulation) ๋์ฐ๊ธฐ, ๋ฆฌํด๊ฐ
- BX(Base) ์ฃผ์ ์ง์
- CX(Counter) ๋ฐ๋ณต๋ฌธ
- DX(Data) AX ๋ณด์กฐ
1-2) ์ธ๋ฑ์ค ๋ ์ง์คํฐ
- SI DI
1-3) ํฌ์ธํฐ ๋ ์ง์คํฐ***
- SP BP IP(๋ค์ ์คํํ ๋ช
๋ น์ด ์ฃผ์)
2) ํ๋ ๊ทธ ๋ ์ง์คํฐ
Zero Flag : ์ฐ์ฐ๊ฐ์ด 0์ผ ๊ฒฝ์ฐ 1๋ก ์ค์ ๋๋ค.
Carry Flag : ์ฐ์ฐ๊ฐ์ ์ฌ๋ฆผ ๋ฐ ๋น๋ฆผ์ด ์์ ๊ฒฝ์ฐ 1๋ก ์ค์ ๋๋ค
Sign Flag : ์ฐ์ฐ๊ฐ์ ์ต์์ ๋นํธ๊ฐ 1์ผ ๊ฒฝ์ฐ 1๋ก ์ค์ ๋๋ค.
์์ E๊ฐ ๋ถ์ผ๋ฉด 32bit ํ๋ก๊ทธ๋จ
์์ R์ด ๋ถ์ผ๋ฉด 64bit ํ๋ก๊ทธ๋จ
ollydbg ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
์คํ
F7(ํ์ค ์คํ, ์ธ๋ถํญ๋ชฉ O)
F8(ํ์ค ์คํ, ์ธ๋ถํญ๋ชฉ X)
F9(์ ์ฒด ์คํ)
๋ค์ ์์
Ctrl + F2
BreakPoint
F2
์คํ์ ํ์ ๋ BP์์ ๋ฉ์ถ๋๋ก ์ค์
00401144์์ ํ๋ก์ธ์ค ์ํ๊ฐ ๋๊ธฐ๋ก ๋ณ๊ฒฝ
if( 1 == 2 ){
asdfsadfsadfsdaf
}
==> ๋ฆฌ๋ฒ์ฑ์ ํ๋ฉด
cmp [0000 0001] A // [0000 0010] B
A-B = ๊ฐ์ด 0์ด๋ฉด ๊ฐ์๊ฑฐ์ผ
A-B = ๊ฐ์ด 0์ด๋ฉด Zero Flag๊ฐ ์ฌ๋ผ์ค๋๊ฑฐ์ผ
jmp -> ํด๋น ์ฃผ์๋ก ์ ํํ์์ค
jnz ->
1000 + 1000 = 0000
Carry Flag๊ฐ 1๋ก ์ฌ๋ผ๊ฐ๋ค
--> 0001 0000
STACK : 0019FF2C [00401149]
CALL ํจ์๋ฅผ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ ๋ค์ ์ฃผ์๊ฐ Stack์ ์ ์ฅ์ด ๋๋ฉฐ,
RET์ ํตํด์ ์ ์ฅ๋ ์ฃผ์๋ก ๋ณต๊ท๊ฐ ๋๋ค.