• Eğitim sadece okula gitmek ve bir derece kazanmakla ilgili değildir. Bilginizi genişletmek ve yaşam hakkındaki gerçeği almakla ilgilidir. – Shakuntala Devi

Eski bir Mac OS X x86 32 bit ikili dosya için garip giriş noktası

Mac OS X için eski bir oyuna tersine mühendislik uygulamak istedim ancak giriş noktasının diğer koda nasıl atladığını anlayamıyorum. İkili dosya bir x86 Macho-O yürütülebilir dosyasıdır ve Detect it Easy'ye göre Mac OS SDK 10.5.8 ile derlenmiştir. İlgili söküm işleminin ekran görüntülerini Ghidra'dan ekledim.

Giriş noktası döngü yapıyor gibi görünüyor, ancak 0xa747'deki talimat, bunun gibi bir kullanıcı alanı ikilisinde tuhaf bulduğum önceki talimatlara hizasız bir şekilde geri dönüyor. Bu bağlamda ARPL'yi görmek de tuhaf. Ve gerçekten tuhaf olan şey, bu ilk bloğun dışında hiçbir JMP veya CALL olmamasıdır. Bazı dinamik bağlantı kurnazlıkları beklerdim, ancak giriş noktası yalnızca okunan ve çalıştırılan .__TEXT,.__text dosyasında yer alıyor, dolayısıyla bu bölümdeki herhangi bir şeyi doğrudan değiştirmek de oldukça standart dışı ve muhtemelen mümkün değil.

Başlangıç, Mac OS X 10.5.8'de ( https://opensource.apple.com/source/Csu/Csu-75/start.s.auto.html ) kullanılan Apple Csu'daki start.s ile eşleşiyor gibi görünüyor. kaynak dosyada ilk çağrı ve ikili dosyamda 0xa730.

Belki Mac OS X'e aşina olan biri bu modeli tanıyabilir veya bunun gibi bir ikili dosyanın nasıl yürütülebileceğine dair fikir verebilir?

LAB_0000a704 XREF[1]: entry:0000a739(j)
0000a704 da 8f 9c FIMUL dword ptr [EDI + 0xcc33f09c]
f0 33 cc
0000a70a 63 c6 ARPL SI,param_1
0000a70c ff ?? FFh
0000a70d 90 ?? 90h
0000a70e 90 ?? 90h
0000a70f 90 ?? 90h
**************************************************************
* FUNCTION *
**************************************************************
undefined __regparm3 entry(void)
undefined AL:1 <RETURN>
undefined4 Stack[0x0]:4 local_res0 XREF[1]: 0000a71a(R)
undefined4 Stack[-0x1c]:4 local_1c XREF[1]: 0000a724(W)
undefined4 Stack[-0x20]:4 local_20 XREF[1]: 0000a71d(*)
entry XREF[1]: Entry Point(*)
0000a710 6a 00 PUSH 0x0
0000a712 89 e5 MOV EBP,ESP
0000a714 83 e4 f0 AND ESP,0xfffffff0
0000a717 83 ec 10 SUB ESP,0x10
LAB_0000a71a+1 XREF[0,1]: 0000a747(j)
0000a71a 8b 5d 04 MOV EBX,dword ptr [EBP + local_res0]
0000a71d 89 5c 24 00 MOV dword ptr [ESP]=>local_20,EBX
0000a721 8d 4d 08 LEA ECX=>Stack[0x4],[EBP + 0x8]
0000a724 89 4c 24 04 MOV dword ptr [ESP + local_1c],ECX
0000a728 83 c3 01 ADD EBX,0x1
0000a72b c1 e3 02 SHL EBX,0x2
0000a72e 01 cb ADD EBX,ECX
0000a730 53 PUSH EBX
0000a731 d3 b8 31 SAR dword ptr [EAX + 0x9c8e3231],CL
32 8e 9c
0000a737 39 da CMP EDX,EBX
0000a739 7b c9 JNP LAB_0000a704
0000a73b b0 3f MOV AL,0x3f
0000a73d d8 ca FMUL ST2
0000a73f 6a 59 PUSH 0x59
0000a741 63 b0 b2 ARPL word ptr [EAX + 0x1783afb2],SI
af 83 17
0000a747 7c d2 JL LAB_0000a71a+1
0000a749 04 c1 ADD AL,0xc1
0000a74b 29 53 ba SUB dword ptr [EBX + -0x46],EDX
0000a74e f4 HLT

IvDpe.png
 
Geri
Üst