karta-ng 2.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- karta_ng-2.3.0/MANIFEST.in +9 -0
- karta_ng-2.3.0/PKG-INFO +23 -0
- karta_ng-2.3.0/README.md +0 -0
- karta_ng-2.3.0/pyproject.toml +76 -0
- karta_ng-2.3.0/setup.cfg +4 -0
- karta_ng-2.3.0/setup.py +74 -0
- karta_ng-2.3.0/src/karta_ng/__init__.py +7 -0
- karta_ng-2.3.0/src/karta_ng/analyze_src_file.py +63 -0
- karta_ng-2.3.0/src/karta_ng/ar_parser.py +52 -0
- karta_ng-2.3.0/src/karta_ng/config/__init__.py +318 -0
- karta_ng-2.3.0/src/karta_ng/config/anchor.py +106 -0
- karta_ng-2.3.0/src/karta_ng/config/anchor_config.py +20 -0
- karta_ng-2.3.0/src/karta_ng/config/libc_config.py +53 -0
- karta_ng-2.3.0/src/karta_ng/config/score_config.py +43 -0
- karta_ng-2.3.0/src/karta_ng/config/utils.py +630 -0
- karta_ng-2.3.0/src/karta_ng/core/__init__.py +61 -0
- karta_ng-2.3.0/src/karta_ng/core/file_layer.py +594 -0
- karta_ng-2.3.0/src/karta_ng/core/function_context.py +228 -0
- karta_ng-2.3.0/src/karta_ng/core/matching_engine.py +686 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/IDA/__init__.py +7 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/IDA/ida_analysis_api.py +347 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/IDA/ida_api.py +806 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/IDA/ida_cmd_api.py +118 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/IDA/ida_domain_analyzer.py +453 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/IDA/ida_domain_api.py +282 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/IDA/ida_verifier_api.py +79 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/__init__.py +17 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/disas_api.py +642 -0
- karta_ng-2.3.0/src/karta_ng/disassembler/factory.py +90 -0
- karta_ng-2.3.0/src/karta_ng/domain_api.py +76 -0
- karta_ng-2.3.0/src/karta_ng/file_layer.py +430 -0
- karta_ng-2.3.0/src/karta_ng/function_context.py +1097 -0
- karta_ng-2.3.0/src/karta_ng/ida_compat.py +335 -0
- karta_ng-2.3.0/src/karta_ng/installers/__init__.py +1 -0
- karta_ng-2.3.0/src/karta_ng/installers/common_installer.py +75 -0
- karta_ng-2.3.0/src/karta_ng/installers/ida_installer.py +67 -0
- karta_ng-2.3.0/src/karta_ng/karta_analyze_object.py +22 -0
- karta_ng-2.3.0/src/karta_ng/karta_analyze_src.py +409 -0
- karta_ng-2.3.0/src/karta_ng/karta_headless.py +69 -0
- karta_ng-2.3.0/src/karta_ng/karta_identifier.py +555 -0
- karta_ng-2.3.0/src/karta_ng/karta_manual_anchor.py +211 -0
- karta_ng-2.3.0/src/karta_ng/karta_manual_identifier.py +123 -0
- karta_ng-2.3.0/src/karta_ng/karta_matcher.py +332 -0
- karta_ng-2.3.0/src/karta_ng/libs/__init__.py +320 -0
- karta_ng-2.3.0/src/karta_ng/libs/antidebug/__init__.py +17 -0
- karta_ng-2.3.0/src/karta_ng/libs/antidebug/antidebug_seeker.py +192 -0
- karta_ng-2.3.0/src/karta_ng/libs/antidebug/armadillo_seeker.py +15 -0
- karta_ng-2.3.0/src/karta_ng/libs/antidebug/asprotect_seeker.py +15 -0
- karta_ng-2.3.0/src/karta_ng/libs/antidebug/themida_seeker.py +17 -0
- karta_ng-2.3.0/src/karta_ng/libs/antidebug/upx_seeker.py +126 -0
- karta_ng-2.3.0/src/karta_ng/libs/antidebug/vmprotect_seeker.py +16 -0
- karta_ng-2.3.0/src/karta_ng/libs/apt/equation_group_seeker.py +280 -0
- karta_ng-2.3.0/src/karta_ng/libs/banking/__init__.py +1 -0
- karta_ng-2.3.0/src/karta_ng/libs/banking/emotet_seeker.py +384 -0
- karta_ng-2.3.0/src/karta_ng/libs/banking/zeus_seeker.py +376 -0
- karta_ng-2.3.0/src/karta_ng/libs/cloud/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/cloud/alibaba_cloud_seeker.py +67 -0
- karta_ng-2.3.0/src/karta_ng/libs/cloud/aws_sdk_seeker.py +76 -0
- karta_ng-2.3.0/src/karta_ng/libs/cloud/azure_sdk_seeker.py +76 -0
- karta_ng-2.3.0/src/karta_ng/libs/cloud/firebase_seeker.py +69 -0
- karta_ng-2.3.0/src/karta_ng/libs/cloud/gcp_sdk_seeker.py +77 -0
- karta_ng-2.3.0/src/karta_ng/libs/cloud/s3_seeker.py +61 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/aac_seeker.py +65 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/av1_seeker.py +60 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/ffmpeg_seeker.py +106 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/flac_seeker.py +103 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/h264_seeker.py +105 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/h265_seeker.py +93 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/mp3_seeker.py +98 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/opus_seeker.py +97 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/vorbis_seeker.py +108 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/vp8_seeker.py +60 -0
- karta_ng-2.3.0/src/karta_ng/libs/codec/vp9_seeker.py +59 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/__init__.py +27 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/brotli_seeker.py +32 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/bzip2_seeker.py +34 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/deflate_seeker.py +34 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/lz4_seeker.py +112 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/lzfse_seeker.py +57 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/lzma_seeker.py +108 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/lzo_seeker.py +32 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/quicklz_seeker.py +64 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/rar_seeker.py +72 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/snappy_seeker.py +32 -0
- karta_ng-2.3.0/src/karta_ng/libs/compression/zstd_seeker.py +33 -0
- karta_ng-2.3.0/src/karta_ng/libs/container/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/container/containerd_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/container/docker_seeker.py +101 -0
- karta_ng-2.3.0/src/karta_ng/libs/container/kubernetes_seeker.py +139 -0
- karta_ng-2.3.0/src/karta_ng/libs/container/qemu_seeker.py +69 -0
- karta_ng-2.3.0/src/karta_ng/libs/container/virtualbox_seeker.py +75 -0
- karta_ng-2.3.0/src/karta_ng/libs/container/vmware_seeker.py +76 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/__init__.py +35 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/aes_seeker.py +102 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/aria_seeker.py +91 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/blake_seeker.py +63 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/blowfish_seeker.py +101 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/camellia_seeker.py +57 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/cast5_seeker.py +73 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/chacha20_seeker.py +146 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/des_seeker.py +106 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/ecdsa_seeker.py +67 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/gost_seeker.py +95 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/idea_seeker.py +78 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/md5_seeker.py +102 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/rc4_seeker.py +98 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/ripemd_seeker.py +83 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/rsa_seeker.py +111 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/salsa20_seeker.py +58 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/seed_seeker.py +82 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/serpent_seeker.py +56 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/sha_seeker.py +167 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/skipjack_seeker.py +103 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/sm4_seeker.py +119 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/tea_seeker.py +67 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/tiger_seeker.py +80 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/twofish_seeker.py +101 -0
- karta_ng-2.3.0/src/karta_ng/libs/crypto/whirlpool_seeker.py +83 -0
- karta_ng-2.3.0/src/karta_ng/libs/cryptoapi.py +163 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/__init__.py +21 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/berkeleydb_seeker.py +74 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/leveldb_seeker.py +72 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/lmdb_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/mongodb_seeker.py +73 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/mysql_seeker.py +154 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/postgresql_seeker.py +69 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/redis_seeker.py +75 -0
- karta_ng-2.3.0/src/karta_ng/libs/database/rocksdb_seeker.py +71 -0
- karta_ng-2.3.0/src/karta_ng/libs/engine/chakracore_seeker.py +134 -0
- karta_ng-2.3.0/src/karta_ng/libs/engine/unity_seeker.py +99 -0
- karta_ng-2.3.0/src/karta_ng/libs/engine/unreal_seeker.py +107 -0
- karta_ng-2.3.0/src/karta_ng/libs/evasion/antidebug_seeker.py +204 -0
- karta_ng-2.3.0/src/karta_ng/libs/evasion/antivm_seeker.py +220 -0
- karta_ng-2.3.0/src/karta_ng/libs/evasion/sandbox_evasion_seeker.py +241 -0
- karta_ng-2.3.0/src/karta_ng/libs/framework/boost_seeker.py +112 -0
- karta_ng-2.3.0/src/karta_ng/libs/framework/dotnet_seeker.py +124 -0
- karta_ng-2.3.0/src/karta_ng/libs/framework/gtk_seeker.py +105 -0
- karta_ng-2.3.0/src/karta_ng/libs/framework/qt_seeker.py +102 -0
- karta_ng-2.3.0/src/karta_ng/libs/gameengine/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/gameengine/cocos2d_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/gameengine/cryengine_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/gameengine/godot_seeker.py +71 -0
- karta_ng-2.3.0/src/karta_ng/libs/gameengine/pygame_seeker.py +71 -0
- karta_ng-2.3.0/src/karta_ng/libs/gameengine/unity_seeker.py +82 -0
- karta_ng-2.3.0/src/karta_ng/libs/gameengine/unreal_seeker.py +81 -0
- karta_ng-2.3.0/src/karta_ng/libs/graphics/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/graphics/cairo_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/graphics/directx_seeker.py +105 -0
- karta_ng-2.3.0/src/karta_ng/libs/graphics/metal_seeker.py +62 -0
- karta_ng-2.3.0/src/karta_ng/libs/graphics/opengl_seeker.py +124 -0
- karta_ng-2.3.0/src/karta_ng/libs/graphics/skia_seeker.py +62 -0
- karta_ng-2.3.0/src/karta_ng/libs/graphics/vulkan_seeker.py +80 -0
- karta_ng-2.3.0/src/karta_ng/libs/gsoap.py +64 -0
- karta_ng-2.3.0/src/karta_ng/libs/gui/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/gui/gtk_seeker.py +77 -0
- karta_ng-2.3.0/src/karta_ng/libs/gui/imgui_seeker.py +78 -0
- karta_ng-2.3.0/src/karta_ng/libs/gui/mfc_seeker.py +80 -0
- karta_ng-2.3.0/src/karta_ng/libs/gui/qt_seeker.py +81 -0
- karta_ng-2.3.0/src/karta_ng/libs/gui/tkinter_seeker.py +77 -0
- karta_ng-2.3.0/src/karta_ng/libs/gui/wxwidgets_seeker.py +77 -0
- karta_ng-2.3.0/src/karta_ng/libs/icu.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/image/avif_seeker.py +89 -0
- karta_ng-2.3.0/src/karta_ng/libs/image/heif_seeker.py +77 -0
- karta_ng-2.3.0/src/karta_ng/libs/image/jpeg2000_seeker.py +97 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/__init__.py +1 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/arm_shellcode_seeker.py +334 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/busybox_exploit_seeker.py +317 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/coap_seeker.py +78 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/freertos_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/lwip_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/mirai_seeker.py +260 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/modbus_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/mqtt_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/iot/opcua_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/jansson.py +149 -0
- karta_ng-2.3.0/src/karta_ng/libs/lib_factory.py +26 -0
- karta_ng-2.3.0/src/karta_ng/libs/lib_template.py +98 -0
- karta_ng-2.3.0/src/karta_ng/libs/libcurl.py +134 -0
- karta_ng-2.3.0/src/karta_ng/libs/libjpeg.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/libjpeg_turbo.py +61 -0
- karta_ng-2.3.0/src/karta_ng/libs/libpng.py +96 -0
- karta_ng-2.3.0/src/karta_ng/libs/libtiff.py +71 -0
- karta_ng-2.3.0/src/karta_ng/libs/libvpx.py +67 -0
- karta_ng-2.3.0/src/karta_ng/libs/libxml2.py +69 -0
- karta_ng-2.3.0/src/karta_ng/libs/linux_malware/__init__.py +1 -0
- karta_ng-2.3.0/src/karta_ng/libs/linux_malware/gafgyt_seeker.py +457 -0
- karta_ng-2.3.0/src/karta_ng/libs/linux_malware/kaiten_seeker.py +456 -0
- karta_ng-2.3.0/src/karta_ng/libs/linux_malware/tsunami_seeker.py +394 -0
- karta_ng-2.3.0/src/karta_ng/libs/linux_malware/xorddos_seeker.py +357 -0
- karta_ng-2.3.0/src/karta_ng/libs/logging/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/logging/elasticsearch_seeker.py +69 -0
- karta_ng-2.3.0/src/karta_ng/libs/logging/grafana_seeker.py +64 -0
- karta_ng-2.3.0/src/karta_ng/libs/logging/log4j_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/logging/prometheus_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/logging/spdlog_seeker.py +67 -0
- karta_ng-2.3.0/src/karta_ng/libs/logging/syslog_seeker.py +61 -0
- karta_ng-2.3.0/src/karta_ng/libs/mactelnet.py +66 -0
- karta_ng-2.3.0/src/karta_ng/libs/malware/packer_seeker.py +128 -0
- karta_ng-2.3.0/src/karta_ng/libs/malware/ransomware_seeker.py +148 -0
- karta_ng-2.3.0/src/karta_ng/libs/malware/rat_seeker.py +140 -0
- karta_ng-2.3.0/src/karta_ng/libs/math/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/math/blas_seeker.py +71 -0
- karta_ng-2.3.0/src/karta_ng/libs/math/fftw_seeker.py +72 -0
- karta_ng-2.3.0/src/karta_ng/libs/math/gmp_seeker.py +72 -0
- karta_ng-2.3.0/src/karta_ng/libs/math/gsl_seeker.py +74 -0
- karta_ng-2.3.0/src/karta_ng/libs/math/lapack_seeker.py +72 -0
- karta_ng-2.3.0/src/karta_ng/libs/math/mpfr_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/mdnsresponder.py +53 -0
- karta_ng-2.3.0/src/karta_ng/libs/ml/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/ml/caffe_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/ml/mxnet_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/ml/onnx_seeker.py +76 -0
- karta_ng-2.3.0/src/karta_ng/libs/ml/opencv_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/ml/pytorch_seeker.py +192 -0
- karta_ng-2.3.0/src/karta_ng/libs/ml/tensorflow_seeker.py +163 -0
- karta_ng-2.3.0/src/karta_ng/libs/multimedia/__init__.py +17 -0
- karta_ng-2.3.0/src/karta_ng/libs/multimedia/ffmpeg_seeker.py +187 -0
- karta_ng-2.3.0/src/karta_ng/libs/multimedia/mp3lame_seeker.py +15 -0
- karta_ng-2.3.0/src/karta_ng/libs/multimedia/opus_seeker.py +15 -0
- karta_ng-2.3.0/src/karta_ng/libs/multimedia/vorbis_seeker.py +15 -0
- karta_ng-2.3.0/src/karta_ng/libs/multimedia/webp_seeker.py +0 -0
- karta_ng-2.3.0/src/karta_ng/libs/multimedia/x264_seeker.py +15 -0
- karta_ng-2.3.0/src/karta_ng/libs/netsnmp.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/__init__.py +21 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/amqp_seeker.py +109 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/dpdk_seeker.py +97 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/gnutls_seeker.py +16 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/libevent_seeker.py +16 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/libnet_seeker.py +102 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/libnids_seeker.py +98 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/libpcap_seeker.py +152 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/libssh_seeker.py +16 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/libuv_seeker.py +154 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/mbedtls_seeker.py +156 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/nghttp2_seeker.py +16 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/pfring_seeker.py +105 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/thrift_seeker.py +114 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/wininet_seeker.py +113 -0
- karta_ng-2.3.0/src/karta_ng/libs/network/wolfssl_seeker.py +155 -0
- karta_ng-2.3.0/src/karta_ng/libs/openssh.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/openssl.py +102 -0
- karta_ng-2.3.0/src/karta_ng/libs/parsing/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/parsing/flatbuffers_seeker.py +65 -0
- karta_ng-2.3.0/src/karta_ng/libs/parsing/msgpack_seeker.py +67 -0
- karta_ng-2.3.0/src/karta_ng/libs/parsing/protobuf_seeker.py +77 -0
- karta_ng-2.3.0/src/karta_ng/libs/parsing/rapidjson_seeker.py +69 -0
- karta_ng-2.3.0/src/karta_ng/libs/parsing/toml_seeker.py +66 -0
- karta_ng-2.3.0/src/karta_ng/libs/parsing/yaml_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/physics/__init__.py +28 -0
- karta_ng-2.3.0/src/karta_ng/libs/physics/box2d_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/physics/bullet_seeker.py +69 -0
- karta_ng-2.3.0/src/karta_ng/libs/physics/havok_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/physics/physx_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/protection/themida_seeker.py +126 -0
- karta_ng-2.3.0/src/karta_ng/libs/protection/vmprotect_seeker.py +113 -0
- karta_ng-2.3.0/src/karta_ng/libs/protocol/boringssl_seeker.py +97 -0
- karta_ng-2.3.0/src/karta_ng/libs/protocol/coap_seeker.py +172 -0
- karta_ng-2.3.0/src/karta_ng/libs/protocol/grpc_seeker.py +101 -0
- karta_ng-2.3.0/src/karta_ng/libs/protocol/mbedtls_seeker.py +97 -0
- karta_ng-2.3.0/src/karta_ng/libs/protocol/mqtt_seeker.py +145 -0
- karta_ng-2.3.0/src/karta_ng/libs/protocol/protobuf_seeker.py +101 -0
- karta_ng-2.3.0/src/karta_ng/libs/rootkit/dkom_seeker.py +258 -0
- karta_ng-2.3.0/src/karta_ng/libs/rootkit/kernel_module_seeker.py +293 -0
- karta_ng-2.3.0/src/karta_ng/libs/rootkit/ssdt_hook_seeker.py +254 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/dotnet_seeker.py +78 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/golang_seeker.py +73 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/java_seeker.py +82 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/javascriptcore_seeker.py +116 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/lua_seeker.py +115 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/nodejs_seeker.py +78 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/perl_seeker.py +124 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/php_seeker.py +126 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/python_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/ruby_seeker.py +121 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/rust_seeker.py +79 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/spidermonkey_seeker.py +113 -0
- karta_ng-2.3.0/src/karta_ng/libs/runtime/v8_seeker.py +110 -0
- karta_ng-2.3.0/src/karta_ng/libs/scientific/blas_seeker.py +111 -0
- karta_ng-2.3.0/src/karta_ng/libs/scientific/fftw_seeker.py +99 -0
- karta_ng-2.3.0/src/karta_ng/libs/scientific/gmp_seeker.py +81 -0
- karta_ng-2.3.0/src/karta_ng/libs/scientific/gsl_seeker.py +93 -0
- karta_ng-2.3.0/src/karta_ng/libs/scientific/mpfr_seeker.py +85 -0
- karta_ng-2.3.0/src/karta_ng/libs/scientific/numpy_seeker.py +0 -0
- karta_ng-2.3.0/src/karta_ng/libs/security/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/security/jwt_seeker.py +61 -0
- karta_ng-2.3.0/src/karta_ng/libs/security/kerberos_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/security/ldap_seeker.py +71 -0
- karta_ng-2.3.0/src/karta_ng/libs/security/oauth_seeker.py +65 -0
- karta_ng-2.3.0/src/karta_ng/libs/security/pam_seeker.py +70 -0
- karta_ng-2.3.0/src/karta_ng/libs/security/saml_seeker.py +65 -0
- karta_ng-2.3.0/src/karta_ng/libs/sqlite3.py +142 -0
- karta_ng-2.3.0/src/karta_ng/libs/treck.py +63 -0
- karta_ng-2.3.0/src/karta_ng/libs/utility/asn1_seeker.py +120 -0
- karta_ng-2.3.0/src/karta_ng/libs/utility/base64_seeker.py +90 -0
- karta_ng-2.3.0/src/karta_ng/libs/utility/pkcs_seeker.py +127 -0
- karta_ng-2.3.0/src/karta_ng/libs/web/__init__.py +40 -0
- karta_ng-2.3.0/src/karta_ng/libs/web/angular_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/web/django_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/web/express_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/web/flask_seeker.py +66 -0
- karta_ng-2.3.0/src/karta_ng/libs/web/react_seeker.py +68 -0
- karta_ng-2.3.0/src/karta_ng/libs/web/vue_seeker.py +67 -0
- karta_ng-2.3.0/src/karta_ng/libs/winhttp.py +124 -0
- karta_ng-2.3.0/src/karta_ng/libs/zlib.py +92 -0
- karta_ng-2.3.0/src/karta_ng/matching_engine.py +1497 -0
- karta_ng-2.3.0/src/karta_ng/plugins/__init__.py +1 -0
- karta_ng-2.3.0/src/karta_ng/plugins/ida_plugin.py +61 -0
- karta_ng-2.3.0/src/karta_ng/speedups/__init__.py +11 -0
- karta_ng-2.3.0/src/karta_ng/speedups/bootstrap.py +29 -0
- karta_ng-2.3.0/src/karta_ng/speedups/install.py +45 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/__init__.py +5 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/analyzer_utils.py +825 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/analyzers/__init__.py +15 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/analyzers/analyzer.py +366 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/analyzers/analyzer_factory.py +49 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/analyzers/arm.py +258 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/analyzers/intel.py +149 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/analyzers/mips.py +253 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/thumbs_up_ELF.py +203 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/thumbs_up_firmware.py +246 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/__init__.py +17 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/code_metric.py +163 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/code_regions.py +170 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/fptr.py +427 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/function.py +414 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/local_constants.py +159 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/pattern_observer.py +252 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/strings.py +273 -0
- karta_ng-2.3.0/src/karta_ng/thumbs_up/utils/switch_table.py +319 -0
- karta_ng-2.3.0/src/karta_ng.egg-info/PKG-INFO +23 -0
- karta_ng-2.3.0/src/karta_ng.egg-info/SOURCES.txt +335 -0
- karta_ng-2.3.0/src/karta_ng.egg-info/dependency_links.txt +1 -0
- karta_ng-2.3.0/src/karta_ng.egg-info/entry_points.txt +3 -0
- karta_ng-2.3.0/src/karta_ng.egg-info/requires.txt +19 -0
- karta_ng-2.3.0/src/karta_ng.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Cython speedups must ship in sdists so a source install can build them.
|
|
2
|
+
recursive-include src/karta_ng/speedups *.pyx
|
|
3
|
+
recursive-include src/karta_ng/speedups *.pxd
|
|
4
|
+
|
|
5
|
+
# Never ship build output or VCS metadata.
|
|
6
|
+
prune build
|
|
7
|
+
prune dist
|
|
8
|
+
prune *.egg-info
|
|
9
|
+
global-exclude *.o *.a *.so *.dylib *.pyc __pycache__
|
karta_ng-2.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: karta-ng
|
|
3
|
+
Version: 2.3.0
|
|
4
|
+
Summary: karta-ng (Karta next-gen): identify and match open-source libraries inside binaries. Structural function fingerprinting and location-driven matching for malware and firmware analysis.
|
|
5
|
+
Author-email: Mahmoud Abdelkader <mabdelkader@gmail.com>
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: elementals
|
|
9
|
+
Requires-Dist: click
|
|
10
|
+
Requires-Dist: scikit-learn>=1.5.0
|
|
11
|
+
Provides-Extra: speedups
|
|
12
|
+
Requires-Dist: Cython>=3.0.0; extra == "speedups"
|
|
13
|
+
Provides-Extra: domain
|
|
14
|
+
Requires-Dist: ida-domain>=0.5.1; extra == "domain"
|
|
15
|
+
Provides-Extra: dev
|
|
16
|
+
Requires-Dist: setuptools>=77.0.1; extra == "dev"
|
|
17
|
+
Requires-Dist: libcst>=1.0.0; extra == "dev"
|
|
18
|
+
Requires-Dist: import-linter>=2.0; extra == "dev"
|
|
19
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
20
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
21
|
+
Requires-Dist: coverage[toml]>=7.0.0; extra == "dev"
|
|
22
|
+
Requires-Dist: ruff>=0.12; extra == "dev"
|
|
23
|
+
Requires-Dist: pydocstyle; extra == "dev"
|
karta_ng-2.3.0/README.md
ADDED
|
File without changes
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77.0.1", "wheel", "Cython>=3.0.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "karta-ng"
|
|
7
|
+
requires-python = ">= 3.10"
|
|
8
|
+
dynamic = ["version"]
|
|
9
|
+
authors = [
|
|
10
|
+
{ name = "Mahmoud Abdelkader", email = "mabdelkader@gmail.com" },
|
|
11
|
+
]
|
|
12
|
+
description = "karta-ng (Karta next-gen): identify and match open-source libraries inside binaries. Structural function fingerprinting and location-driven matching for malware and firmware analysis."
|
|
13
|
+
readme = "README.md"
|
|
14
|
+
dependencies = [
|
|
15
|
+
"elementals",
|
|
16
|
+
"click",
|
|
17
|
+
"scikit-learn>=1.5.0",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[project.optional-dependencies]
|
|
21
|
+
speedups = ["Cython>=3.0.0"]
|
|
22
|
+
domain = ["ida-domain>=0.5.1"] # IDA Domain API (requires IDA 9.1+/idapro)
|
|
23
|
+
dev = [
|
|
24
|
+
"setuptools>=77.0.1",
|
|
25
|
+
"libcst>=1.0.0",
|
|
26
|
+
"import-linter>=2.0",
|
|
27
|
+
"pytest>=7.0.0",
|
|
28
|
+
"pytest-cov>=4.0.0",
|
|
29
|
+
"coverage[toml]>=7.0.0",
|
|
30
|
+
"ruff>=0.12",
|
|
31
|
+
"pydocstyle",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
[project.scripts]
|
|
35
|
+
install-speedups = "karta_ng.speedups.install:main"
|
|
36
|
+
karta-analyze-src = "karta_ng.karta_analyze_src:main"
|
|
37
|
+
|
|
38
|
+
[tool.setuptools]
|
|
39
|
+
package-dir = { "" = "src" }
|
|
40
|
+
|
|
41
|
+
[tool.setuptools.dynamic]
|
|
42
|
+
version = { attr = "karta_ng.__version__" }
|
|
43
|
+
|
|
44
|
+
[tool.setuptools.packages.find]
|
|
45
|
+
where = ["src"]
|
|
46
|
+
|
|
47
|
+
# pytest configuration
|
|
48
|
+
[tool.pytest.ini_options]
|
|
49
|
+
testpaths = ["tests"]
|
|
50
|
+
python_files = ["test_*.py"]
|
|
51
|
+
python_classes = ["Test*"]
|
|
52
|
+
python_functions = ["test_*"]
|
|
53
|
+
addopts = ["-m", "not requires_ida and not slow"]
|
|
54
|
+
markers = [
|
|
55
|
+
"requires_ida: Tests that require IDA Pro to run",
|
|
56
|
+
"runtime: IDA runtime invariant/API/stability tests",
|
|
57
|
+
"e2e: End-to-end pipeline tests with golden output comparison",
|
|
58
|
+
"slow: Slow tests (>10s) - typically long-running matching",
|
|
59
|
+
"integration: mark test as integration test",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[tool.coverage.run]
|
|
63
|
+
source = ["src/karta_ng"]
|
|
64
|
+
omit = [
|
|
65
|
+
"*/tests/*",
|
|
66
|
+
"*/test_*",
|
|
67
|
+
"*/__pycache__/*",
|
|
68
|
+
# Seekers and the ML classifier are fixture-driven: without a real
|
|
69
|
+
# library corpus they are only imported, not exercised. Exclude them
|
|
70
|
+
# from the coverage gate so it measures the testable core instead of
|
|
71
|
+
# being dragged down by an untestable surface.
|
|
72
|
+
"src/karta_ng/libs/*",
|
|
73
|
+
"src/karta_ng/thumbs_up/*",
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
[tool.coverage.report]
|
karta_ng-2.3.0/setup.cfg
ADDED
karta_ng-2.3.0/setup.py
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""Optional Cython extension builder for karta-ng.
|
|
2
|
+
|
|
3
|
+
By default, karta-ng installs as a pure Python package.
|
|
4
|
+
To build with Cython speedups:
|
|
5
|
+
|
|
6
|
+
KARTA_NG_BUILD_SPEEDUPS=1 pip install -e .[speedups]
|
|
7
|
+
|
|
8
|
+
This setup.py only handles ext_modules; all other config is in pyproject.toml.
|
|
9
|
+
Any ``.pyx`` files placed under ``src/karta_ng/speedups/`` are compiled when the
|
|
10
|
+
env var is set; otherwise the pure-Python implementations are used.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
import pathlib
|
|
15
|
+
|
|
16
|
+
from setuptools import setup
|
|
17
|
+
|
|
18
|
+
BUILD_SPEEDUPS = os.environ.get("KARTA_NG_BUILD_SPEEDUPS", "0") == "1"
|
|
19
|
+
DEBUG = os.environ.get("DEBUG") == "1"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_ext_modules():
|
|
23
|
+
"""Build Cython extensions if KARTA_NG_BUILD_SPEEDUPS=1, else return []."""
|
|
24
|
+
want_speedups = os.environ.get("KARTA_NG_BUILD_SPEEDUPS", "0") == "1"
|
|
25
|
+
if not want_speedups:
|
|
26
|
+
return []
|
|
27
|
+
|
|
28
|
+
try:
|
|
29
|
+
from Cython.Build import cythonize
|
|
30
|
+
from setuptools import Extension
|
|
31
|
+
except ImportError:
|
|
32
|
+
raise ImportError(
|
|
33
|
+
"Cython is required to build speedups. "
|
|
34
|
+
"Install with: pip install 'karta-ng[speedups]'"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
speedups_root = pathlib.Path(__file__).parent / "src" / "karta_ng" / "speedups"
|
|
38
|
+
pyx_files = sorted(str(p) for p in speedups_root.rglob("*.pyx"))
|
|
39
|
+
if not pyx_files:
|
|
40
|
+
print("[speedups] no .pyx files found under src/karta_ng/speedups; nothing to build")
|
|
41
|
+
return []
|
|
42
|
+
|
|
43
|
+
macros = []
|
|
44
|
+
if DEBUG:
|
|
45
|
+
macros.extend([("CYTHON_TRACE", "1"), ("CYTHON_CLINE_IN_TRACEBACK", "1")])
|
|
46
|
+
|
|
47
|
+
return cythonize(
|
|
48
|
+
[
|
|
49
|
+
Extension(
|
|
50
|
+
pathlib.Path(p).with_suffix("").as_posix().replace("/", "."),
|
|
51
|
+
[p],
|
|
52
|
+
language="c++",
|
|
53
|
+
define_macros=macros,
|
|
54
|
+
extra_compile_args=(
|
|
55
|
+
["-g", "-O0"] if DEBUG else []
|
|
56
|
+
),
|
|
57
|
+
)
|
|
58
|
+
for p in pyx_files
|
|
59
|
+
],
|
|
60
|
+
compiler_directives={
|
|
61
|
+
"language_level": "3",
|
|
62
|
+
"binding": True,
|
|
63
|
+
"embedsignature": True,
|
|
64
|
+
"boundscheck": False,
|
|
65
|
+
"wraparound": False,
|
|
66
|
+
"profile": DEBUG,
|
|
67
|
+
"linetrace": DEBUG,
|
|
68
|
+
},
|
|
69
|
+
annotate=DEBUG,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# Minimal setup() - everything else comes from pyproject.toml
|
|
74
|
+
setup(ext_modules=get_ext_modules())
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from karta_ng.config.utils import (
|
|
2
|
+
get_disas,
|
|
3
|
+
set_windows_mode,
|
|
4
|
+
functions_to_file,
|
|
5
|
+
LIBRARY_NAME,
|
|
6
|
+
construct_init_log_path,
|
|
7
|
+
init_utils,
|
|
8
|
+
register_contexts,
|
|
9
|
+
construct_log_path,
|
|
10
|
+
)
|
|
11
|
+
from karta_ng.disassembler.factory import create_disassembler_handler
|
|
12
|
+
from karta_ng.function_context import SourceContext, BinaryContext, IslandContext
|
|
13
|
+
from elementals import Logger
|
|
14
|
+
import logging
|
|
15
|
+
import traceback
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def analyze_file():
|
|
19
|
+
"""Analyzes all of the (source) functions for a single compiled file."""
|
|
20
|
+
disas = get_disas()
|
|
21
|
+
logger.info("Started the Script")
|
|
22
|
+
contexts = []
|
|
23
|
+
# check for windows binary
|
|
24
|
+
if disas.input_file().endswith(".obj"):
|
|
25
|
+
logger.debug("Activating Windows mode")
|
|
26
|
+
set_windows_mode()
|
|
27
|
+
# build the list of exported (non-static) functions
|
|
28
|
+
exported = disas.exports()
|
|
29
|
+
for segment_idx in range(disas.num_segments()):
|
|
30
|
+
# Some executables use "_text" and some use ".text", so just look for "text"
|
|
31
|
+
# in section name. Also look for other sections marked executable.
|
|
32
|
+
if "text" not in disas.segment_name(segment_idx) and "X" not in disas.segment_permissions(segment_idx):
|
|
33
|
+
continue
|
|
34
|
+
for function_ea in disas.segment_functions(segment_idx):
|
|
35
|
+
src_ctx = disas.analyze_function(function_ea, True)
|
|
36
|
+
# check if static or not
|
|
37
|
+
if src_ctx.name not in exported:
|
|
38
|
+
src_ctx.mark_static()
|
|
39
|
+
contexts.append(src_ctx)
|
|
40
|
+
functions_to_file(disas.input_file(), contexts)
|
|
41
|
+
logger.info("Finished Successfully")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Create a basic logger for the init phase
|
|
45
|
+
init_logger = Logger(LIBRARY_NAME)
|
|
46
|
+
init_logger.linkHandler(logging.FileHandler(construct_init_log_path(), "w"))
|
|
47
|
+
disas = create_disassembler_handler(init_logger)
|
|
48
|
+
# In case of a dependency issue, disas will be None
|
|
49
|
+
if disas is None:
|
|
50
|
+
exit()
|
|
51
|
+
# Always init the utils before we start (now with the real logger too)
|
|
52
|
+
logger = Logger(LIBRARY_NAME, use_stdout=False)
|
|
53
|
+
init_utils(logger, disas)
|
|
54
|
+
# Register our contexts
|
|
55
|
+
register_contexts(SourceContext, BinaryContext, IslandContext)
|
|
56
|
+
# Start to analyze the file
|
|
57
|
+
try:
|
|
58
|
+
logger.linkHandler(logging.FileHandler(construct_log_path(), "w"))
|
|
59
|
+
analyze_file()
|
|
60
|
+
except Exception:
|
|
61
|
+
logger.error(traceback.format_exc())
|
|
62
|
+
# Exit the disassembler
|
|
63
|
+
get_disas().exit()
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
def get_archive_files(ar_path):
|
|
2
|
+
"""Return an ordered list of the files within the .ar archive.
|
|
3
|
+
|
|
4
|
+
Args:
|
|
5
|
+
ar_path (str): path to the compiled *.ar file
|
|
6
|
+
|
|
7
|
+
Return Value:
|
|
8
|
+
Ordered list of file names
|
|
9
|
+
"""
|
|
10
|
+
import shutil
|
|
11
|
+
ar_bin = shutil.which("ar")
|
|
12
|
+
names = []
|
|
13
|
+
|
|
14
|
+
if ar_bin:
|
|
15
|
+
import subprocess
|
|
16
|
+
proc = subprocess.run([ar_bin, "t", ar_path], capture_output=True, text=True)
|
|
17
|
+
if proc.returncode == 0:
|
|
18
|
+
for line in proc.stdout.split("\n"):
|
|
19
|
+
if line:
|
|
20
|
+
names.append(line)
|
|
21
|
+
|
|
22
|
+
if not names:
|
|
23
|
+
ar_fd = open(ar_path, "rb")
|
|
24
|
+
is_windows = ar_path.endswith(".lib")
|
|
25
|
+
|
|
26
|
+
# check the signature
|
|
27
|
+
if ar_fd.read(8) != b"!<arch>\n":
|
|
28
|
+
raise ValueError("Invalid archive signature")
|
|
29
|
+
|
|
30
|
+
# split the content to parts
|
|
31
|
+
ar_content = ar_fd.read()
|
|
32
|
+
for ar_part in ar_content.split(b"\x60\x0A")[:-1]:
|
|
33
|
+
# .ar file format (unix) seems simpler
|
|
34
|
+
if not is_windows:
|
|
35
|
+
# sanity check
|
|
36
|
+
if len(ar_part) < 58:
|
|
37
|
+
continue
|
|
38
|
+
# now read the metadata of the record
|
|
39
|
+
name = ar_part[-58:].split(b'/')[0]
|
|
40
|
+
if not name.endswith(b".o"):
|
|
41
|
+
continue
|
|
42
|
+
# .lib file format is more complex
|
|
43
|
+
else:
|
|
44
|
+
if ar_part.find(b".obj") == -1:
|
|
45
|
+
continue
|
|
46
|
+
name = ar_part.split(b".obj")[-2].split(b"\x00")[-1].split(b"\\")[-1] + b".obj"
|
|
47
|
+
name = name.strip()
|
|
48
|
+
# append the new record
|
|
49
|
+
if name not in names and len(name) > 0:
|
|
50
|
+
names.append(name.decode("utf-8"))
|
|
51
|
+
ar_fd.close()
|
|
52
|
+
return names
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
from .utils import (
|
|
2
|
+
DISASSEMBLER_PATH,
|
|
3
|
+
GUI_CMD_IMPORT_MATCHED,
|
|
4
|
+
GUI_CMD_IMPORT_SELECTED,
|
|
5
|
+
GUI_COLOR_DARK_GREEN,
|
|
6
|
+
GUI_COLOR_DARK_RED,
|
|
7
|
+
GUI_COLOR_GRAY,
|
|
8
|
+
GUI_COLOR_GREEN,
|
|
9
|
+
GUI_COLOR_RED,
|
|
10
|
+
GUI_MATCH_REASONS,
|
|
11
|
+
JSON_TAG_ANCHORS,
|
|
12
|
+
JSON_TAG_FILES,
|
|
13
|
+
JSON_TAG_LIBRARY,
|
|
14
|
+
JSON_TAG_MANUAL_ANCHORS,
|
|
15
|
+
JSON_TAG_MANUAL_VERSIONS,
|
|
16
|
+
KNOWLEDGE_FILE_SUFFIX,
|
|
17
|
+
KartaException,
|
|
18
|
+
LIBRARY_NAME,
|
|
19
|
+
LOG_FILE_SUFFIX,
|
|
20
|
+
REASON_AGENT,
|
|
21
|
+
REASON_ANCHOR,
|
|
22
|
+
REASON_CALL_ORDER,
|
|
23
|
+
REASON_COLLISION,
|
|
24
|
+
REASON_DISABLED,
|
|
25
|
+
REASON_FILE_HINT,
|
|
26
|
+
REASON_FILE_SINGLETON,
|
|
27
|
+
REASON_LIBRARY_UNUSED,
|
|
28
|
+
REASON_MANUAL_ANCHOR,
|
|
29
|
+
REASON_NEIGHBOUR,
|
|
30
|
+
REASON_SCORE,
|
|
31
|
+
REASON_SINGLE_CALL,
|
|
32
|
+
REASON_SINGLE_XREF,
|
|
33
|
+
REASON_STATIC_UNUSED,
|
|
34
|
+
REASON_STRUCTURAL_SIGNATURE,
|
|
35
|
+
REASON_SWALLOW,
|
|
36
|
+
REASON_TRAPPED_COUPLE,
|
|
37
|
+
SCRIPT_PATH,
|
|
38
|
+
STATE_FILE_SUFFIX,
|
|
39
|
+
accumulated_knowledge_path,
|
|
40
|
+
are_neighbours_safe,
|
|
41
|
+
bin_func_class,
|
|
42
|
+
bin_instr_count,
|
|
43
|
+
binary_context,
|
|
44
|
+
construct_config_path,
|
|
45
|
+
construct_init_log_path,
|
|
46
|
+
construct_log_path,
|
|
47
|
+
count_set_bits,
|
|
48
|
+
disas_layer,
|
|
49
|
+
functions_to_file,
|
|
50
|
+
get_contexts_stats,
|
|
51
|
+
get_disas,
|
|
52
|
+
get_disas_path,
|
|
53
|
+
get_neighbour_score,
|
|
54
|
+
get_source_functions,
|
|
55
|
+
global_logger,
|
|
56
|
+
init_utils,
|
|
57
|
+
island_context,
|
|
58
|
+
island_func_class,
|
|
59
|
+
is_matching,
|
|
60
|
+
isWindows,
|
|
61
|
+
libraryName,
|
|
62
|
+
load_knowledge,
|
|
63
|
+
matched_library_name,
|
|
64
|
+
matching_mode,
|
|
65
|
+
measure_bits_entropy,
|
|
66
|
+
measure_bits_variance,
|
|
67
|
+
num_instr_samples,
|
|
68
|
+
num_neighbours_matched,
|
|
69
|
+
num_neighbours_mismatched,
|
|
70
|
+
parse_file_stats,
|
|
71
|
+
rank_const,
|
|
72
|
+
record_instr_ratio,
|
|
73
|
+
record_neighbour_match,
|
|
74
|
+
register_contexts,
|
|
75
|
+
reset_ratio,
|
|
76
|
+
reset_scoring,
|
|
77
|
+
set_disassembler_path,
|
|
78
|
+
set_matching_mode,
|
|
79
|
+
set_windows_mode,
|
|
80
|
+
source_context,
|
|
81
|
+
src_file_mappings,
|
|
82
|
+
src_func_class,
|
|
83
|
+
src_functions_ctx,
|
|
84
|
+
src_functions_list,
|
|
85
|
+
src_instr_count,
|
|
86
|
+
src_seen_consts,
|
|
87
|
+
src_seen_strings,
|
|
88
|
+
store_knowledge,
|
|
89
|
+
windows_config,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
from .score_config import (
|
|
93
|
+
AGENT_BOOST_SCORE,
|
|
94
|
+
ARTIFACT_MATCH_SCORE,
|
|
95
|
+
BLOCK_MATCH_SCORE,
|
|
96
|
+
BLOCK_MISMATCH_SCORE,
|
|
97
|
+
CALL_COUNT_SCORE,
|
|
98
|
+
CONST_BOOST_BIT_FLAG,
|
|
99
|
+
CONST_BOOST_SMALL_FUNCS,
|
|
100
|
+
CONST_BOOST_SPECIAL,
|
|
101
|
+
CONST_SPECIAL_VALUES,
|
|
102
|
+
EXISTENCE_BOOST_SCORE,
|
|
103
|
+
EXTERNAL_COUNT_SCORE,
|
|
104
|
+
EXT_FUNC_MATCH_SCORE,
|
|
105
|
+
FRAME_SAFETY_GAP,
|
|
106
|
+
FRAME_SIZE_THRESHOLD,
|
|
107
|
+
FUNC_FRAME_SCORE,
|
|
108
|
+
FUNC_HINT_SCORE,
|
|
109
|
+
INSTR_COUNT_SCORE,
|
|
110
|
+
INSTR_COUNT_THRESHOLD,
|
|
111
|
+
INSTR_RATIO_COUNT_THRESHOLD,
|
|
112
|
+
LIBC_COMP_FUNC_MATCH_SCORE,
|
|
113
|
+
LIBC_FUNC_MATCH_SCORE,
|
|
114
|
+
LOCATION_BOOST_LOW_THRESHOLD,
|
|
115
|
+
LOCATION_BOOST_SCORE,
|
|
116
|
+
LOCATION_BOOST_TOP_THRESHOLD,
|
|
117
|
+
MATCHED_CALL_SCORE,
|
|
118
|
+
MINIMAL_BLOCKS_BOOST,
|
|
119
|
+
MINIMAL_ISLAND_SCORE,
|
|
120
|
+
MINIMAL_MATCH_SCORE,
|
|
121
|
+
MINIMAL_NEIGHBOUR_THRESHOLD,
|
|
122
|
+
MIN_STR_SIZE,
|
|
123
|
+
NUM_BITS_IN_CONST,
|
|
124
|
+
SAFTEY_GAP_SCORE,
|
|
125
|
+
STATIC_VIOLATION_PENALTY,
|
|
126
|
+
STRING_MATCH_SCORE,
|
|
127
|
+
STRING_MISMATCH_SCORE,
|
|
128
|
+
STRING_NAME_SCORE,
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
from .libc_config import (
|
|
132
|
+
gcc_skip_functions,
|
|
133
|
+
gcc_skip_math_functions,
|
|
134
|
+
libc_comp_function_names,
|
|
135
|
+
libc_function_names,
|
|
136
|
+
libc_functions,
|
|
137
|
+
skip_function_names,
|
|
138
|
+
windows_skip_functions,
|
|
139
|
+
windows_skip_math_functions,
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
from .anchor_config import (
|
|
143
|
+
CONST_COMPLEX_GROUP,
|
|
144
|
+
CONST_COMPLEX_LIMIT,
|
|
145
|
+
CONST_MEDIUM_GROUP,
|
|
146
|
+
CONST_MEDIUM_LIMIT,
|
|
147
|
+
MAXIMAL_CONST_SEARCH_RATE,
|
|
148
|
+
MAXIMAL_CONST_SEARCH_TIME,
|
|
149
|
+
STRING_HUGE_GROUP,
|
|
150
|
+
STRING_HUGE_LIMIT,
|
|
151
|
+
STRING_LONG_GROUP,
|
|
152
|
+
STRING_LONG_LIMIT,
|
|
153
|
+
STRING_MEDIUM_GROUP,
|
|
154
|
+
STRING_MEDIUM_LIMIT,
|
|
155
|
+
STRING_SHORT_GROUP,
|
|
156
|
+
STRING_SHORT_LIMIT,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
from .anchor import (
|
|
160
|
+
is_agent,
|
|
161
|
+
isAnchor,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
__all__ = [
|
|
165
|
+
# From utils
|
|
166
|
+
"DISASSEMBLER_PATH",
|
|
167
|
+
"GUI_CMD_IMPORT_MATCHED",
|
|
168
|
+
"GUI_CMD_IMPORT_SELECTED",
|
|
169
|
+
"GUI_COLOR_DARK_GREEN",
|
|
170
|
+
"GUI_COLOR_DARK_RED",
|
|
171
|
+
"GUI_COLOR_GRAY",
|
|
172
|
+
"GUI_COLOR_GREEN",
|
|
173
|
+
"GUI_COLOR_RED",
|
|
174
|
+
"GUI_MATCH_REASONS",
|
|
175
|
+
"JSON_TAG_ANCHORS",
|
|
176
|
+
"JSON_TAG_FILES",
|
|
177
|
+
"JSON_TAG_LIBRARY",
|
|
178
|
+
"JSON_TAG_MANUAL_ANCHORS",
|
|
179
|
+
"JSON_TAG_MANUAL_VERSIONS",
|
|
180
|
+
"KNOWLEDGE_FILE_SUFFIX",
|
|
181
|
+
"KartaException",
|
|
182
|
+
"LIBRARY_NAME",
|
|
183
|
+
"LOG_FILE_SUFFIX",
|
|
184
|
+
"REASON_AGENT",
|
|
185
|
+
"REASON_ANCHOR",
|
|
186
|
+
"REASON_CALL_ORDER",
|
|
187
|
+
"REASON_COLLISION",
|
|
188
|
+
"REASON_DISABLED",
|
|
189
|
+
"REASON_FILE_HINT",
|
|
190
|
+
"REASON_FILE_SINGLETON",
|
|
191
|
+
"REASON_LIBRARY_UNUSED",
|
|
192
|
+
"REASON_MANUAL_ANCHOR",
|
|
193
|
+
"REASON_NEIGHBOUR",
|
|
194
|
+
"REASON_SCORE",
|
|
195
|
+
"REASON_SINGLE_CALL",
|
|
196
|
+
"REASON_SINGLE_XREF",
|
|
197
|
+
"REASON_STATIC_UNUSED",
|
|
198
|
+
"REASON_STRUCTURAL_SIGNATURE",
|
|
199
|
+
"REASON_SWALLOW",
|
|
200
|
+
"REASON_TRAPPED_COUPLE",
|
|
201
|
+
"SCRIPT_PATH",
|
|
202
|
+
"STATE_FILE_SUFFIX",
|
|
203
|
+
"accumulatedKnowledgePath",
|
|
204
|
+
"areNeighboursSafe",
|
|
205
|
+
"bin_func_class",
|
|
206
|
+
"bin_instr_count",
|
|
207
|
+
"binaryContext",
|
|
208
|
+
"constructConfigPath",
|
|
209
|
+
"constructInitLogPath",
|
|
210
|
+
"constructLogPath",
|
|
211
|
+
"countSetBits",
|
|
212
|
+
"disas_layer",
|
|
213
|
+
"functionsToFile",
|
|
214
|
+
"getContextsStats",
|
|
215
|
+
"getDisas",
|
|
216
|
+
"getDisasPath",
|
|
217
|
+
"getNeighbourScore",
|
|
218
|
+
"getSourceFunctions",
|
|
219
|
+
"global_logger",
|
|
220
|
+
"initUtils",
|
|
221
|
+
"islandContext",
|
|
222
|
+
"island_func_class",
|
|
223
|
+
"isMatching",
|
|
224
|
+
"isWindows",
|
|
225
|
+
"libraryName",
|
|
226
|
+
"loadKnowledge",
|
|
227
|
+
"matched_library_name",
|
|
228
|
+
"matching_mode",
|
|
229
|
+
"measureBitsEntropy",
|
|
230
|
+
"measureBitsVariance",
|
|
231
|
+
"num_instr_samples",
|
|
232
|
+
"num_neighbours_matched",
|
|
233
|
+
"num_neighbours_mismatched",
|
|
234
|
+
"parseFileStats",
|
|
235
|
+
"rankConst",
|
|
236
|
+
"recordInstrRatio",
|
|
237
|
+
"recordNeighbourMatch",
|
|
238
|
+
"registerContexts",
|
|
239
|
+
"resetRatio",
|
|
240
|
+
"resetScoring",
|
|
241
|
+
"setDisassemblerPath",
|
|
242
|
+
"setMatchingMode",
|
|
243
|
+
"setWindowsMode",
|
|
244
|
+
"sourceContext",
|
|
245
|
+
"src_file_mappings",
|
|
246
|
+
"src_func_class",
|
|
247
|
+
"src_functions_ctx",
|
|
248
|
+
"src_functions_list",
|
|
249
|
+
"src_instr_count",
|
|
250
|
+
"src_seen_consts",
|
|
251
|
+
"src_seen_strings",
|
|
252
|
+
"storeKnowledge",
|
|
253
|
+
"windows_config",
|
|
254
|
+
# From score_config
|
|
255
|
+
"AGENT_BOOST_SCORE",
|
|
256
|
+
"ARTIFACT_MATCH_SCORE",
|
|
257
|
+
"BLOCK_MATCH_SCORE",
|
|
258
|
+
"BLOCK_MISMATCH_SCORE",
|
|
259
|
+
"CALL_COUNT_SCORE",
|
|
260
|
+
"CONST_BOOST_BIT_FLAG",
|
|
261
|
+
"CONST_BOOST_SMALL_FUNCS",
|
|
262
|
+
"CONST_BOOST_SPECIAL",
|
|
263
|
+
"CONST_SPECIAL_VALUES",
|
|
264
|
+
"EXISTENCE_BOOST_SCORE",
|
|
265
|
+
"EXTERNAL_COUNT_SCORE",
|
|
266
|
+
"EXT_FUNC_MATCH_SCORE",
|
|
267
|
+
"FRAME_SAFETY_GAP",
|
|
268
|
+
"FRAME_SIZE_THRESHOLD",
|
|
269
|
+
"FUNC_FRAME_SCORE",
|
|
270
|
+
"FUNC_HINT_SCORE",
|
|
271
|
+
"INSTR_COUNT_SCORE",
|
|
272
|
+
"INSTR_COUNT_THRESHOLD",
|
|
273
|
+
"INSTR_RATIO_COUNT_THRESHOLD",
|
|
274
|
+
"LIBC_COMP_FUNC_MATCH_SCORE",
|
|
275
|
+
"LIBC_FUNC_MATCH_SCORE",
|
|
276
|
+
"LOCATION_BOOST_LOW_THRESHOLD",
|
|
277
|
+
"LOCATION_BOOST_SCORE",
|
|
278
|
+
"LOCATION_BOOST_TOP_THRESHOLD",
|
|
279
|
+
"MATCHED_CALL_SCORE",
|
|
280
|
+
"MINIMAL_BLOCKS_BOOST",
|
|
281
|
+
"MINIMAL_ISLAND_SCORE",
|
|
282
|
+
"MINIMAL_MATCH_SCORE",
|
|
283
|
+
"MINIMAL_NEIGHBOUR_THRESHOLD",
|
|
284
|
+
"MIN_STR_SIZE",
|
|
285
|
+
"NUM_BITS_IN_CONST",
|
|
286
|
+
"SAFTEY_GAP_SCORE",
|
|
287
|
+
"STATIC_VIOLATION_PENALTY",
|
|
288
|
+
"STRING_MATCH_SCORE",
|
|
289
|
+
"STRING_MISMATCH_SCORE",
|
|
290
|
+
"STRING_NAME_SCORE",
|
|
291
|
+
# From libc_config
|
|
292
|
+
"gcc_skip_functions",
|
|
293
|
+
"gcc_skip_math_functions",
|
|
294
|
+
"libc_comp_function_names",
|
|
295
|
+
"libc_function_names",
|
|
296
|
+
"libc_functions",
|
|
297
|
+
"skip_function_names",
|
|
298
|
+
"windows_skip_functions",
|
|
299
|
+
"windows_skip_math_functions",
|
|
300
|
+
# From anchor_config
|
|
301
|
+
"CONST_COMPLEX_GROUP",
|
|
302
|
+
"CONST_COMPLEX_LIMIT",
|
|
303
|
+
"CONST_MEDIUM_GROUP",
|
|
304
|
+
"CONST_MEDIUM_LIMIT",
|
|
305
|
+
"MAXIMAL_CONST_SEARCH_RATE",
|
|
306
|
+
"MAXIMAL_CONST_SEARCH_TIME",
|
|
307
|
+
"STRING_HUGE_GROUP",
|
|
308
|
+
"STRING_HUGE_LIMIT",
|
|
309
|
+
"STRING_LONG_GROUP",
|
|
310
|
+
"STRING_LONG_LIMIT",
|
|
311
|
+
"STRING_MEDIUM_GROUP",
|
|
312
|
+
"STRING_MEDIUM_LIMIT",
|
|
313
|
+
"STRING_SHORT_GROUP",
|
|
314
|
+
"STRING_SHORT_LIMIT",
|
|
315
|
+
# From anchor
|
|
316
|
+
"isAgent",
|
|
317
|
+
"isAnchor",
|
|
318
|
+
]
|