Files
2025-03-13 16:17:53 +01:00

56 lines
1.8 KiB
Python

"""
summary: This script shows an example of function clasification
using the dirtree API.
description:
In this example we calssify the functions of ntdll.dll into
three categories (there are more but three is enough for this
example):
* Runtime library (Rtl).
* System calls (Zw).
* Kernel internal (Ki)
For each category we create a corresponding folder in the functions
dirtreee. Then we iterates through all the functions and use the
folder name as filter: namely if a function name starts with 'Rtl'
it is moved to the Rtl folder and so on.
level: intermediate.
"""
import ida_funcs
import ida_dirtree
import idautils
lst = ['Rtl', 'Zw', 'Ki']
def main():
#
# Get the functions standard dirtree.
#
dt = ida_dirtree.get_std_dirtree(ida_dirtree.DIRTREE_FUNCS)
#
# Create the folders.
#
for folder in lst:
result = dt.mkdir(folder)
if result != ida_dirtree.DTE_OK and result != ida_dirtree.DTE_ALREADY_EXISTS:
print(f'Not able to create folder {folder} ({result:x})')
return
#
# For all the function in the base directory, check that the function name
# starts with the provided prefix. If it does we try to move it to the
# corresponding folder.
#
for func_ea in idautils.Functions():
name = ida_funcs.get_func_name(func_ea)
for func_prefix in lst:
if name and name.startswith(func_prefix):
if dt.isfile(name):
if dt.rename(name, f'{func_prefix}/{name}') != ida_dirtree.DTE_OK:
print(f'Not able to move {name} inside {func_prefix} folder')
else:
print(f'{name} moved in {func_prefix} folder')
if __name__ == '__main__':
main()