2014-04-30 8 views
-1

파이썬 스크립트에 바이트를 입력해야합니다. 나는이 어셈블리에서 레지스터 %의 EBX에서 10 바이트의 오프셋을 수행해야합니다null없는 쉘 코드 - 등록 오프셋 10 바이트

89 43 0a 
mov $eax,0xa(%ebx) 

나는이 스크립트를 실행할 때, 내가 파일에 이러한 바이트 (및 기타) 덤프 언급한다. 그런 다음 파일의 내용이 스택에 삽입하는 데 사용하는 쉘 코드가됩니다. 이 문제는 C 함수 strcpy가 0x0a를 볼 때 null 종결 자라고 생각하여 복사를 중지합니다.

왜 이런 일이 발생하는지 알지만 0x0a (널 종결 자 값)를 사용하지 않고 쉘 코드를 10 바이트 오프셋으로 해석하도록하려면 어떻게해야합니까? 예를 들어 0a 값을 08로 변경하면 원하는대로 작동합니다 (오프셋이 8 바이트 인 경우).

는 파이썬 스크립트는 다음과 같습니다 : 그것은 그것을 할 사소한, 그냥 어느 것도 두 부분으로 분할 것

print "\x89\x43\x0a" 
+0

여전히 stdout에 '0a'바이트를 쓰고 있습니다. 나는 당신이 여기에서하려고하는 것을 확신하지 못한다. –

+0

라인 피드로 해석되는 것은 무엇입니까? 텍스트로 읽혀질 경우 바이트 0A - 텍스트 편집기에서 터미널로 인쇄되거나 무엇이든 - 줄 바꿈입니다. 바이너리 (예 : 16 진수 편집기 또는 기계 코드)로 읽는 경우 필요에 따라 0A로 표시됩니다. – neil

+2

[Null-free shellcode] (http://en.wikipedia.org/wiki/Shellcode#Null-free_shellcode)라고 쓰고 싶다. –

답변

0

0 또는 10 :

예를 들면 :

add $5, %ebx 
mov %eax, 5(%ebx) 
sub $5, %ebx # optional: restore ebx 
+0

고마워요! 내가 필요한 것. – Alex