
ImHex müəllifi naməlum fayl formatının tərs mühəndisliyini göstərir
Açıq mənbəli ImHex hex redaktorunun müəllifi naməlum binar formatların tərs mühəndisliyi üzrə təlimat dərc edib; nümunə FEZ oyununun yaddaş faylıdır. Məqalə hər naməlum format üçün ümumi reseptlə yekunlaşır.
Açıq mənbəli ImHex hex redaktorunun müəllifi WerWolv naməlum binar fayl formatının tərs mühəndisliyini addım-addım izah edən təlimat dərc edib. Nümunə 2012-ci il istehsalı FEZ oyununun yaddaşa yazma faylıdır: xam baytlardan tutmuş ImHex-in Pattern Language dilində yazılmış tam təsvirə qədər. ImHex pulsuz və açıq mənbəlidir.
Dekompilyasiyadan düzgün funksiyaya
FEZ-in yaddaş məlumatları nə sıxılıb, nə şifrələnib, həm də fayl imzası yoxdur, ona görə faylı ilk baxışda tanıdan heç nə yoxdur. Oyun C# dilində yazıldığından JetBrains Rider kimi alətlər binar faylları demək olar ki, orijinal koda çevirir. Ən maraqlı yığmalar FEZ.exe, FezEngine.dll, Common.dll, ContentSerialization.dll və EasyStorage.dll olub. PCSaveDevice sinfində fayl adının "SaveSlot" və indeksdən qurulduğu görünür, Save() metodu isə 40 960 baytlıq (0xA000) buferi doldurur: əvvəlcə Windows FILETIME formatında cari vaxt, sonra yaddaş məlumatları yazılır, qısa fayllar sıfırlarla tamamlanır, daha böyükləri isə xəta verir. Zənciri SaveFileOperations.Write-a qədər izləmək seriyalaşdırılan bütün sahələri üzə çıxarır: oxuyucunun 6 olmasını tələb etdiyi versiya nömrəsi, yaradılma vaxt möhürləri və New Game Plus bayraqları.
ImHex-də pattern qurmaq
Pattern Language-də müəllif strukturu sıfır ofsetinə yerləşdirir, kodun real tətbiqə bənzəməsi üçün tip ləqəbləri yazır və vaxt möhürünün oxunaqlı tarix kimi görünməsi üçün standart kitabxanadan FILETIME tipini idxal edir. Məlum olur ki, sətirlərin uzunluğu 7 bitlik kodlaşdırma ilə yazılıb; müəllif bunu davam biti sıfırlanana qədər bayt oxuyan dövrlə həyata keçirir və dəyərin interfeysdə görünməsi üçün format və transform atributlarını əlavə edir. Obyektlər seçimli dəyərdən əvvəl məntiqi bayraq saxlayan nullable sarğılar, siyahılar say ön ştamplı massivlər kimi modelləşdirilir, enum-lar isə C#-dan demək olar ki, olduğu kimi köçürülür. Sonda faylın sondakı doldurma istisna olmaqla hər baytı açılmış olur və dəyərləri interfeysdən birbaşa redaktə etmək mümkündür.
Naməlum formatlar üçün ümumi resept
Yekunda müəllif iş axınını ümumiləşdirir: əvvəlcə formatın artıq tanınan olub-olmadığını yoxlayın — ImHex-in magic aşkarlaması və binwalk kimi alətlər kömək edir, sənədləşdirilmiş formatlar üçün hazır parserlər ola bilər. Sonra faylı oxuyan və ya yaradan kodu tapın: dilə uyğun alətlə dekompilyasiya edin — .NET üçün Rider, nativ kod üçün Ghidra, IDA və ya Binary Ninja, JVM dilləri üçün Recaf — fayl giriş-çıxış çağırışlarını və ya fayl adını ehtiva edən sətirləri axtarın. Daha sonra tikinti bloklarını müəyyənləşdirin: tam ədədlər, məntiqi dəyərlər, sətirlər və verilənlər strukturları. Tapıntılarınızı sənədləşdirən və yoxlayan pattern faylı yazın.
Hər proqram FEZ qədər asan təhlil olunmayacaq, müəllif bunu qəbul edir, amma yanaşma dəyişmir. Tam pattern məqalə ilə birlikdə dərc olunub, sualları isə ImHex-in Discord serverində cavablandırırlar.
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.