2014-10-29 2 views
0

지난 2 개월 동안 나는 기본적인 리버스 엔지니어링, 어셈블리 및 C를 배웠다. 나는 친구로부터 바이너리를 얻었다. 그들은 그 바이너리를 원래의 소스로 되 돌리라고했습니다. 나는 이진 파일을 되돌릴 IDA Pro를 사용하지만, 나는 다음이 지침에 약간의 문제가 있습니다이 지침의 의미는 무엇입니까?

mov  [esp+230h+var_218], 74654D5Fh 
mov  [esp+230h+var_214], 754D6C61h 
mov  [esp+230h+var_210], 6873696Ch 
mov  [esp+230h+var_20C], 5F61h 

난의 진수를 검색하려고하지만 난 어떤 결과를 찾을 수 없습니다. 누군가 설명 할 수 있습니까?

+0

"Hello world"또는 그 변형입니다. ASCII로 읽으십시오. –

+0

코멘트 주셔서 감사합니다, 나는 그것이 무엇을 의미 찾을 수 있습니다 .. 덕분에 –

+0

* 원래의 소스로 바이너리를 반대로 * 불가능합니다. 주석을 전혀 복구 할 수없고 디버그 기호가 없으면 원래 변수 이름조차 복구 할 수 없습니다. 여러분이 할 수있는 최선의 방법은 기본적으로 여러분 자신의 주석과 의미있는 변수 이름으로 원래의 소스를 다시 쓰는 것입니다. –

답변

1

x86은 거의 엔디안이 아니므로, 읽으려면 dword 리터럴의 오른쪽에서 왼쪽으로 시작하십시오.

문자열의 길이는 "_MetalMulisha_"입니다.

1

Lord Kale XI's answer을 정교하기 위해, x86은 little endian archiecture이다. 이는 실제로 다중 바이트 정수 바이트를, 즉 최하위 바이트가 먼저 저장한다는 의미입니다. 필자가 제공 한 링크는 이것이 어떻게 작동하는지 잘 설명합니다.

따라서이 지침에서는 정수 74654D5Fh을 메모리의 어딘가에 먼저 이동합니다. 순서대로 이것은 실제로 바이트 5F 4D 65 74을 씁니다. 그런 다음 754D6C61h다음에에 쓰고 메모리에 4 바이트를 쓰면 61 6C 4D 75 등으로 기록됩니다. 그럼

0x74654D5F  0x754D6C61  0x6873696C  0x00005F61 
     |    |    |    | 
     V    V    V    V 
[ var_218 ] [ var_214 ] [ var_210 ] [ var_20C ] 
5F 4D 65 74 61 6C 4D 75 6C 69 73 68 61 5F 00 00 
'_' 'M' 'e' 't' 'a' 'l' 'M' 'u' 'l' 'i' 's' 'h' 'a' '_' '\0' '\0' 

,이 지침은 null로 끝나는 문자열을 쓰고 무엇을하고 있는지 : 다음 지시 후

는, 메모리는 ASCII 문자로 해석 될 수있는 각각의 바이트의 다음 순서를 포함 _MetalMulisha_var_218에서 시작하는 메모리입니다.