PEframe ile Şüpheli Kodlar Üzerinde Statik Analiz

PEframe ile Şüpheli Kodlar Üzerinde Statik Analiz
[EXHIBIT_A] Featured evidence

Bir adli bilişim uzmanı olarak bazı durumlarda incelenen olay ile ilgili analiz edilen bilgisayarda yer alan şüpheli kodlar üzerinde bu kodun yeteneklerini ortaya çıkartacak ve sistem üzerinde ne tür izler bıraktığının tespitine imkan tanıyacak analizler yapmamız gerekiyor. Bunun için de elde ettiğimiz şüpheli kodlar üzerinde hem statik hem de dinamik olmak üzere bir takım analizler yaparız. Statik analiz adımları şüpheli kodları çalıştırmadan ilgili kod hakkında detaylı bilgi elde etmemize imkan tanıyan adımlar olup genellikle zararlı kod analizinin ilk aşamalarını oluşturur. Örneğin şüpheli kod üzerinde herhangi bir packer kullanılmış mı, hangi fonksiyonlar import edilmiş, şüpheli kod kaç bölümden oluşuyor gibi soruların cevapları statik analiz ile bulunmaya çalışılır. Bu analiz yöntemi için kullanabileceğimiz bir çok yardımcı araç mevcut fakat ben bu yazıda bir çok statik analiz işlemi için kullanabileceğimiz bir frameworkden bahsedeceğim.

PEframe olarak isimlendirilen ve Python ile geliştirilen bu yazılım ile Windows'un çalıştırılabilir dosya formatı olan PE (Portable Executable) formatındaki dosyalar üzerinde kolaylıkla bir takın statik analiz işlemlerini gerçekleştirebilirsiniz. PEframe uygulamasına https://github.com/guelfoweb/peframe adresinden ulaşabilirsiniz. Bu adresten uygulamayı indirdikten sonra aşağıdaki şekilde çalıştırarak uygulamanın neler yapabildiği konusunda bilgi sahibi olabilirsiniz.

exhibit_viewer.exe
PEframe
[EXHIBIT] PEframe

Yukarıda listelenen seçeneklerden de görülebileceği üzere PE formatındaki çalıştırılabilir dosyalar üzerinde bir çok analizi kolaylıkla gerçekleştirebiliyoruz. Örneğin aşağıdaki şekilde bir kullanım ile ilgili şüpheli kod tarafından import edilen DLL ve fonksiyonların listesini elde edebiliyoruz.

BASH
1localhost:peframe halilozturkci$ python peframe.py –import ../SupheliDosyalar/SupheliDosya02.exe 
2 Imported [8] DLL and [10] Functions
3 ————————————————————
4 KERNEL32.DLL       0x4bcbf8 LoadLibraryA
5 KERNEL32.DLL       0x4bcbfc GetProcAddress
6 KERNEL32.DLL       0x4bcc00 ExitProcess
7 advapi32.dll       0x4bcc08 RegCloseKey
8 comctl32.dll       0x4bcc10 ImageList_Add
9 gdi32.dll          0x4bcc18 SaveDC
10 oleaut32.dll       0x4bcc20 VariantCopy
11 URLMON.DLL         0x4bcc28 HlinkNavigateString
12 user32.dll         0x4bcc30 GetDC
13 version.dll        0x4bcc38 VerQueryValueA
14 localhost:peframe halilozturkci$

Aşağıdaki şekilde bir kullanımda ise ilgili PE dosyasındaki bölümler hakkında bilgi sahibi olabiliyoruz. Çıktıdan da görülebileceği üzere ilgili PE dosyasında UPX0, UPX1 ve .rsrc isimli üç section yer alıyor. Bu bölümler ile ilgili olarak PEframe tarafından bize sağlanan güzel özelliklerden birisi de ilgili bölümün şüpheli olup olmadığının bize bildirilmesi. Aşağıdaki çıktıda yer alan Suspicious kısmında Yes ifadesinin yer alması ilgili bölümün şüpheli bir kod parçası içerdiğini gösteriyor.

BASH
1localhost:peframe halilozturkci$ python peframe.py –sections ../SupheliDosyalar/SupheliDosya02.exe 
2 Sections discovered [3]
3 ————————————————————
4 Section           UPX0
5 Hash MD5           d41d8cd98f00b204e9800998ecf8427e
6 Hash SHA-1         da39a3ee5e6b4b0d3255bfef95601890afd80709
7 VirtualAddress     0x1000
8 VirtualSize        0x72000
9 SizeofRawData      0
10 Suspicious         Yes
11 Section           UPX1
12 Hash MD5           097ae2a32f34860a4acf0516217c755e
13 Hash SHA-1         224c0e8996938c8a123181e05800df8276fa90dc
14 VirtualAddress     0x73000
15 VirtualSize        0x31000
16 SizeofRawData      200704
17 Suspicious         Yes
18 Section           .rsrc
19 Hash MD5           36050d3c8f469e28dedcd8be928b93af
20 Hash SHA-1         9d4cb29f828da19633a3034a4b95c4478bb95df5
21 VirtualAddress     0xa4000
22 VirtualSize        0x19000
23 SizeofRawData      101888
24 Suspicious         No
25 localhost:peframe halilozturkci$

Herhangi bir parametre belirtilmeden PEframe'i kullandığınızda ise karşınıza aşağıdaki tabloda yer alan çıktıdaki gibi bilgiler çıkar. Bu bilgilerden Packer ifadesinin karşısında Yes ibaresinin yer alması ilgili kod üzerinde bir packer kullanıldığını, Anti Debug ifadesinin karşısında Yes ibaresinin yer alması ilgili kod üzerinde debug edilmeyi zorlaştıran tekniklerin kullanıldığını, Anti VM ifadesinin karşısında Yes ibaresinin yer alması ise zararlı kodun sanal bilgisayarlarda çalışmasını engelleyen tekniklerin ilgili kod içinde yer aldığını gösterir. Bunların her birinin detayları ise yine aynı çıktıda özet kısmının altında kendi başlıkları ile yer alır. Örnek bir çıktı aşağıda gösterilmiştir. Çıktıdan da görülebileceği üzere elimizdeki şüpheli kodda packer olarak Microsoft Visual C++ v7.0 kullanılmış, IsDebuggerPresent ve OutputDebugStringA fonksiyonları ile uygulamanın debug edilip edilmediğini anlamaya imkan tanıyacak iki farklı fonksiyon ile Anti Debug özelliği kazandırılmıştır. Bunun yanında şüpheli bulunan API'ler de yine aşağıdaki çıktıda listelenmiştir. En son olarak da ilgili uygulamanın metadata kısmı olarak isimlendirebileceğimiz ve bu uygulamanın ne zaman derlendiği, orjinal isminin ne olduğu gibi bilgilerin yer aldığı kısım gelir.

BASH
1localhost:peframe halilozturkci$ python peframe.py ../SupheliDosyalar/SupheliDosya01.exe 
2 Short information
3 ————————————————————
4 File Name          SupheliDosya01.exe
5 File Size          126976 byte
6 Compile Time       2008-12-04 13:42:21
7 DLL                No
8 Sections           4
9 Hash MD5           5c3a079e8a017d6dd0e4be62165ae1f3
10 Hash SAH1          9c7af38fe429f08c0ee61a50527e126c6208b79f
11 Imphash            0c4ccf433a90a129ba8b716f3e70ec11
12 Packer             Yes
13 Anti Debug         Yes
14 Anti VM            No
15 Directory          Import, Resource, Debug
16 Packer matched [1]
17 ————————————————————
18 Packer             Microsoft Visual C++ v7.0
19 Anti Debug discovered [2]
20 ————————————————————
21 Function           IsDebuggerPresent
22 Function           OutputDebugStringA
23 Suspicious API discovered [13]
24 ————————————————————
25 Function           CreateFileA
26 Function           CreateProcessA
27 Function           GetCurrentProcess
28 Function           GetCurrentProcessId
29 Function           GetFileSize
30 Function           GetModuleFileNameA
31 Function           GetModuleHandleA
32 Function           GetUserNameA
33 Function           GetVersionExA
34 Function           IsDebuggerPresent
35 Function           OutputDebugStringA
36 Function           Sleep
37 Function           WriteFile
38 Suspicious Sections discovered [1]
39 ————————————————————
40 Section            .rsrc
41 Hash MD5           c1d9ac11141a1ec8d05c8ae029a64af4
42 Hash SHA-1         fa70307368a2878d422b0a3fb164cdbcf4754cc8
43 File name discovered [21]
44 ————————————————————
45 Log                %s-%d.log
46 Library            ADVAPI32.dll
47 Text               ERRORLOG.TXT
48 Library            KERNEL32.dll
49 Library            MSVCR71.dll
50 Library            USER32.dll
51 Library            VERSION.dll
52 Executable         XCrashReport.exe
53 Library            avcodec.dll
54 Library            avformat.dll
55 Library            avswscale.dll
56 Library            avutil.dll
57 Library            dbghelp.dll
58 Database           e:\compile_tmp\20081204-193543-0c04\0461105984\obj\intel\Release\ffmpeg\ffmpeg.pdb
59 Library            libmmd.dll
60 Library            ole32.dll
61 Adobe Flash        tmp.swf
62 Library            video-subtitle.dll
63 Library            video_effects.dll
64 Log                vstats_%02d%02d%02d.log
65 Library            watermark.dll
66 Meta data found [10]
67 ————————————————————
68 LegalCopyright      Copyright (C) 2008
69 InternalName        avc
70 ModifyDate          2008-11-17
71 FileVersion         1.0.0.1204
72 CompanyName         ImTOO Software Studio
73 ProductName         avc Application
74 ProductVersion      1.0.0.1204
75 FileDescription     avc Application
76 OriginalFilename    avc.exe
77 Translation         0x0804 0x04b0
78 Wait please… storing info into the db
79 Added to databse.
80 localhost:peframe halilozturkci$

Elimizdeki bir başka şüpheli koda ilişkin örnek çıktıyı da fikir vermesi açısında aşağıdaki tabloda bulabilirsiniz.

BASH
1localhost:peframe halilozturkci$ python peframe.py ../SupheliDosyalar/SupheliDosya02.exe 
2 Short information
3 ————————————————————
4 File Name          SupheliDosya02.exe
5 File Size          303616 byte
6 Compile Time       1992-06-20 01:22:17
7 DLL                No
8 Sections           3
9 Hash MD5           86dc2a3c8554cc5d7e733d60a26e9a37
10 Hash SAH1          5f6043b07b2fed2a867c5cace239a75ec0b9657d
11 Imphash            90604cab556f77caa1e77170a4668f12
12 Packer             Yes
13 Anti Debug         No
14 Anti VM            No
15 Directory          Import, Resource, TLS
16 Packer matched [3]
17 ————————————————————
18 Packer             UPX v0.80 – v0.84
19 Packer             UPX 2.90 (LZMA)
20 Packer             UPX -> www.upx.sourceforge.net
21 Suspicious API discovered [3]
22 ————————————————————
23 Function           GetProcAddress
24 Function           LoadLibraryA
25 Function           RegCloseKey
26 Suspicious Sections discovered [2]
27 ————————————————————
28 Section            UPX0
29 Hash MD5           d41d8cd98f00b204e9800998ecf8427e
30 Hash SHA-1         da39a3ee5e6b4b0d3255bfef95601890afd80709
31 Section            UPX1
32 Hash MD5           097ae2a32f34860a4acf0516217c755e
33 Hash SHA-1         224c0e8996938c8a123181e05800df8276fa90dc
34 File name discovered [8]
35 ————————————————————
36 Library            KERNEL32.DLL
37 Library            URLMON.DLL
38 Library            advapi32.dll
39 Library            comctl32.dll
40 Library            gdi32.dll
41 Library            oleaut32.dll
42 Library            user32.dll
43 Library            version.dll
44 Wait please… storing info into the db
45 Added to databse.
46 localhost:peframe halilozturkci$
AUTHOR
Halil Öztürkci

Halil Öztürkci

Cybersecurity expert with 25 years of hands-on experience across the full attack-defense spectrum.

I've spent my career on both sides of the battlefield—investigating breaches through digital forensics, hunting APT groups through threat intelligence, building and leading security operations, dissecting malware, and executing red team engagements. Now I'm focused on the next frontier: LLM security, AI red teaming, and building secure AI/ML pipelines.

From incident response to adversary simulation, from SOC architecture to AI-powered threat detection—I decode complex security challenges and translate them into actionable defense.

enjoyed this? get more like it.