
idahunt is a framework to analyze binaries with IDA Pro and hunt for things in IDA Pro

idahunt एक फ्रेमवर्क है जो IDA Pro के साथ बाइनरी का विश्लेषण करने और IDA Pro में चीज़ों की खोज करने के लिए है। यह एक कमांड-लाइन टूल है जो किसी दिए गए फ़ोल्डर से सभी निष्पादन योग्य फ़ाइलों का पुनरावर्ती रूप से विश्लेषण करता है। यह पृष्ठभूमि में IDA को निष्पादित करता है ताकि आपको प्रत्येक फ़ाइल को मैन्युअल रूप से खोलना न पड़े। यह बाहरी IDA Python स्क्रिप्ट को निष्पादित करने का समर्थन करता है।
उपयोगी उदाहरणों में शामिल हैं (अपूर्ण सूची):
IDA Python स्क्रिप्ट की क्षमताएँ असीमित हैं। आप किसी भी मौजूदा IDA Python स्क्रिप्ट को आयात कर सकते हैं या अपनी खुद की बना सकते हैं। कुछ उदाहरण:
idahunt.py: निष्पादन योग्य फ़ाइलों का विश्लेषण करने के लिए मुख्य टूलfilters/: यह तय करने के लिए बुनियादी फ़िल्टर शामिल हैं कि इनपुट निर्देशिका में कौन सी फ़ाइलों का IDA के साथ विश्लेषण किया जाए
filters/default.py: डिफ़ॉल्ट बुनियादी फ़िल्टर जो कुछ भी फ़िल्टर नहीं करता और डिफ़ॉल्ट रूप से उपयोग किया जाता हैfilters/ciscoasa.py: Cisco ASA फ़ायरवॉल इमेज का विश्लेषण करने के लिए उपयोगीfilters/hpilo.py: HP iLO इमेज का विश्लेषण करने के लिए उपयोगीfilters/names.py: नाम, नाम की लंबाई या एक्सटेंशन पर आधारित बुनियादी फ़िल्टरscript_template.py: एक hello world IDA Python स्क्रिप्ट शामिल हैC:\idahunt> C:\Python37-x64\python.exe .\idahunt.py -h
usage: idahunt.py [-h] [--inputdir INPUTDIR] [--analyse] [--open]
[--ida-args IDA_ARGS] [--scripts SCRIPTS [SCRIPTS ...]]
[--filter FILTER] [--cleanup] [--temp-cleanup] [--verbose]
[--max-ida MAX_IDA] [--list-only] [--version IDA_VERSION]
optional arguments:
-h, --help show this help message and exit
--inputdir INPUTDIR Input folder to search for files
--analyse, --analyze analyse all files i.e. create .idb for all of them
--open open all files into IDA (debug only)
--ida-args IDA_ARGS Additional arguments to pass to IDA (e.g.
-p<processor> -i<entry_point> -b<load_addr>)
--scripts SCRIPTS [SCRIPTS ...]
List of IDA Python scripts to execute in this order
--filter FILTER External python script with optional arguments
defining a filter for the names of the files to
analyse. See filters/names.py for example
--cleanup Cleanup i.e. remove .asm files that we don't need
--temp-cleanup Cleanup temporary database files i.e. remove .id0,
.id1, .id2, .nam, .dmp files if IDA Pro crashed and
did not delete them
--verbose be more verbose to debug script
--max-ida MAX_IDA Maximum number of instances of IDA to run at a time
(default: 10)
--list-only List only what files would be handled without
executing IDA
--version IDA_VERSION
Override IDA version (e.g. "7.5"). This is used to
find the path of IDA on Windows.
आप किसी भी कमांड लाइन के साथ --list-only का उपयोग कर सकते हैं ताकि केवल यह सूचीबद्ध हो सके कि टूल वास्तव में उसे किए बिना क्या करेगा।
C:\idahunt>idahunt.py --inputdir C:\re --analyse --filter "filters\names.py -a 32 -v" --list-only
[idahunt] Simulating only...
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\re\cves\cve-2014-4076.dll
[idahunt] Analysing C:\re\cves\cve-2014-4076.exe
[idahunt] Analysing C:\re\DownloadExecute.exe
[idahunt] Analysing C:\re\ReverseShell.exe
यहाँ हम प्रारंभिक विश्लेषण शुरू करते हैं। यह कुछ सेकंड में समाप्त होता है:
C:\idahunt>idahunt.py --inputdir C:\re --analyse --filter "filters\names.py -a 32 -v"
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\re\cves\cve-2014-4076.dll
[idahunt] Analysing C:\re\cves\cve-2014-4076.exe
[idahunt] Analysing C:\re\DownloadExecute.exe
[idahunt] Analysing C:\re\ReverseShell.exe
[idahunt] Waiting on remaining 4 IDA instances
यहाँ हम प्रारंभिक विश्लेषण द्वारा बनाई गई अस्थायी .asm फ़ाइलों को साफ़ करते हैं:
C:\idahunt>idahunt.py --inputdir C:\re --cleanup
[idahunt] Deleting C:\re\cves\cve-2014-4076.asm
[idahunt] Deleting C:\re\DownloadExecute.asm
[idahunt] Deleting C:\re\ReverseShell.asm
हम जनरेट की गई .idb फ़ाइलों के साथ-साथ कुछ .log फ़ाइलें भी देख सकते हैं जिनमें IDA Pro आउटपुट विंडो होती है।
C:\idahunt>tree /f C:\re
Folder PATH listing
Volume serial number is XXXX-XXXX
C:\RE
│ DownloadExecute.exe
│ DownloadExecute.idb
│ DownloadExecute.log
│ ReverseShell.exe
│ ReverseShell.idb
│ ReverseShell.log
│
└───cves
cve-2014-4076.dll
cve-2014-4076.exe
cve-2014-4076.idb
cve-2014-4076.log
यहाँ हम एक बुनियादी IDA Python स्क्रिप्ट निष्पादित करते हैं जो IDA Pro आउटपुट विंडो में [script_template] I execute in IDA, yay! प्रिंट करती है।
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -a 32 -v" --scripts C:\idahunt\script_template.py
[idahunt] EXECUTE SCRIPTS
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\cves\cve-2014-4076.dll
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\cves\cve-2014-4076.exe
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\DownloadExecute.exe
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\ReverseShell.exe
[idahunt] Waiting on remaining 4 IDA instances
चूँकि यह .log फ़ाइल में सहेजा जाता है, हम जाँच सकते हैं कि यह सफलतापूर्वक निष्पादित हुआ:
Autoanalysis subsystem has been initialized.
Database for file 'ReverseShell.exe' has been loaded.
Compiling file 'C:\Program Files (x86)\IDA 6.95\idc\ida.idc'...
Executing function 'main'...
[script_template] I execute in IDA, yay!
idahunt इस PR के बाद से बाइनरी डिफिंग करने के लिए diaphora के साथ शानदार ढंग से एकीकृत होता है।
आपको एक ही फ़ाइलनाम के विभिन्न संस्करणों के साथ फ़ोल्डरों का एक पदानुक्रम चाहिए, उदाहरण के लिए:
C:\> tree C:\tests\ /F
C:\tests
├───patch
│ tm.sys
│
└───vuln
tm.sys
यदि पहले से नहीं किया गया है, तो idbs बनाने के लिए आपको प्रारंभिक IDA विश्लेषण करना होगा।
C:\idahunt> python idahunt.py --inputdir C:\tests\ --analyse --verbose
[idahunt] IDA32 = C:\Program Files\IDA Core 8.1\ida.exe
[idahunt] IDA64 = C:\Program Files\IDA Core 8.1\ida64.exe
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\tests\patch\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -B -oC:\tests\patch\tm.i64 -LC:\tests\patch\tm.log C:\tests\patch\tm.sys
[idahunt] Analysing C:\tests\vuln\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -B -oC:\tests\vuln\tm.i64 -LC:\tests\vuln\tm.log C:\tests\vuln\tm.sys
[idahunt] Executed IDA 2/2 times IDA instances
[idahunt] Took 0:00:15.03 to execute this
C:\> tree C:\tests\ /F
C:\tests
├───patch
│ tm.i64
│ tm.log
│ tm.sys
│
└───vuln
tm.i64
tm.log
tm.sys
यह प्रत्येक फ़ाइल के लिए डिफ एक्सपोर्ट करने के लिए diaphora का उपयोग करता है (<filename>.sqlite sqlite3 डेटाबेस बनाता है), और फिर संस्करणों के बीच डिफ करता है (<filename>.diaphora sqlite3 डेटाबेस बनाता है)।
C:\idahunt> python idahunt.py --diaphora-path C:\diaphora --inputdir C:\tests --diff --filename tm.sys --verbose
[idahunt] IDA32 = C:\Program Files\IDA Core 8.1\ida.exe
[idahunt] IDA64 = C:\Program Files\IDA Core 8.1\ida64.exe
[idahunt] EXECUTE DIFF-EXPORT
[idahunt] Executing script C:\diaphora\diaphora_ida.py for C:\tests\patch\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -A -SC:\diaphora\diaphora_ida.py -LC:\tests\patch\tm.log C:\tests\patch\tm.i64
[idahunt] Environment variables:
[idahunt] DIAPHORA_AUTO2=1
[idahunt] DIAPHORA_EXPORT_FILE=tm.sqlite
[idahunt] Executing script C:\diaphora\diaphora_ida.py for C:\tests\vuln\tm.sys
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -A -SC:\diaphora\diaphora_ida.py -LC:\tests\vuln\tm.log C:\tests\vuln\tm.i64
[idahunt] Environment variables:
[idahunt] DIAPHORA_AUTO2=1
[idahunt] DIAPHORA_EXPORT_FILE=tm.sqlite
[idahunt] Executed IDA 2/2 times IDA instances
[idahunt] EXECUTE DIFF
[idahunt] Diffing patch vs vuln
[idahunt] C:\Program Files\Python39\python.exe C:\diaphora\diaphora.py C:\tests\patch\tm.sqlite C:\tests\vuln\tm.sqlite -o C:\tests\vuln\patch_vs_vuln\tm.sys.diaphora
[diaphora][Wed Dec 14 10:33:49 2022] Diffing...es
[diaphora][Wed Dec 14 10:33:49 2022] Callgraphs from both programs differ in 0.706714%
[diaphora][Wed Dec 14 10:33:49 2022] Finding best matches...
[diaphora][Wed Dec 14 10:33:49 2022] Finding with heuristic 'Perfect match, same name'
[diaphora][Wed Dec 14 10:33:50 2022] All functions matched in at least one database, finishing.
[diaphora][Wed Dec 14 10:33:50 2022] Finding partial matches
[diaphora][Wed Dec 14 10:33:50 2022] All functions matched in at least one database, finishing.
[diaphora][Wed Dec 14 10:33:50 2022] Finding with heuristic 'Small names difference'
[diaphora][Wed Dec 14 10:33:50 2022] Finding with heuristic 'Call address sequence'
[diaphora][Wed Dec 14 10:33:50 2022] Finding with heuristic 'Call address sequence'
[diaphora][Wed Dec 14 10:33:50 2022] Finding unmatched functions
[diaphora][Wed Dec 14 10:33:50 2022] Done. Took 1.110000000000582 seconds.
[diaphora][Wed Dec 14 10:33:50 2022] Diffing results saved in file 'C:\tests\vuln\patch_vs_vuln\tm.sys.diaphora'.
[idahunt] Executed Python 1/1 times
[idahunt] Took 0:00:30.07 to execute this
C:\> tree C:\tests\ /F
C:\tests
├───patch
│ tm.i64
│ tm.log
│ tm.sqlite
│ tm.sys
│
└───vuln
│ tm.i64
│ tm.log
│ tm.sqlite
│ tm.sys
│
└───patch_vs_vuln
tm.sys.diaphora
tm.sys.txt
जैसा ऊपर दिखाया गया है, यह सर्वोत्तम मिलानों की सूची के साथ <filename>.diaphora फ़ाइल के साथ-साथ एक <filename>.txt फ़ाइल भी बनाता है:
partial,00000,1c0002708,WPP_SF_DDq,1c0002708,WPP_SF_DDq,0.950,1,1,Perfect match, same name
partial,00001,1c0002770,WPP_SF_Dq,1c0002770,WPP_SF_Dq,0.940,1,1,Perfect match, same name
partial,00002,1c00027c8,WPP_SF_qq_guid_D,1c00027c8,WPP_SF_qq_guid_D,0.960,1,1,Perfect match, same name
partial,00003,1c0002844,WPP_SF_qqi,1c0002844,WPP_SF_qqi,0.950,1,1,Perfect match, same name
partial,00004,1c00028a8,WPP_SF_qqii,1c00028a8,WPP_SF_qqii,0.960,1,1,Perfect match, same name
partial,00005,1c0015500,TmRecoverResourceManagerExt,1c0015500,TmRecoverResourceManagerExt,0.860,37,36,Perfect match, same name
partial,00006,1c001a610,TmpHeuristicAbortTransaction,1c001a640,TmpHeuristicAbortTransaction,0.986,6,6,Perfect match, same name
partial,00007,1c001a6c0,TmpHeuristicAbortTransactionAfterCheckpoint,1c001a6f0,TmpHeuristicAbortTransactionAfterCheckpoint,0.992,11,11,Perfect match, same name
partial,00008,1c001ad58,TmpIsClusteredTransactionManager,1c001ad88,TmpIsClusteredTransactionManager,0.994,15,15,Perfect match, same name
partial,00009,1c001b0c0,TmpMigrateEnlistments,1c001b0f0,TmpMigrateEnlistments,0.980,10,10,Perfect match, same name
यह पता चलता है कि tm.sys फ़ाइलें (रिपॉजिटरी में दी गई हैं) CVE-2018-8611 से संबंधित हैं, इसलिए आइए पैच किए गए फ़ंक्शन TmRecoverResourceManagerExt() का विश्लेषण करें:
C:\idahunt> python idahunt.py --diaphora-path C:\diaphora\ --inputdir C:\tests\ --html --filename tm.sys --funcname TmRecoverResourceManagerExt --verbose
[idahunt] IDA32 = C:\Program Files\IDA Core 8.1\ida.exe
[idahunt] IDA64 = C:\Program Files\IDA Core 8.1\ida64.exe
[idahunt] EXECUTE GENERATE HTML
C:\tests\patch\tm.sqlite C:\tests\vuln\tm.sqlite
C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_asm.html C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_pseudo.html
[idahunt] Showing patch vs vuln for TmRecoverResourceManagerExt
[idahunt] C:\Program Files\IDA Core 8.1\ida64.exe -A -SC:\diaphora\diaphora_ida.py -LC:\tests\patch\tm.log C:\tests\patch\tm.i64
[idahunt] Environment variables:
[idahunt] DIAPHORA_AUTO4=1
[idahunt] DIAPHORA_DB1=C:\tests\patch\tm.sqlite
[idahunt] DIAPHORA_DB2=C:\tests\vuln\tm.sqlite
[idahunt] DIAPHORA_DIFF=C:\tests\vuln\patch_vs_vuln\tm.sys.diaphora
[idahunt] DIAPHORA_EA1=1c0015500
[idahunt] DIAPHORA_EA2=1c0015500
[idahunt] DIAPHORA_HTML_ASM=C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_asm.html
[idahunt] DIAPHORA_HTML_PSEUDO=C:\tests\vuln\patch_vs_vuln\tm.sys\TmRecoverResourceManagerExt_pseudo.html
[idahunt] Executed IDA 1/1 times IDA instances
[idahunt] Took 0:00:10.03 to execute this
अब हमारे पास इस फ़ंक्शन के लिए जनरेट की गई असेंबली और डीकंपाइल किया गया कोड है:
C:\idahunt> tree C:\tests\ /F
C:\tests
├───patch
│ tm.i64
│ ...
│
└───vuln
│ tm.i64
│ ...
│
└───patch_vs_vuln
│ tm.sys.diaphora
│ tm.sys.txt
│
└───tm.sys
TmRecoverResourceManagerExt_asm.html
TmRecoverResourceManagerExt_pseudo.html

हम फ़िल्टर कर सकते हैं कि idahunt केवल उन फ़ाइलों का विश्लेषण करता है जिनके नाम में दिया गया पैटर्न हो (नीचे -n Download):
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -a 32 -v -n Download" --scripts C:\idahunt\script_template.py --list-only
[idahunt] Simulating only...
[idahunt] EXECUTE SCRIPTS
[names] Skipping non-matching name Download in cve-2014-4076.dll
[names] Skipping non-matching name Download in cve-2014-4076.exe
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\DownloadExecute.exe
[names] Skipping non-matching name Download in ReverseShell.exe
हम यह भी फ़िल्टर कर सकते हैं कि idahunt केवल दिए गए एक्सटेंशन वाली फ़ाइलों का विश्लेषण करता है (नीचे -e dll):
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -a 32 -v -e dll" --scripts C:\idahunt\script_template.py --list-only
[idahunt] Simulating only...
[idahunt] EXECUTE SCRIPTS
[idahunt] Executing script C:\idahunt\script_template.py for C:\re\cves\cve-2014-4076.dll
[names] Skipping non-matching extension .dll in cve-2014-4076.exe
[names] Skipping non-matching extension .dll in DownloadExecute.exe
[names] Skipping non-matching extension .dll in ReverseShell.exe
आर्किटेक्चर को पहले से जानना आवश्यक है, क्योंकि IDA Pro आर्किटेक्चर और इस तथ्य के कारण कि इसमें दो अलग-अलग निष्पादन योग्य idaq.exe और idaq64.exe होते हैं, जिनका उपयोग 32-बिट और 64-बिट दोनों आर्किटेक्चर की बाइनरी का विश्लेषण करने के लिए होता है। यह विशेष रूप से तब महत्वपूर्ण है जब आप HexRays डीकंपाइलर का उपयोग करना चाहते हैं।
idahunt Windows PE फ़ाइलों में i386, ia64 और amd64 आर्किटेक्चर का स्वचालित रूप से पता लगाएगा। यदि आपको अन्य आर्किटेक्चर का स्वचालित रूप से पता लगाने की आवश्यकता है, तो आप एक issue बना सकते हैं या इसे idahunt में जोड़ सकते हैं और PR कर सकते हैं।
यदि आप उन फ़ाइलों का आर्किटेक्चर प्रदान करना भूल जाते हैं जिनका आप विश्लेषण करना चाहते हैं, तो बुनियादी filters\names.py एक त्रुटि लौटाएगा:
C:\idahunt>idahunt.py --inputdir C:\re --filter "filters\names.py -v -e dll" --scripts C:\idahunt\script_template.py --list-only
[idahunt] Simulating only...
[idahunt] EXECUTE SCRIPTS
[names] Unknown architecture: None. You need to specify it with -a
[names] Skipping non-matching extension .dll in cve-2014-4076.exe
[names] Skipping non-matching extension .dll in DownloadExecute.exe
[names] Skipping non-matching extension .dll in ReverseShell.exe
HP iLO या Cisco ASA फर्मवेयर के विश्लेषण के लिए फ़िल्टर उपलब्ध हैं।