contrast-agent 3.8.4
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.
- checksums.yaml +7 -0
- data/.clang-format +5 -0
- data/.dockerignore +10 -0
- data/.gitignore +58 -0
- data/.gitmodules +6 -0
- data/.rspec +6 -0
- data/.simplecov +4 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +12 -0
- data/Rakefile +15 -0
- data/exe/contrast_service +29 -0
- data/ext/build_funchook.rb +48 -0
- data/ext/cs__assess_active_record_named/cs__active_record_named.c +47 -0
- data/ext/cs__assess_active_record_named/cs__active_record_named.h +10 -0
- data/ext/cs__assess_active_record_named/extconf.rb +2 -0
- data/ext/cs__assess_array/cs__assess_array.c +38 -0
- data/ext/cs__assess_array/cs__assess_array.h +9 -0
- data/ext/cs__assess_array/extconf.rb +2 -0
- data/ext/cs__assess_basic_object/cs__assess_basic_object.c +50 -0
- data/ext/cs__assess_basic_object/cs__assess_basic_object.h +17 -0
- data/ext/cs__assess_basic_object/extconf.rb +2 -0
- data/ext/cs__assess_fiber_track/cs__assess_fiber_track.c +86 -0
- data/ext/cs__assess_fiber_track/cs__assess_fiber_track.h +34 -0
- data/ext/cs__assess_fiber_track/extconf.rb +2 -0
- data/ext/cs__assess_hash/cs__assess_hash.c +64 -0
- data/ext/cs__assess_hash/cs__assess_hash.h +24 -0
- data/ext/cs__assess_hash/extconf.rb +2 -0
- data/ext/cs__assess_kernel/cs__assess_kernel.c +36 -0
- data/ext/cs__assess_kernel/cs__assess_kernel.h +10 -0
- data/ext/cs__assess_kernel/extconf.rb +2 -0
- data/ext/cs__assess_marshal_module/cs__assess_marshal_module.c +47 -0
- data/ext/cs__assess_marshal_module/cs__assess_marshal_module.h +18 -0
- data/ext/cs__assess_marshal_module/extconf.rb +2 -0
- data/ext/cs__assess_module/cs__assess_module.c +78 -0
- data/ext/cs__assess_module/cs__assess_module.h +25 -0
- data/ext/cs__assess_module/extconf.rb +2 -0
- data/ext/cs__assess_regexp/cs__assess_regexp.c +48 -0
- data/ext/cs__assess_regexp/cs__assess_regexp.h +22 -0
- data/ext/cs__assess_regexp/extconf.rb +2 -0
- data/ext/cs__assess_regexp_track/cs__assess_regexp_track.c +63 -0
- data/ext/cs__assess_regexp_track/cs__assess_regexp_track.h +29 -0
- data/ext/cs__assess_regexp_track/extconf.rb +2 -0
- data/ext/cs__assess_string/cs__assess_string.c +38 -0
- data/ext/cs__assess_string/cs__assess_string.h +19 -0
- data/ext/cs__assess_string/extconf.rb +2 -0
- data/ext/cs__assess_string_interpolation26/cs__assess_string_interpolation26.c +31 -0
- data/ext/cs__assess_string_interpolation26/cs__assess_string_interpolation26.h +13 -0
- data/ext/cs__assess_string_interpolation26/extconf.rb +2 -0
- data/ext/cs__common/cs__common.c +60 -0
- data/ext/cs__common/cs__common.h +28 -0
- data/ext/cs__common/extconf.rb +20 -0
- data/ext/cs__contrast_patch/cs__contrast_patch.c +445 -0
- data/ext/cs__contrast_patch/cs__contrast_patch.h +196 -0
- data/ext/cs__contrast_patch/extconf.rb +2 -0
- data/ext/cs__protect_kernel/cs__protect_kernel.c +37 -0
- data/ext/cs__protect_kernel/cs__protect_kernel.h +11 -0
- data/ext/cs__protect_kernel/extconf.rb +2 -0
- data/ext/cs__scope/cs__scope.c +96 -0
- data/ext/cs__scope/cs__scope.h +33 -0
- data/ext/cs__scope/extconf.rb +2 -0
- data/ext/extconf_common.rb +49 -0
- data/funchook/LICENSE +360 -0
- data/funchook/Makefile +29 -0
- data/funchook/Makefile.in +29 -0
- data/funchook/README.md +121 -0
- data/funchook/appveyor.yml +42 -0
- data/funchook/autogen.sh +3 -0
- data/funchook/autom4te.cache/output.0 +4976 -0
- data/funchook/autom4te.cache/requests +78 -0
- data/funchook/autom4te.cache/traces.0 +364 -0
- data/funchook/config.guess +1530 -0
- data/funchook/config.log +490 -0
- data/funchook/config.status +1016 -0
- data/funchook/config.sub +1773 -0
- data/funchook/configure +4976 -0
- data/funchook/configure.ac +59 -0
- data/funchook/distorm/COPYING +26 -0
- data/funchook/distorm/MANIFEST +25 -0
- data/funchook/distorm/MANIFEST.in +4 -0
- data/funchook/distorm/README.md +12 -0
- data/funchook/distorm/disOps/disOps.py +795 -0
- data/funchook/distorm/disOps/x86db.py +404 -0
- data/funchook/distorm/disOps/x86header.py +247 -0
- data/funchook/distorm/disOps/x86sets.py +1664 -0
- data/funchook/distorm/examples/cs/TestdiStorm/Program.cs +79 -0
- data/funchook/distorm/examples/cs/TestdiStorm/Properties/AssemblyInfo.cs +36 -0
- data/funchook/distorm/examples/cs/TestdiStorm/TestdiStorm.csproj +69 -0
- data/funchook/distorm/examples/cs/distorm-net.sln +26 -0
- data/funchook/distorm/examples/cs/distorm-net/CodeInfo.cs +23 -0
- data/funchook/distorm/examples/cs/distorm-net/DecodedInst.cs +15 -0
- data/funchook/distorm/examples/cs/distorm-net/DecodedResult.cs +14 -0
- data/funchook/distorm/examples/cs/distorm-net/DecomposedInst.cs +36 -0
- data/funchook/distorm/examples/cs/distorm-net/DecomposedResult.cs +14 -0
- data/funchook/distorm/examples/cs/distorm-net/Opcodes.cs +1268 -0
- data/funchook/distorm/examples/cs/distorm-net/Opcodes.tt +37 -0
- data/funchook/distorm/examples/cs/distorm-net/Operand.cs +25 -0
- data/funchook/distorm/examples/cs/distorm-net/Properties/AssemblyInfo.cs +36 -0
- data/funchook/distorm/examples/cs/distorm-net/diStorm3.cs +411 -0
- data/funchook/distorm/examples/cs/distorm-net/distorm-net.csproj +80 -0
- data/funchook/distorm/examples/cs/readme +3 -0
- data/funchook/distorm/examples/ddk/README +48 -0
- data/funchook/distorm/examples/ddk/distorm.ini +11 -0
- data/funchook/distorm/examples/ddk/dummy.c +15 -0
- data/funchook/distorm/examples/ddk/main.c +91 -0
- data/funchook/distorm/examples/ddk/makefile +1 -0
- data/funchook/distorm/examples/ddk/sources +10 -0
- data/funchook/distorm/examples/java/Makefile +23 -0
- data/funchook/distorm/examples/java/distorm/src/Main.java +43 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/CodeInfo.java +27 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/DecodedInst.java +32 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/DecodedResult.java +11 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/DecomposedInst.java +89 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/DecomposedResult.java +11 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/OpcodeEnum.java +131 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/Opcodes.java +1123 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/Operand.java +24 -0
- data/funchook/distorm/examples/java/distorm/src/diStorm3/distorm3.java +41 -0
- data/funchook/distorm/examples/java/jdistorm.c +405 -0
- data/funchook/distorm/examples/java/jdistorm.h +40 -0
- data/funchook/distorm/examples/java/jdistorm.sln +20 -0
- data/funchook/distorm/examples/java/jdistorm.vcproj +208 -0
- data/funchook/distorm/examples/linux/Makefile +15 -0
- data/funchook/distorm/examples/linux/main.c +181 -0
- data/funchook/distorm/examples/tests/Makefile +15 -0
- data/funchook/distorm/examples/tests/main.cpp +42 -0
- data/funchook/distorm/examples/tests/main.py +66 -0
- data/funchook/distorm/examples/tests/test_distorm3.py +1672 -0
- data/funchook/distorm/examples/tests/tests.sln +20 -0
- data/funchook/distorm/examples/tests/tests.vcxproj +82 -0
- data/funchook/distorm/examples/tests/tests.vcxproj.filters +22 -0
- data/funchook/distorm/examples/win32/disasm.sln +25 -0
- data/funchook/distorm/examples/win32/disasm.vcxproj +201 -0
- data/funchook/distorm/examples/win32/disasm.vcxproj.filters +14 -0
- data/funchook/distorm/examples/win32/main.cpp +163 -0
- data/funchook/distorm/include/distorm.h +482 -0
- data/funchook/distorm/include/mnemonics.h +301 -0
- data/funchook/distorm/make/linux/Makefile +28 -0
- data/funchook/distorm/make/mac/Makefile +24 -0
- data/funchook/distorm/make/win32/cdistorm.vcxproj +239 -0
- data/funchook/distorm/make/win32/cdistorm.vcxproj.filters +80 -0
- data/funchook/distorm/make/win32/distorm.sln +25 -0
- data/funchook/distorm/make/win32/resource.h +14 -0
- data/funchook/distorm/make/win32/resource.rc +99 -0
- data/funchook/distorm/python/distorm3/__init__.py +957 -0
- data/funchook/distorm/python/distorm3/sample.py +51 -0
- data/funchook/distorm/setup.cfg +10 -0
- data/funchook/distorm/setup.py +266 -0
- data/funchook/distorm/src/config.h +169 -0
- data/funchook/distorm/src/decoder.c +641 -0
- data/funchook/distorm/src/decoder.h +33 -0
- data/funchook/distorm/src/distorm.c +413 -0
- data/funchook/distorm/src/instructions.c +597 -0
- data/funchook/distorm/src/instructions.h +463 -0
- data/funchook/distorm/src/insts.c +7939 -0
- data/funchook/distorm/src/insts.h +64 -0
- data/funchook/distorm/src/mnemonics.c +284 -0
- data/funchook/distorm/src/operands.c +1290 -0
- data/funchook/distorm/src/operands.h +28 -0
- data/funchook/distorm/src/prefix.c +368 -0
- data/funchook/distorm/src/prefix.h +64 -0
- data/funchook/distorm/src/textdefs.c +172 -0
- data/funchook/distorm/src/textdefs.h +57 -0
- data/funchook/distorm/src/wstring.c +47 -0
- data/funchook/distorm/src/wstring.h +35 -0
- data/funchook/distorm/src/x86defs.h +82 -0
- data/funchook/include/funchook.h +123 -0
- data/funchook/install-sh +527 -0
- data/funchook/src/Makefile +70 -0
- data/funchook/src/Makefile.in +70 -0
- data/funchook/src/__strerror.h +109 -0
- data/funchook/src/config.h +101 -0
- data/funchook/src/config.h.in +100 -0
- data/funchook/src/decoder.o +0 -0
- data/funchook/src/distorm.o +0 -0
- data/funchook/src/funchook.c +440 -0
- data/funchook/src/funchook.o +0 -0
- data/funchook/src/funchook_internal.h +155 -0
- data/funchook/src/funchook_io.c +182 -0
- data/funchook/src/funchook_io.h +64 -0
- data/funchook/src/funchook_io.o +0 -0
- data/funchook/src/funchook_syscall.S +134 -0
- data/funchook/src/funchook_syscall.o +0 -0
- data/funchook/src/funchook_unix.c +480 -0
- data/funchook/src/funchook_unix.o +0 -0
- data/funchook/src/funchook_windows.c +397 -0
- data/funchook/src/funchook_x86.c +622 -0
- data/funchook/src/funchook_x86.o +0 -0
- data/funchook/src/instructions.o +0 -0
- data/funchook/src/insts.o +0 -0
- data/funchook/src/libfunchook.so +0 -0
- data/funchook/src/mnemonics.o +0 -0
- data/funchook/src/operands.o +0 -0
- data/funchook/src/os_func.c +115 -0
- data/funchook/src/os_func.h +75 -0
- data/funchook/src/os_func.o +0 -0
- data/funchook/src/os_func_unix.c +94 -0
- data/funchook/src/os_func_unix.o +0 -0
- data/funchook/src/os_func_windows.c +32 -0
- data/funchook/src/prefix.o +0 -0
- data/funchook/src/printf_base.c +1688 -0
- data/funchook/src/printf_base.h +46 -0
- data/funchook/src/printf_base.o +0 -0
- data/funchook/src/textdefs.o +0 -0
- data/funchook/src/wstring.o +0 -0
- data/funchook/test/Makefile +43 -0
- data/funchook/test/Makefile.in +43 -0
- data/funchook/test/funchook_test +0 -0
- data/funchook/test/libfunchook_test.c +25 -0
- data/funchook/test/libfunchook_test.so +0 -0
- data/funchook/test/libfunchook_test2.c +18 -0
- data/funchook/test/suffix.list +600 -0
- data/funchook/test/test_main.c +430 -0
- data/funchook/test/test_main.o +0 -0
- data/funchook/test/x86_64_test.S +10 -0
- data/funchook/test/x86_64_test.o +0 -0
- data/funchook/test/x86_test.S +339 -0
- data/funchook/win32/config.h +1 -0
- data/funchook/win32/funchook.sln +52 -0
- data/funchook/win32/funchook.vcxproj +188 -0
- data/funchook/win32/funchook.vcxproj.filters +84 -0
- data/funchook/win32/funchook_test.vcxproj +170 -0
- data/funchook/win32/funchook_test.vcxproj.filters +22 -0
- data/funchook/win32/funchook_test_dll.vcxproj +184 -0
- data/funchook/win32/funchook_test_dll.vcxproj.filters +30 -0
- data/funchook/win32/funchook_test_exe.def +3 -0
- data/lib/contrast-agent.rb +8 -0
- data/lib/contrast.rb +57 -0
- data/lib/contrast/agent.rb +80 -0
- data/lib/contrast/agent/assess.rb +45 -0
- data/lib/contrast/agent/assess/adjusted_span.rb +25 -0
- data/lib/contrast/agent/assess/class_reverter.rb +82 -0
- data/lib/contrast/agent/assess/contrast_event.rb +398 -0
- data/lib/contrast/agent/assess/frozen_properties.rb +41 -0
- data/lib/contrast/agent/assess/insulator.rb +53 -0
- data/lib/contrast/agent/assess/policy/dynamic_source_factory.rb +78 -0
- data/lib/contrast/agent/assess/policy/patcher.rb +85 -0
- data/lib/contrast/agent/assess/policy/policy.rb +116 -0
- data/lib/contrast/agent/assess/policy/policy_node.rb +289 -0
- data/lib/contrast/agent/assess/policy/policy_scanner.rb +44 -0
- data/lib/contrast/agent/assess/policy/preshift.rb +94 -0
- data/lib/contrast/agent/assess/policy/propagation_method.rb +260 -0
- data/lib/contrast/agent/assess/policy/propagation_node.rb +127 -0
- data/lib/contrast/agent/assess/policy/propagator.rb +35 -0
- data/lib/contrast/agent/assess/policy/propagator/append.rb +54 -0
- data/lib/contrast/agent/assess/policy/propagator/base.rb +37 -0
- data/lib/contrast/agent/assess/policy/propagator/center.rb +73 -0
- data/lib/contrast/agent/assess/policy/propagator/custom.rb +36 -0
- data/lib/contrast/agent/assess/policy/propagator/database_write.rb +62 -0
- data/lib/contrast/agent/assess/policy/propagator/insert.rb +55 -0
- data/lib/contrast/agent/assess/policy/propagator/keep.rb +26 -0
- data/lib/contrast/agent/assess/policy/propagator/next.rb +42 -0
- data/lib/contrast/agent/assess/policy/propagator/prepend.rb +50 -0
- data/lib/contrast/agent/assess/policy/propagator/remove.rb +76 -0
- data/lib/contrast/agent/assess/policy/propagator/replace.rb +27 -0
- data/lib/contrast/agent/assess/policy/propagator/reverse.rb +38 -0
- data/lib/contrast/agent/assess/policy/propagator/select.rb +86 -0
- data/lib/contrast/agent/assess/policy/propagator/splat.rb +60 -0
- data/lib/contrast/agent/assess/policy/propagator/split.rb +49 -0
- data/lib/contrast/agent/assess/policy/propagator/substitution.rb +169 -0
- data/lib/contrast/agent/assess/policy/propagator/trim.rb +81 -0
- data/lib/contrast/agent/assess/policy/rewriter_patch.rb +79 -0
- data/lib/contrast/agent/assess/policy/source_method.rb +209 -0
- data/lib/contrast/agent/assess/policy/source_node.rb +62 -0
- data/lib/contrast/agent/assess/policy/trigger_method.rb +209 -0
- data/lib/contrast/agent/assess/policy/trigger_node.rb +198 -0
- data/lib/contrast/agent/assess/policy/trigger_validation/ssrf_validator.rb +77 -0
- data/lib/contrast/agent/assess/policy/trigger_validation/trigger_validation.rb +31 -0
- data/lib/contrast/agent/assess/policy/trigger_validation/xss_validator.rb +40 -0
- data/lib/contrast/agent/assess/properties.rb +392 -0
- data/lib/contrast/agent/assess/rule.rb +18 -0
- data/lib/contrast/agent/assess/rule/base.rb +72 -0
- data/lib/contrast/agent/assess/rule/csrf.rb +66 -0
- data/lib/contrast/agent/assess/rule/csrf/csrf_action.rb +28 -0
- data/lib/contrast/agent/assess/rule/csrf/csrf_applicator.rb +69 -0
- data/lib/contrast/agent/assess/rule/csrf/csrf_watcher.rb +132 -0
- data/lib/contrast/agent/assess/rule/provider.rb +21 -0
- data/lib/contrast/agent/assess/rule/provider/hardcoded_key.rb +62 -0
- data/lib/contrast/agent/assess/rule/provider/hardcoded_password.rb +73 -0
- data/lib/contrast/agent/assess/rule/provider/hardcoded_value_rule.rb +121 -0
- data/lib/contrast/agent/assess/rule/redos.rb +68 -0
- data/lib/contrast/agent/assess/rule/response_scanning_rule.rb +47 -0
- data/lib/contrast/agent/assess/rule/response_watcher.rb +36 -0
- data/lib/contrast/agent/assess/rule/watcher.rb +36 -0
- data/lib/contrast/agent/assess/tag.rb +151 -0
- data/lib/contrast/agent/at_exit_hook.rb +33 -0
- data/lib/contrast/agent/class_reopener.rb +195 -0
- data/lib/contrast/agent/deadzone/policy/deadzone_node.rb +26 -0
- data/lib/contrast/agent/deadzone/policy/policy.rb +57 -0
- data/lib/contrast/agent/disable_reaction.rb +24 -0
- data/lib/contrast/agent/exclusion_matcher.rb +190 -0
- data/lib/contrast/agent/feature_state.rb +379 -0
- data/lib/contrast/agent/inventory/policy/policy.rb +32 -0
- data/lib/contrast/agent/inventory/policy/trigger_node.rb +22 -0
- data/lib/contrast/agent/logger_manager.rb +116 -0
- data/lib/contrast/agent/middleware.rb +352 -0
- data/lib/contrast/agent/module_data.rb +16 -0
- data/lib/contrast/agent/patching/policy/after_load_patch.rb +37 -0
- data/lib/contrast/agent/patching/policy/after_load_patcher.rb +58 -0
- data/lib/contrast/agent/patching/policy/method_policy.rb +94 -0
- data/lib/contrast/agent/patching/policy/module_policy.rb +116 -0
- data/lib/contrast/agent/patching/policy/patch.rb +312 -0
- data/lib/contrast/agent/patching/policy/patch_status.rb +192 -0
- data/lib/contrast/agent/patching/policy/patcher.rb +310 -0
- data/lib/contrast/agent/patching/policy/policy.rb +138 -0
- data/lib/contrast/agent/patching/policy/policy_node.rb +80 -0
- data/lib/contrast/agent/patching/policy/policy_unpatcher.rb +28 -0
- data/lib/contrast/agent/patching/policy/trigger_node.rb +81 -0
- data/lib/contrast/agent/protect/policy/policy.rb +37 -0
- data/lib/contrast/agent/protect/policy/trigger_node.rb +23 -0
- data/lib/contrast/agent/protect/rule.rb +58 -0
- data/lib/contrast/agent/protect/rule/base.rb +300 -0
- data/lib/contrast/agent/protect/rule/base_service.rb +88 -0
- data/lib/contrast/agent/protect/rule/cmd_injection.rb +156 -0
- data/lib/contrast/agent/protect/rule/csrf.rb +118 -0
- data/lib/contrast/agent/protect/rule/csrf/csrf_evaluator.rb +103 -0
- data/lib/contrast/agent/protect/rule/csrf/csrf_token_injector.rb +85 -0
- data/lib/contrast/agent/protect/rule/default_scanner.rb +300 -0
- data/lib/contrast/agent/protect/rule/deserialization.rb +193 -0
- data/lib/contrast/agent/protect/rule/http_method_tampering.rb +80 -0
- data/lib/contrast/agent/protect/rule/no_sqli.rb +101 -0
- data/lib/contrast/agent/protect/rule/no_sqli/mongo_no_sql_scanner.rb +40 -0
- data/lib/contrast/agent/protect/rule/path_traversal.rb +143 -0
- data/lib/contrast/agent/protect/rule/sqli.rb +101 -0
- data/lib/contrast/agent/protect/rule/sqli/default_sql_scanner.rb +16 -0
- data/lib/contrast/agent/protect/rule/sqli/mysql_sql_scanner.rb +38 -0
- data/lib/contrast/agent/protect/rule/sqli/postgres_sql_scanner.rb +22 -0
- data/lib/contrast/agent/protect/rule/sqli/sqlite_sql_scanner.rb +19 -0
- data/lib/contrast/agent/protect/rule/unsafe_file_upload.rb +20 -0
- data/lib/contrast/agent/protect/rule/xss.rb +24 -0
- data/lib/contrast/agent/protect/rule/xxe.rb +120 -0
- data/lib/contrast/agent/protect/rule/xxe/entity_wrapper.rb +82 -0
- data/lib/contrast/agent/railtie.rb +30 -0
- data/lib/contrast/agent/reaction_processor.rb +47 -0
- data/lib/contrast/agent/request.rb +493 -0
- data/lib/contrast/agent/request_context.rb +225 -0
- data/lib/contrast/agent/require_state.rb +61 -0
- data/lib/contrast/agent/response.rb +215 -0
- data/lib/contrast/agent/rewriter.rb +244 -0
- data/lib/contrast/agent/scope.rb +28 -0
- data/lib/contrast/agent/service_heartbeat.rb +37 -0
- data/lib/contrast/agent/settings_state.rb +148 -0
- data/lib/contrast/agent/socket_client.rb +125 -0
- data/lib/contrast/agent/thread.rb +26 -0
- data/lib/contrast/agent/tracepoint_hook.rb +51 -0
- data/lib/contrast/agent/version.rb +8 -0
- data/lib/contrast/api.rb +17 -0
- data/lib/contrast/api/.gitkeep +0 -0
- data/lib/contrast/api/connection_status.rb +49 -0
- data/lib/contrast/api/socket.rb +43 -0
- data/lib/contrast/api/speedracer.rb +206 -0
- data/lib/contrast/api/tcp_socket.rb +31 -0
- data/lib/contrast/api/unix_socket.rb +25 -0
- data/lib/contrast/common_agent_configuration.rb +86 -0
- data/lib/contrast/components/agent.rb +85 -0
- data/lib/contrast/components/app_context.rb +188 -0
- data/lib/contrast/components/assess.rb +67 -0
- data/lib/contrast/components/config.rb +135 -0
- data/lib/contrast/components/contrast_service.rb +113 -0
- data/lib/contrast/components/heap_dump.rb +34 -0
- data/lib/contrast/components/interface.rb +178 -0
- data/lib/contrast/components/inventory.rb +23 -0
- data/lib/contrast/components/logger.rb +92 -0
- data/lib/contrast/components/protect.rb +38 -0
- data/lib/contrast/components/sampling.rb +41 -0
- data/lib/contrast/components/scope.rb +106 -0
- data/lib/contrast/components/settings.rb +140 -0
- data/lib/contrast/config.rb +33 -0
- data/lib/contrast/config/agent_configuration.rb +24 -0
- data/lib/contrast/config/application_configuration.rb +27 -0
- data/lib/contrast/config/assess_configuration.rb +22 -0
- data/lib/contrast/config/assess_rules_configuration.rb +18 -0
- data/lib/contrast/config/base_configuration.rb +105 -0
- data/lib/contrast/config/default_value.rb +16 -0
- data/lib/contrast/config/exception_configuration.rb +21 -0
- data/lib/contrast/config/heap_dump_configuration.rb +23 -0
- data/lib/contrast/config/inventory_configuration.rb +20 -0
- data/lib/contrast/config/logger_configuration.rb +20 -0
- data/lib/contrast/config/protect_configuration.rb +20 -0
- data/lib/contrast/config/protect_rule_configuration.rb +37 -0
- data/lib/contrast/config/protect_rules_configuration.rb +30 -0
- data/lib/contrast/config/root_configuration.rb +26 -0
- data/lib/contrast/config/ruby_configuration.rb +39 -0
- data/lib/contrast/config/sampling_configuration.rb +22 -0
- data/lib/contrast/config/server_configuration.rb +23 -0
- data/lib/contrast/config/service_configuration.rb +22 -0
- data/lib/contrast/configuration.rb +214 -0
- data/lib/contrast/core_extensions/assess.rb +51 -0
- data/lib/contrast/core_extensions/assess/array.rb +58 -0
- data/lib/contrast/core_extensions/assess/assess_extension.rb +145 -0
- data/lib/contrast/core_extensions/assess/basic_object.rb +15 -0
- data/lib/contrast/core_extensions/assess/erb.rb +42 -0
- data/lib/contrast/core_extensions/assess/exec_trigger.rb +48 -0
- data/lib/contrast/core_extensions/assess/fiber.rb +125 -0
- data/lib/contrast/core_extensions/assess/hash.rb +22 -0
- data/lib/contrast/core_extensions/assess/kernel.rb +95 -0
- data/lib/contrast/core_extensions/assess/module.rb +14 -0
- data/lib/contrast/core_extensions/assess/regexp.rb +206 -0
- data/lib/contrast/core_extensions/assess/string.rb +75 -0
- data/lib/contrast/core_extensions/assess/tilt_template_trigger.rb +73 -0
- data/lib/contrast/core_extensions/delegator.rb +14 -0
- data/lib/contrast/core_extensions/eval_trigger.rb +52 -0
- data/lib/contrast/core_extensions/inventory.rb +22 -0
- data/lib/contrast/core_extensions/inventory/datastores.rb +37 -0
- data/lib/contrast/core_extensions/module.rb +42 -0
- data/lib/contrast/core_extensions/object.rb +27 -0
- data/lib/contrast/core_extensions/protect.rb +20 -0
- data/lib/contrast/core_extensions/protect/applies_command_injection_rule.rb +70 -0
- data/lib/contrast/core_extensions/protect/applies_deserialization_rule.rb +58 -0
- data/lib/contrast/core_extensions/protect/applies_no_sqli_rule.rb +81 -0
- data/lib/contrast/core_extensions/protect/applies_path_traversal_rule.rb +119 -0
- data/lib/contrast/core_extensions/protect/applies_sqli_rule.rb +63 -0
- data/lib/contrast/core_extensions/protect/applies_xxe_rule.rb +141 -0
- data/lib/contrast/core_extensions/protect/kernel.rb +30 -0
- data/lib/contrast/core_extensions/protect/psych.rb +7 -0
- data/lib/contrast/core_extensions/thread.rb +31 -0
- data/lib/contrast/internal_exception.rb +8 -0
- data/lib/contrast/rails_extensions/assess/action_controller_inheritance.rb +48 -0
- data/lib/contrast/rails_extensions/assess/active_record.rb +32 -0
- data/lib/contrast/rails_extensions/assess/active_record_named.rb +61 -0
- data/lib/contrast/rails_extensions/assess/configuration.rb +26 -0
- data/lib/contrast/rails_extensions/buffer.rb +30 -0
- data/lib/contrast/rails_extensions/rack.rb +45 -0
- data/lib/contrast/security_exception.rb +14 -0
- data/lib/contrast/sinatra_extensions/assess/cookie.rb +26 -0
- data/lib/contrast/sinatra_extensions/inventory/sinatra_base.rb +59 -0
- data/lib/contrast/tasks/service.rb +95 -0
- data/lib/contrast/utils/assess/sampling_util.rb +96 -0
- data/lib/contrast/utils/assess/tracking_util.rb +39 -0
- data/lib/contrast/utils/boolean_util.rb +33 -0
- data/lib/contrast/utils/cache.rb +69 -0
- data/lib/contrast/utils/class_util.rb +58 -0
- data/lib/contrast/utils/comment_range.rb +19 -0
- data/lib/contrast/utils/data_store_util.rb +23 -0
- data/lib/contrast/utils/duck_utils.rb +58 -0
- data/lib/contrast/utils/env_configuration_item.rb +52 -0
- data/lib/contrast/utils/environment_util.rb +152 -0
- data/lib/contrast/utils/freeze_util.rb +36 -0
- data/lib/contrast/utils/gemfile_reader.rb +191 -0
- data/lib/contrast/utils/hash_digest.rb +148 -0
- data/lib/contrast/utils/heap_dump_util.rb +113 -0
- data/lib/contrast/utils/invalid_configuration_util.rb +88 -0
- data/lib/contrast/utils/inventory_util.rb +126 -0
- data/lib/contrast/utils/io_util.rb +61 -0
- data/lib/contrast/utils/object_share.rb +117 -0
- data/lib/contrast/utils/operating_environment.rb +38 -0
- data/lib/contrast/utils/os.rb +49 -0
- data/lib/contrast/utils/path_util.rb +151 -0
- data/lib/contrast/utils/performs_logging.rb +152 -0
- data/lib/contrast/utils/preflight_util.rb +13 -0
- data/lib/contrast/utils/prevent_serialization.rb +52 -0
- data/lib/contrast/utils/rack_assess_session_cookie.rb +104 -0
- data/lib/contrast/utils/rails_assess_configuration.rb +95 -0
- data/lib/contrast/utils/random_util.rb +22 -0
- data/lib/contrast/utils/resource_loader.rb +23 -0
- data/lib/contrast/utils/ruby_ast_rewriter.rb +74 -0
- data/lib/contrast/utils/scope_util.rb +99 -0
- data/lib/contrast/utils/service_response_util.rb +116 -0
- data/lib/contrast/utils/service_sender_util.rb +98 -0
- data/lib/contrast/utils/sha256_builder.rb +69 -0
- data/lib/contrast/utils/sinatra_helper.rb +49 -0
- data/lib/contrast/utils/stack_trace_utils.rb +209 -0
- data/lib/contrast/utils/string_utils.rb +72 -0
- data/lib/contrast/utils/tag_util.rb +139 -0
- data/lib/contrast/utils/thread_tracker.rb +54 -0
- data/lib/contrast/utils/timer.rb +78 -0
- data/resources/assess/policy.json +1673 -0
- data/resources/csrf/inject.js +44 -0
- data/resources/deadzone/policy.json +55 -0
- data/resources/factory-bot-spec/spec_helper.rb +30 -0
- data/resources/inventory/policy.json +110 -0
- data/resources/protect/policy.json +417 -0
- data/resources/rubocops/kernel/catch_cop.rb +37 -0
- data/resources/rubocops/kernel/require_cop.rb +37 -0
- data/resources/rubocops/kernel/require_relative_cop.rb +33 -0
- data/resources/rubocops/module/autoload_cop.rb +37 -0
- data/resources/rubocops/module/const_defined_cop.rb +37 -0
- data/resources/rubocops/module/const_get_cop.rb +37 -0
- data/resources/rubocops/module/const_set_cop.rb +37 -0
- data/resources/rubocops/module/constants_cop.rb +37 -0
- data/resources/rubocops/module/name_cop.rb +37 -0
- data/resources/rubocops/object/class_cop.rb +37 -0
- data/resources/rubocops/object/freeze_cop.rb +37 -0
- data/resources/rubocops/object/frozen_cop.rb +37 -0
- data/resources/rubocops/object/is_a_cop.rb +37 -0
- data/resources/rubocops/object/method_cop.rb +37 -0
- data/resources/rubocops/object/respond_to_cop.rb +37 -0
- data/resources/rubocops/object/singleton_class_cop.rb +37 -0
- data/resources/rubocops/regexp/spelling_cop.rb +44 -0
- data/resources/rubocops/thread/new_cop.rb +39 -0
- data/resources/ruby-spec/ancestors_spec.rb +70 -0
- data/resources/ruby-spec/modulo_spec.rb +831 -0
- data/resources/ruby-spec/parameters_spec.rb +261 -0
- data/resources/ruby-spec/ruby_spec_spec_helper.rb +35 -0
- data/resources/test_marker.txt +1 -0
- data/ruby-agent.gemspec +129 -0
- data/service_executables/.gitkeep +0 -0
- data/service_executables/VERSION +1 -0
- data/service_executables/linux/contrast-service +0 -0
- data/service_executables/mac/contrast-service +0 -0
- metadata +945 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Mario Vilas, http://breakingcode.wordpress.com
|
|
2
|
+
# Licensed under BSD in 2016
|
|
3
|
+
|
|
4
|
+
# Example code
|
|
5
|
+
|
|
6
|
+
import distorm3
|
|
7
|
+
import sys
|
|
8
|
+
import optparse
|
|
9
|
+
|
|
10
|
+
# Parse the command line arguments
|
|
11
|
+
usage = 'Usage: %prog [--b16 | --b32 | --b64] filename [offset]'
|
|
12
|
+
parser = optparse.OptionParser(usage=usage)
|
|
13
|
+
parser.add_option( '--b16', help='80286 decoding',
|
|
14
|
+
action='store_const', dest='dt', const=distorm3.Decode16Bits )
|
|
15
|
+
parser.add_option( '--b32', help='IA-32 decoding [default]',
|
|
16
|
+
action='store_const', dest='dt', const=distorm3.Decode32Bits )
|
|
17
|
+
parser.add_option( '--b64', help='AMD64 decoding',
|
|
18
|
+
action='store_const', dest='dt', const=distorm3.Decode64Bits )
|
|
19
|
+
parser.set_defaults(dt=distorm3.Decode32Bits)
|
|
20
|
+
options, args = parser.parse_args(sys.argv)
|
|
21
|
+
if len(args) < 2:
|
|
22
|
+
parser.error('missing parameter: filename')
|
|
23
|
+
filename = args[1]
|
|
24
|
+
offset = 0
|
|
25
|
+
length = None
|
|
26
|
+
if len(args) == 3:
|
|
27
|
+
try:
|
|
28
|
+
offset = int(args[2], 10)
|
|
29
|
+
except ValueError:
|
|
30
|
+
parser.error('invalid offset: %s' % args[2])
|
|
31
|
+
if offset < 0:
|
|
32
|
+
parser.error('invalid offset: %s' % args[2])
|
|
33
|
+
elif len(args) > 3:
|
|
34
|
+
parser.error('too many parameters')
|
|
35
|
+
|
|
36
|
+
# Read the code from the file
|
|
37
|
+
try:
|
|
38
|
+
code = open(filename, 'rb').read()
|
|
39
|
+
except Exception as e:
|
|
40
|
+
parser.error('error reading file %s: %s' % (filename, e))
|
|
41
|
+
|
|
42
|
+
# Print each decoded instruction
|
|
43
|
+
# This shows how to use the Deocode - Generator
|
|
44
|
+
iterable = distorm3.DecodeGenerator(offset, code, options.dt)
|
|
45
|
+
for (offset, size, instruction, hexdump) in iterable:
|
|
46
|
+
print("%.8x: %-32s %s" % (offset, hexdump, instruction))
|
|
47
|
+
|
|
48
|
+
# It could also be used as a returned list:
|
|
49
|
+
# l = distorm3.Decode(offset, code, options.dt)
|
|
50
|
+
# for (offset, size, instruction, hexdump) in l:
|
|
51
|
+
# print("%.8x: %-32s %s" % (offset, hexdump, instruction))
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2009, Mario Vilas
|
|
4
|
+
# Rob Ruana 2010
|
|
5
|
+
# Gil Dabah
|
|
6
|
+
# All rights reserved.
|
|
7
|
+
# Licensed under BSD.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
__revision__ = "$Id: setup.py 603 2010-01-31 00:11:05Z qvasimodo $"
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
import platform
|
|
14
|
+
import string
|
|
15
|
+
import shutil
|
|
16
|
+
import sys
|
|
17
|
+
|
|
18
|
+
from glob import glob
|
|
19
|
+
|
|
20
|
+
from distutils import log
|
|
21
|
+
from distutils.command.build import build
|
|
22
|
+
from distutils.command.build_clib import build_clib
|
|
23
|
+
from distutils.command.clean import clean
|
|
24
|
+
from distutils.command.install_lib import install_lib
|
|
25
|
+
from distutils.command.sdist import sdist
|
|
26
|
+
from distutils.core import setup, Extension
|
|
27
|
+
from distutils.errors import DistutilsSetupError
|
|
28
|
+
|
|
29
|
+
from shutil import ignore_patterns
|
|
30
|
+
|
|
31
|
+
def get_sources():
|
|
32
|
+
"""Returns a list of C source files that should be compiled to
|
|
33
|
+
create the libdistorm3 library.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
return glob('src/*.c')
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class custom_build(build):
|
|
40
|
+
"""Customized build command"""
|
|
41
|
+
def run(self):
|
|
42
|
+
log.info('running custom_build')
|
|
43
|
+
build.run(self)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class custom_build_clib(build_clib):
|
|
47
|
+
"""Customized build_clib command
|
|
48
|
+
|
|
49
|
+
This custom_build_clib will create dynamically linked libraries rather
|
|
50
|
+
than statically linked libraries. In addition, it places the compiled
|
|
51
|
+
libraries alongside the python packages, to facilitate the use of ctypes.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
def finalize_options (self):
|
|
55
|
+
# We want build-clib to default to build-lib as defined by the
|
|
56
|
+
# "build" command. This is so the compiled library will be put
|
|
57
|
+
# in the right place along side the python code.
|
|
58
|
+
self.set_undefined_options('build',
|
|
59
|
+
('build_lib', 'build_clib'),
|
|
60
|
+
('build_temp', 'build_temp'),
|
|
61
|
+
('compiler', 'compiler'),
|
|
62
|
+
('debug', 'debug'),
|
|
63
|
+
('force', 'force'))
|
|
64
|
+
|
|
65
|
+
self.libraries = self.distribution.libraries
|
|
66
|
+
if self.libraries: # In Python 3.0 they have a bug in check_library_list, comment it out then.
|
|
67
|
+
self.check_library_list(self.libraries)
|
|
68
|
+
|
|
69
|
+
if self.include_dirs is None:
|
|
70
|
+
self.include_dirs = self.distribution.include_dirs or []
|
|
71
|
+
if type(self.include_dirs) in (bytes, str):
|
|
72
|
+
self.include_dirs = string.split(self.include_dirs,
|
|
73
|
+
os.pathsep)
|
|
74
|
+
|
|
75
|
+
def get_source_files_for_lib(self, lib_name, build_info):
|
|
76
|
+
sources = build_info.get('sources', [])
|
|
77
|
+
if hasattr(sources, '__call__'):
|
|
78
|
+
sources = sources()
|
|
79
|
+
if (sources is None or
|
|
80
|
+
type(sources) not in (list, tuple) or
|
|
81
|
+
len(sources) == 0):
|
|
82
|
+
raise DistutilsSetupError ("in 'libraries' option (library '%s'), 'sources' must be present and must be a list of source filenames") % lib_name
|
|
83
|
+
return sources
|
|
84
|
+
|
|
85
|
+
def get_source_files(self):
|
|
86
|
+
self.check_library_list(self.libraries)
|
|
87
|
+
filenames = []
|
|
88
|
+
for (lib_name, build_info) in self.libraries:
|
|
89
|
+
sources = self.get_source_files_for_lib(lib_name, build_info)
|
|
90
|
+
filenames.extend(sources)
|
|
91
|
+
return filenames
|
|
92
|
+
|
|
93
|
+
def run(self):
|
|
94
|
+
log.info('running custom_build_clib')
|
|
95
|
+
build_clib.run(self)
|
|
96
|
+
|
|
97
|
+
def build_libraries (self, libraries):
|
|
98
|
+
for (lib_name, build_info) in libraries:
|
|
99
|
+
sources = self.get_source_files_for_lib(lib_name, build_info)
|
|
100
|
+
sources = list(sources)
|
|
101
|
+
|
|
102
|
+
log.info("building '%s' library", lib_name)
|
|
103
|
+
|
|
104
|
+
# First, compile the source code to object files in the
|
|
105
|
+
# library directory.
|
|
106
|
+
macros = build_info.get('macros')
|
|
107
|
+
include_dirs = build_info.get('include_dirs')
|
|
108
|
+
objects = self.compiler.compile(sources,
|
|
109
|
+
output_dir=self.build_temp,
|
|
110
|
+
macros=macros,
|
|
111
|
+
include_dirs=include_dirs,
|
|
112
|
+
extra_postargs=build_info.get('extra_compile_args', []),
|
|
113
|
+
debug=self.debug)
|
|
114
|
+
|
|
115
|
+
# Then link the object files and put the result in the
|
|
116
|
+
# package build directory.
|
|
117
|
+
package = build_info.get('package', '')
|
|
118
|
+
self.compiler.link_shared_lib(
|
|
119
|
+
objects, lib_name,
|
|
120
|
+
output_dir=os.path.join(self.build_clib, package),
|
|
121
|
+
extra_postargs=build_info.get('extra_link_args', []),
|
|
122
|
+
debug=self.debug,)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class custom_clean(clean):
|
|
126
|
+
"""Customized clean command
|
|
127
|
+
|
|
128
|
+
Customized clean command removes .pyc files from the project,
|
|
129
|
+
as well as build and dist directories."""
|
|
130
|
+
def run(self):
|
|
131
|
+
log.info('running custom_clean')
|
|
132
|
+
# Remove .pyc files
|
|
133
|
+
if hasattr(os, 'walk'):
|
|
134
|
+
for root, dirs, files in os.walk('.'):
|
|
135
|
+
for f in files:
|
|
136
|
+
if f.endswith('.pyc'):
|
|
137
|
+
log.info("removing '%s'" % f)
|
|
138
|
+
try:
|
|
139
|
+
os.unlink(f)
|
|
140
|
+
except:
|
|
141
|
+
pass
|
|
142
|
+
|
|
143
|
+
# Remove generated directories
|
|
144
|
+
for dir in ['build', 'dist']:
|
|
145
|
+
if os.path.exists(dir):
|
|
146
|
+
log.info("removing '%s' (and everything under it)"%dir)
|
|
147
|
+
try:
|
|
148
|
+
shutil.rmtree(dir, ignore_errors=True)
|
|
149
|
+
except:
|
|
150
|
+
pass
|
|
151
|
+
|
|
152
|
+
clean.run(self)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
class custom_sdist(sdist):
|
|
156
|
+
"""Customized sdist command"""
|
|
157
|
+
def run(self):
|
|
158
|
+
log.info('running custom_sdist')
|
|
159
|
+
sdist.run(self)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def main():
|
|
163
|
+
# Just in case we are being called from a different directory
|
|
164
|
+
cwd = os.path.dirname(__file__)
|
|
165
|
+
if cwd:
|
|
166
|
+
os.chdir(cwd)
|
|
167
|
+
|
|
168
|
+
# Get the target platform
|
|
169
|
+
system = platform.system().lower()
|
|
170
|
+
|
|
171
|
+
# Setup the extension module
|
|
172
|
+
# Setup the library
|
|
173
|
+
ext_modules = None
|
|
174
|
+
libraries = None
|
|
175
|
+
if 'windows' in system:
|
|
176
|
+
libraries = [(
|
|
177
|
+
'distorm3', dict(
|
|
178
|
+
package='distorm3',
|
|
179
|
+
sources=get_sources,
|
|
180
|
+
include_dirs=['src', 'include'],
|
|
181
|
+
extra_compile_args=['/Ox', '/Ob1', '/Oy', '"/D WIN32"',
|
|
182
|
+
'"/D DISTORM_DYNAMIC"', '"/D SUPPORT_64BIT_OFFSET"',
|
|
183
|
+
'"/D _MBCS"', '/GF', '/Gm', '/Zi', '/EHsc',
|
|
184
|
+
'/MT', '/Gy', '/W4', '/nologo', '/c', '/TC',
|
|
185
|
+
'/Fdbuild\\vc90.pdb'],
|
|
186
|
+
extra_link_args=['/MANIFEST', '/DLL']))]
|
|
187
|
+
elif 'darwin' in system or 'macosx' in system:
|
|
188
|
+
libraries = [(
|
|
189
|
+
'distorm3', dict(
|
|
190
|
+
package='distorm3',
|
|
191
|
+
sources=get_sources,
|
|
192
|
+
include_dirs=['src', 'include'],
|
|
193
|
+
extra_compile_args=['-arch', 'i386', '-arch', 'x86_64', '-O2',
|
|
194
|
+
'-Wall', '-fPIC', '-DSUPPORT_64BIT_OFFSET',
|
|
195
|
+
'-DDISTORM_DYNAMIC']))]
|
|
196
|
+
elif 'cygwin' in system:
|
|
197
|
+
libraries = [(
|
|
198
|
+
'distorm3', dict(
|
|
199
|
+
package='distorm3',
|
|
200
|
+
sources=get_sources,
|
|
201
|
+
include_dirs=['src', 'include'],
|
|
202
|
+
extra_compile_args=['-fPIC', '-O2', '-Wall',
|
|
203
|
+
'-DSUPPORT_64BIT_OFFSET',
|
|
204
|
+
'-DDISTORM_STATIC']))]
|
|
205
|
+
else:
|
|
206
|
+
libraries = [(
|
|
207
|
+
'distorm3', dict(
|
|
208
|
+
package='distorm3',
|
|
209
|
+
sources=get_sources,
|
|
210
|
+
include_dirs=['src', 'include'],
|
|
211
|
+
extra_compile_args=['-fPIC', '-O2', '-Wall',
|
|
212
|
+
'-DSUPPORT_64BIT_OFFSET',
|
|
213
|
+
'-DDISTORM_STATIC']))]
|
|
214
|
+
|
|
215
|
+
options = {
|
|
216
|
+
|
|
217
|
+
# Setup instructions
|
|
218
|
+
'requires' : ['ctypes'],
|
|
219
|
+
'provides' : ['distorm3'],
|
|
220
|
+
'packages' : ['distorm3'],
|
|
221
|
+
'package_dir' : { '' : 'python' },
|
|
222
|
+
'cmdclass' : { 'build' : custom_build,
|
|
223
|
+
'build_clib' : custom_build_clib,
|
|
224
|
+
'clean' : custom_clean,
|
|
225
|
+
'sdist' : custom_sdist },
|
|
226
|
+
'libraries' : libraries,
|
|
227
|
+
|
|
228
|
+
# Metadata
|
|
229
|
+
'name' : 'distorm3',
|
|
230
|
+
'version' : '3.3.4',
|
|
231
|
+
'description' : 'The goal of diStorm3 is to decode x86/AMD64' \
|
|
232
|
+
' binary streams and return a structure that' \
|
|
233
|
+
' describes each instruction.',
|
|
234
|
+
'long_description' : (
|
|
235
|
+
'Powerful Disassembler Library For AMD64\n'
|
|
236
|
+
'by Gil Dabah (distorm@gmail.com)\n'
|
|
237
|
+
'\n'
|
|
238
|
+
'Python bindings by Mario Vilas (mvilas@gmail.com)'
|
|
239
|
+
),
|
|
240
|
+
'author' : 'Gil Dabah',
|
|
241
|
+
'author_email' : 'distorm'+chr(64)+'gmail'+chr(0x2e)+'com',
|
|
242
|
+
'maintainer' : 'Gil Dabah',
|
|
243
|
+
'maintainer_email' : 'distorm'+chr(64)+'gmail'+chr(0x2e)+'com',
|
|
244
|
+
'url' : 'https://github.com/gdabah/distorm/',
|
|
245
|
+
'download_url' : 'https://github.com/gdabah/distorm/',
|
|
246
|
+
'platforms' : ['cygwin', 'win', 'linux', 'macosx'],
|
|
247
|
+
'classifiers' : [
|
|
248
|
+
'License :: OSI Approved :: BSD License',
|
|
249
|
+
'Development Status :: 5 - Production/Stable',
|
|
250
|
+
'Intended Audience :: Developers',
|
|
251
|
+
'Natural Language :: English',
|
|
252
|
+
'Operating System :: Microsoft :: Windows',
|
|
253
|
+
'Operating System :: MacOS :: MacOS X',
|
|
254
|
+
'Operating System :: POSIX :: Linux',
|
|
255
|
+
'Programming Language :: Python :: 2.7',
|
|
256
|
+
'Programming Language :: Python :: 3.5',
|
|
257
|
+
'Topic :: Software Development :: Disassemblers',
|
|
258
|
+
'Topic :: Software Development :: Libraries :: Python Modules',
|
|
259
|
+
]
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
# Call the setup function
|
|
263
|
+
setup(**options)
|
|
264
|
+
|
|
265
|
+
if __name__ == '__main__':
|
|
266
|
+
main()
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/*
|
|
2
|
+
config.h
|
|
3
|
+
|
|
4
|
+
diStorm3 - Powerful disassembler for X86/AMD64
|
|
5
|
+
http://ragestorm.net/distorm/
|
|
6
|
+
distorm at gmail dot com
|
|
7
|
+
Copyright (C) 2003-2016 Gil Dabah
|
|
8
|
+
This library is licensed under the BSD license. See the file COPYING.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
#ifndef CONFIG_H
|
|
13
|
+
#define CONFIG_H
|
|
14
|
+
|
|
15
|
+
/* diStorm version number. */
|
|
16
|
+
#define __DISTORMV__ 0x030304
|
|
17
|
+
|
|
18
|
+
#include <string.h> /* memset, memcpy - can be easily self implemented for libc independency. */
|
|
19
|
+
|
|
20
|
+
#include "../include/distorm.h"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* 64 bit offsets support:
|
|
25
|
+
* This macro should be defined from compiler command line flags, e.g: -DSUPPORT_64BIT_OFFSET
|
|
26
|
+
* Note: make sure that the caller (library user) defines it too!
|
|
27
|
+
*/
|
|
28
|
+
/* #define SUPPORT_64BIT_OFFSET */
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* If you compile diStorm as a dynamic library (.dll or .so) file, make sure you uncomment the next line.
|
|
32
|
+
* So the interface functions will be exported, otherwise they are useable only for static library.
|
|
33
|
+
* For example, this macro is being set for compiling diStorm as a .dll for Python with CTypes.
|
|
34
|
+
*/
|
|
35
|
+
/* #define DISTORM_DYNAMIC */
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* If DISTORM_LIGHT is defined, everything involved in formatting the instructions
|
|
39
|
+
* as text will be excluded from compilation.
|
|
40
|
+
* distorm_decode(..) and distorm_format(..) will not be available.
|
|
41
|
+
* This will decrease the size of the executable and leave you with decomposition functionality only.
|
|
42
|
+
*
|
|
43
|
+
* Note: it should be either set in the preprocessor definitions manually or in command line -D switch.
|
|
44
|
+
* #define DISTORM_LIGHT
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* diStorm now supports little/big endian CPU's.
|
|
49
|
+
* It should detect the endianness according to predefined macro's of the compiler.
|
|
50
|
+
* If you don't use GCC/MSVC you will have to define it on your own.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/* These macros are used in order to make the code portable. */
|
|
54
|
+
#ifdef __GNUC__
|
|
55
|
+
|
|
56
|
+
#include <stdint.h>
|
|
57
|
+
|
|
58
|
+
#define _DLLEXPORT_
|
|
59
|
+
#define _FASTCALL_
|
|
60
|
+
#define _INLINE_ static
|
|
61
|
+
/* GCC ignores this directive... */
|
|
62
|
+
/*#define _FASTCALL_ __attribute__((__fastcall__))*/
|
|
63
|
+
|
|
64
|
+
/* Set endianity (supposed to be LE though): */
|
|
65
|
+
#ifdef __BIG_ENDIAN__
|
|
66
|
+
#define BE_SYSTEM
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
/* End of __GCC__ */
|
|
70
|
+
|
|
71
|
+
#elif __WATCOMC__
|
|
72
|
+
|
|
73
|
+
#include <stdint.h>
|
|
74
|
+
|
|
75
|
+
#define _DLLEXPORT_
|
|
76
|
+
#define _FASTCALL_
|
|
77
|
+
#define _INLINE_ __inline
|
|
78
|
+
|
|
79
|
+
/* End of __WATCOMC__ */
|
|
80
|
+
|
|
81
|
+
#elif __DMC__
|
|
82
|
+
|
|
83
|
+
#include <stdint.h>
|
|
84
|
+
|
|
85
|
+
#define _DLLEXPORT_
|
|
86
|
+
#define _FASTCALL_
|
|
87
|
+
#define _INLINE_ __inline
|
|
88
|
+
|
|
89
|
+
/* End of __DMC__ */
|
|
90
|
+
|
|
91
|
+
#elif __TINYC__
|
|
92
|
+
|
|
93
|
+
#include <stdint.h>
|
|
94
|
+
|
|
95
|
+
#define _DLLEXPORT_
|
|
96
|
+
#define _FASTCALL_
|
|
97
|
+
#define _INLINE_
|
|
98
|
+
|
|
99
|
+
/* End of __TINYC__ */
|
|
100
|
+
|
|
101
|
+
#elif _MSC_VER
|
|
102
|
+
|
|
103
|
+
/* stdint alternative is defined in distorm.h */
|
|
104
|
+
|
|
105
|
+
#define _DLLEXPORT_ __declspec(dllexport)
|
|
106
|
+
#define _FASTCALL_ __fastcall
|
|
107
|
+
#define _INLINE_ __inline
|
|
108
|
+
|
|
109
|
+
/* Set endianity (supposed to be LE though): */
|
|
110
|
+
#if !defined(_M_IX86) && !defined(_M_X64)
|
|
111
|
+
#define BE_SYSTEM
|
|
112
|
+
#endif
|
|
113
|
+
|
|
114
|
+
#endif /* #elif _MSC_VER */
|
|
115
|
+
|
|
116
|
+
/* If the library isn't compiled as a dynamic library don't export any functions. */
|
|
117
|
+
#ifndef DISTORM_DYNAMIC
|
|
118
|
+
#undef _DLLEXPORT_
|
|
119
|
+
#define _DLLEXPORT_
|
|
120
|
+
#endif
|
|
121
|
+
|
|
122
|
+
#ifndef FALSE
|
|
123
|
+
#define FALSE 0
|
|
124
|
+
#endif
|
|
125
|
+
#ifndef TRUE
|
|
126
|
+
#define TRUE 1
|
|
127
|
+
#endif
|
|
128
|
+
|
|
129
|
+
/* Define stream read functions for big endian systems. */
|
|
130
|
+
#ifdef BE_SYSTEM
|
|
131
|
+
/*
|
|
132
|
+
* These functions can read from the stream safely!
|
|
133
|
+
* Swap endianity of input to little endian.
|
|
134
|
+
*/
|
|
135
|
+
static _INLINE_ int16_t RSHORT(const uint8_t *s)
|
|
136
|
+
{
|
|
137
|
+
return s[0] | (s[1] << 8);
|
|
138
|
+
}
|
|
139
|
+
static _INLINE_ uint16_t RUSHORT(const uint8_t *s)
|
|
140
|
+
{
|
|
141
|
+
return s[0] | (s[1] << 8);
|
|
142
|
+
}
|
|
143
|
+
static _INLINE_ int32_t RLONG(const uint8_t *s)
|
|
144
|
+
{
|
|
145
|
+
return s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24);
|
|
146
|
+
}
|
|
147
|
+
static _INLINE_ uint32_t RULONG(const uint8_t *s)
|
|
148
|
+
{
|
|
149
|
+
return s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24);
|
|
150
|
+
}
|
|
151
|
+
static _INLINE_ int64_t RLLONG(const uint8_t *s)
|
|
152
|
+
{
|
|
153
|
+
return s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24) | ((uint64_t)s[4] << 32) | ((uint64_t)s[5] << 40) | ((uint64_t)s[6] << 48) | ((uint64_t)s[7] << 56);
|
|
154
|
+
}
|
|
155
|
+
static _INLINE_ uint64_t RULLONG(const uint8_t *s)
|
|
156
|
+
{
|
|
157
|
+
return s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24) | ((uint64_t)s[4] << 32) | ((uint64_t)s[5] << 40) | ((uint64_t)s[6] << 48) | ((uint64_t)s[7] << 56);
|
|
158
|
+
}
|
|
159
|
+
#else
|
|
160
|
+
/* Little endian macro's will just make the cast. */
|
|
161
|
+
#define RSHORT(x) *(int16_t *)x
|
|
162
|
+
#define RUSHORT(x) *(uint16_t *)x
|
|
163
|
+
#define RLONG(x) *(int32_t *)x
|
|
164
|
+
#define RULONG(x) *(uint32_t *)x
|
|
165
|
+
#define RLLONG(x) *(int64_t *)x
|
|
166
|
+
#define RULLONG(x) *(uint64_t *)x
|
|
167
|
+
#endif
|
|
168
|
+
|
|
169
|
+
#endif /* CONFIG_H */
|