E9 xxxxxxxx
FF E0
FF 25
E8 == > relative call
absolute CALL
FF 15 ==> 포인터 참조
FF 16
__asm
{
call dword ptr [eax]
}
이런 식의 구현에서 call dword ptr [eax] 는 FF 90 00000000 로 표현된다.
FF 90 01000000 이었으면 call dword ptr [eax+1] 이고,
절대 주소를 사용하지 않는다.
jmp + label 형태로.
__asm
{
push label2
mov eax, 0x004030FC // call function addr
mov eax, [eax]
jmp eax
label2:
add esp,8
}
여기선 label 2 때문에 절대 주소를 사용해야 한다.
004019CD 68 DB 19 40 00 push offset label2 (4019DBh)
004019D2 B8 FC 30 40 00 mov eax,offset __imp__calloc (4030FCh)
004019D7 8B 00 mov eax,dword ptr [eax]
004019D9 FF E0 jmp eax
label2:
004019DB 83 C4 08 add esp,8
004019DE 89 45 F4 mov dword ptr [_Out],eax
함수 호출 시 환경에 관계없이 동작하는 윈도우즈 쉘코드 동작에 필요해서 써둠.
함수 주소가 계속 바뀌어대는 통에
'Research > Writting' 카테고리의 다른 글
[Writing] Linewar Sweep / Recursive Traversal Disassembling (0) | 2014.07.17 |
---|---|
[작성중] IDA FLAIR 를 사용한 심볼 리커버리 (0) | 2014.05.21 |
[작성중] Reflective DLL injection (0) | 2013.07.23 |
[작성중] Inline Code Patch (0) | 2013.07.19 |
[작성중] BreakPoint :: INT 1 vs INT 3 (0) | 2013.07.15 |