System - Assembly Handray
0x0300 : Study/0x0301 : SystemAssembly Handray?
어셈블리 헨드레이란 어셈블리어를 c 언어로 복원시키는 것을 의미.
Assembly Instruction.
기본적인 어셈블리 명령어를 ArABoJa.
push : 스택에 특정 값을 넣고 ESP -4
pop : 특정 값에 ESP가 가리키는 값을 넣고 ESP + 4
nop : 아무것도 하지 않는다.
mov a, b : b를 A에 복사한다. ( a=b )
lea a, [b] : b의 주소에 있는 값을 a에 복사. ( a=*b )
cmp a, b : a와 b를 비교한다.
a > b ZF = 0 CF = 1
a < b ZF = 0 CF = 0
a == b ZF = 1 CF = 0
add a, b : a와 b를 더해서 a에 결과를 넣는다. ( a+= b )
sub a, b : a와 b를 빼서 a에 결과를 넣음. ( a -= b )
imul a, b : a와 b를 곱해서 a에 넣음. ( a *= b )
xor a, b : a와 b를 xor 연산을 하여 a에 넣는다. ( a xor b )
inc a : a에 1 더함 ( a += 1 )
dec a : a에 1 뺌 ( a -= 1 )
je : 비교 값이 같은 경우 ( ZF = 1 )일때 점프한다.
jne : 비교 값이 다를 경우 ( ZF = 0 )일때 점프.
call : 해당 프로시저를 호출 (리턴값이 스택에 저장)
jmp : 해당 주소로 점프
// nop 명령어는 나중에 nop sled 기법으로 공부하면서 다시 언급 하자.
Handray!
// 시작하기전에 http://shayete.tistory.com/ 이사람 에서 공부한다. 그니깐 내가 끄적이는 것보다 저기를 추천함.
// 나는 저사람 블로그를 보고 공부한 내용을 서술하는 것 이다.. 문제되면 보호해서 암호화 할 계획.
ebp + 8 이상의 값이면 함수의 인자를 나타냄.
// int add (ebp + 8 , ebp + c , ebp + 10 )
// 3개의 함수의 인자가 나타남..
ebp - 4 , esp + 8 이상의 값은 지역변수이다.
숫자가 높을수록 가장 먼저 선언된 변수 !
mov x, y는 간단하게 x=y 이며 이게 lea x, [y] 와 같은 소리다.
인자 앞에 BYTE, WORD , DWORD 가 붙은 건 각각 1, 2, 4byte 임을 의미한다.
함수 프롤로그 밑에 sub x 가 있다는 것은 x 만큼 지역 변수가 선언해 있다는 것을 의미한다.
call x는 x라는 함수를 부른다는 뜻 인데 call 위에 보면 esp , esp + 4 , esp + 8 이 보인다. 이것은 각각 함수의 첫번째 인자 , 두번째 인자, 세번째 인자를 뜻한다.
for를 예시로 들어보자.
1 mov ebp - 0x8 , 0x0
2 cmp ebp - 0x8 , 0x9
3 add ebp - 0x8 , 0x1
2번줄 까지에 내용은 인자를 초기화 시키고 인자를 비교하는 것을 의미한다. 쭉 명령어를 실행시키고 3번째 부분에선 연산을 수행한다.
즉 ebp값이 0부터 8보다 같거나 9보다 클때 까지 1을 더한다는 의미가 된다...(맞나?)아몰랑 ^ㅡ^
// 이후 예시는 따로 참고 안함.
// 문제풀때 바로 걍 써먹었다.
" 출처 : http://shayete.tistory.com/ "
'0x0300 : Study > 0x0301 : System' 카테고리의 다른 글
생각난김에 쓴 심볼릭 링크 (0) | 2016.07.19 |
---|---|
System - Return To Library (0) | 2016.06.30 |
System - stack? gdb? (0) | 2016.06.12 |
System - 시스템해킹이란? (0) | 2016.06.12 |
Egg Shell (0) | 2016.06.07 |