Zostałem poproszony o krótki tutorial, jak załadować moduł (w szczególności chodzi o nk.exe) do IDA Pro.
1. Przygotowujemy sobie plac boju. Rozbieramy XIPa przy pomocy XIPPort i spisujemy sobie wartości:
ulRAMStart,
ulRAMEnd,
physfirst oraz
physlast z pliku
ROMHDR.txt oraz
o32[0].o32_realaddr i
o32[0].o32_psize z pliku
MODULES\nk.exe\imageinfo.txt.
2. Otwieramy IDA Pro, klikamy
File->Open i nawigujemy do pliku
MODULES\nk.exe\S000:
3. Zmieniamy rodzinę procesora na
ARM:
4. Następny krok jest najważniejszy i decydujący o powodzeniu i pomyślnej deasemblacji: ustawiamy wartości relokacji:
RAM start:
ulRAMStartRAM size:
ulRAMEnd - ulRAMStartROM start:
physfirstROM size:
physlast - physfirstloading address:
physfirst + o32[0].o32_realaddrfile offset:
0loading size:
o32[0].o32_psize5. Po pierwszym przebiegu na razie otrzymujemy bełkot... otwieramy opcje
Options->General, klikamy
Kernel options 1 i zaznaczamy opcję
"Make final analysis pass":
6. W oknie opcji klikamy Reanalyze program:
7. Po odczekaniu, otrzymujemy piękny kod, o który nam chodziło:
Zastosowania? Wszelakie, w zasadzie...

Jako przykład podam, jak odnaleźć miejsce, o którym
cmonex pisała w kontekście zmiany
ulRAMEnd.
Wciskamy Alt+T i wpisujemy ciąg
#0x uzupełniony o nasz aktualny adres ulRAMEnd:
Po
dłuższej chwili odnajdujemy definicję tej wartości w kodzie oraz miejsce w kodzie, które się do tej wartości odwołuje. Dwuklik na referencji przenosi nasz w miejsce, gdzie wartość ta jest użyta:
ROM:8001A790 LDR LR, =dword_802C7734 ; Load from Memory
ROM:8001A794 LDR R5, =dword_802B3D10 ; Load from Memory
ROM:8001A798 LDR R6, =dword_802B6044 ; Load from Memory
ROM:8001A79C LDR R1, =loc_8002826C ; Load from Memory
ROM:8001A7A0 LDR R0, =dword_802B38AC ; Load from Memory
ROM:8001A7A4 LDR R4, =dword_802B6058 ; Load from Memory
ROM:8001A7A8 MOV R3, #0xA10 ; Rd = Op2
ROM:8001A7AC MOV R2, #dword_83000000 ; załadowanie ulRAMEnd
ROM:8001A7B0 ORR R3, R3, #1 ; Rd = Op2 | Op1
ROM:8001A7B4 ORR R2, R2, #0xA00000 ; Rd = Op2 | Op1
ROM:8001A7B8 MOV R7, #0x40 ; Rd = Op2
ROM:8001A7BC MOV R8, #1 ; Rd = Op2
ROM:8001A7C0 STR R7, [LR] ; Store to Memory
ROM:8001A7C4 STR R3, [R5] ; Store to Memory
ROM:8001A7C8 STR R1, [R6] ; Store to Memory
ROM:8001A7CC STR R2, [R0] ; Store to Memory
ROM:8001A7D0 STR R8, [R4] ; Store to Memory
ROM:8001A7D4 BL sub_800230EC ; Branch with Link
Powodzenia przy zabawie z jądrem!
(
pun intended... 
)