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,172 @@
|
|
|
1
|
+
/*
|
|
2
|
+
textdefs.c
|
|
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
|
+
#include "textdefs.h"
|
|
13
|
+
|
|
14
|
+
#ifndef DISTORM_LIGHT
|
|
15
|
+
|
|
16
|
+
static uint8_t Nibble2ChrTable[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
|
17
|
+
#define NIBBLE_TO_CHR Nibble2ChrTable[t]
|
|
18
|
+
|
|
19
|
+
void _FASTCALL_ str_hex_b(_WString* s, unsigned int x)
|
|
20
|
+
{
|
|
21
|
+
/*
|
|
22
|
+
* def prebuilt():
|
|
23
|
+
* s = ""
|
|
24
|
+
* for i in xrange(256):
|
|
25
|
+
* if ((i % 0x10) == 0):
|
|
26
|
+
* s += "\r\n"
|
|
27
|
+
* s += "\"%02x\", " % (i)
|
|
28
|
+
* return s
|
|
29
|
+
*/
|
|
30
|
+
static int8_t TextBTable[256][3] = {
|
|
31
|
+
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f",
|
|
32
|
+
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f",
|
|
33
|
+
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f",
|
|
34
|
+
"30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f",
|
|
35
|
+
"40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f",
|
|
36
|
+
"50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f",
|
|
37
|
+
"60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f",
|
|
38
|
+
"70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f",
|
|
39
|
+
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f",
|
|
40
|
+
"90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f",
|
|
41
|
+
"a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af",
|
|
42
|
+
"b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf",
|
|
43
|
+
"c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf",
|
|
44
|
+
"d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df",
|
|
45
|
+
"e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef",
|
|
46
|
+
"f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/*
|
|
50
|
+
* Fixed length of 3 including null terminate character.
|
|
51
|
+
*/
|
|
52
|
+
memcpy(&s->p[s->length], TextBTable[x & 255], 3);
|
|
53
|
+
s->length += 2;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
void _FASTCALL_ str_code_hb(_WString* s, unsigned int x)
|
|
57
|
+
{
|
|
58
|
+
static int8_t TextHBTable[256][5] = {
|
|
59
|
+
/*
|
|
60
|
+
* def prebuilt():
|
|
61
|
+
* s = ""
|
|
62
|
+
* for i in xrange(256):
|
|
63
|
+
* if ((i % 0x10) == 0):
|
|
64
|
+
* s += "\r\n"
|
|
65
|
+
* s += "\"0x%x\", " % (i)
|
|
66
|
+
* return s
|
|
67
|
+
*/
|
|
68
|
+
"0x0", "0x1", "0x2", "0x3", "0x4", "0x5", "0x6", "0x7", "0x8", "0x9", "0xa", "0xb", "0xc", "0xd", "0xe", "0xf",
|
|
69
|
+
"0x10", "0x11", "0x12", "0x13", "0x14", "0x15", "0x16", "0x17", "0x18", "0x19", "0x1a", "0x1b", "0x1c", "0x1d", "0x1e", "0x1f",
|
|
70
|
+
"0x20", "0x21", "0x22", "0x23", "0x24", "0x25", "0x26", "0x27", "0x28", "0x29", "0x2a", "0x2b", "0x2c", "0x2d", "0x2e", "0x2f",
|
|
71
|
+
"0x30", "0x31", "0x32", "0x33", "0x34", "0x35", "0x36", "0x37", "0x38", "0x39", "0x3a", "0x3b", "0x3c", "0x3d", "0x3e", "0x3f",
|
|
72
|
+
"0x40", "0x41", "0x42", "0x43", "0x44", "0x45", "0x46", "0x47", "0x48", "0x49", "0x4a", "0x4b", "0x4c", "0x4d", "0x4e", "0x4f",
|
|
73
|
+
"0x50", "0x51", "0x52", "0x53", "0x54", "0x55", "0x56", "0x57", "0x58", "0x59", "0x5a", "0x5b", "0x5c", "0x5d", "0x5e", "0x5f",
|
|
74
|
+
"0x60", "0x61", "0x62", "0x63", "0x64", "0x65", "0x66", "0x67", "0x68", "0x69", "0x6a", "0x6b", "0x6c", "0x6d", "0x6e", "0x6f",
|
|
75
|
+
"0x70", "0x71", "0x72", "0x73", "0x74", "0x75", "0x76", "0x77", "0x78", "0x79", "0x7a", "0x7b", "0x7c", "0x7d", "0x7e", "0x7f",
|
|
76
|
+
"0x80", "0x81", "0x82", "0x83", "0x84", "0x85", "0x86", "0x87", "0x88", "0x89", "0x8a", "0x8b", "0x8c", "0x8d", "0x8e", "0x8f",
|
|
77
|
+
"0x90", "0x91", "0x92", "0x93", "0x94", "0x95", "0x96", "0x97", "0x98", "0x99", "0x9a", "0x9b", "0x9c", "0x9d", "0x9e", "0x9f",
|
|
78
|
+
"0xa0", "0xa1", "0xa2", "0xa3", "0xa4", "0xa5", "0xa6", "0xa7", "0xa8", "0xa9", "0xaa", "0xab", "0xac", "0xad", "0xae", "0xaf",
|
|
79
|
+
"0xb0", "0xb1", "0xb2", "0xb3", "0xb4", "0xb5", "0xb6", "0xb7", "0xb8", "0xb9", "0xba", "0xbb", "0xbc", "0xbd", "0xbe", "0xbf",
|
|
80
|
+
"0xc0", "0xc1", "0xc2", "0xc3", "0xc4", "0xc5", "0xc6", "0xc7", "0xc8", "0xc9", "0xca", "0xcb", "0xcc", "0xcd", "0xce", "0xcf",
|
|
81
|
+
"0xd0", "0xd1", "0xd2", "0xd3", "0xd4", "0xd5", "0xd6", "0xd7", "0xd8", "0xd9", "0xda", "0xdb", "0xdc", "0xdd", "0xde", "0xdf",
|
|
82
|
+
"0xe0", "0xe1", "0xe2", "0xe3", "0xe4", "0xe5", "0xe6", "0xe7", "0xe8", "0xe9", "0xea", "0xeb", "0xec", "0xed", "0xee", "0xef",
|
|
83
|
+
"0xf0", "0xf1", "0xf2", "0xf3", "0xf4", "0xf5", "0xf6", "0xf7", "0xf8", "0xf9", "0xfa", "0xfb", "0xfc", "0xfd", "0xfe", "0xff"
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
if (x < 0x10) { /* < 0x10 has a fixed length of 4 including null terminate. */
|
|
87
|
+
memcpy(&s->p[s->length], TextHBTable[x & 255], 4);
|
|
88
|
+
s->length += 3;
|
|
89
|
+
} else { /* >= 0x10 has a fixed length of 5 including null terminate. */
|
|
90
|
+
memcpy(&s->p[s->length], TextHBTable[x & 255], 5);
|
|
91
|
+
s->length += 4;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
void _FASTCALL_ str_code_hdw(_WString* s, uint32_t x)
|
|
96
|
+
{
|
|
97
|
+
int8_t* buf;
|
|
98
|
+
int i = 0, shift = 0;
|
|
99
|
+
unsigned int t = 0;
|
|
100
|
+
|
|
101
|
+
buf = (int8_t*)&s->p[s->length];
|
|
102
|
+
|
|
103
|
+
buf[0] = '0';
|
|
104
|
+
buf[1] = 'x';
|
|
105
|
+
buf += 2;
|
|
106
|
+
|
|
107
|
+
for (shift = 28; shift != 0; shift -= 4) {
|
|
108
|
+
t = (x >> shift) & 0xf;
|
|
109
|
+
if (i | t) buf[i++] = NIBBLE_TO_CHR;
|
|
110
|
+
}
|
|
111
|
+
t = x & 0xf;
|
|
112
|
+
buf[i++] = NIBBLE_TO_CHR;
|
|
113
|
+
|
|
114
|
+
s->length += i + 2;
|
|
115
|
+
buf[i] = '\0';
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
void _FASTCALL_ str_code_hqw(_WString* s, uint8_t src[8])
|
|
119
|
+
{
|
|
120
|
+
int8_t* buf;
|
|
121
|
+
int i = 0, shift = 0;
|
|
122
|
+
uint32_t x = RULONG(&src[sizeof(int32_t)]);
|
|
123
|
+
int t;
|
|
124
|
+
|
|
125
|
+
buf = (int8_t*)&s->p[s->length];
|
|
126
|
+
buf[0] = '0';
|
|
127
|
+
buf[1] = 'x';
|
|
128
|
+
buf += 2;
|
|
129
|
+
|
|
130
|
+
for (shift = 28; shift != -4; shift -= 4) {
|
|
131
|
+
t = (x >> shift) & 0xf;
|
|
132
|
+
if (i | t) buf[i++] = NIBBLE_TO_CHR;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
x = RULONG(src);
|
|
136
|
+
for (shift = 28; shift != 0; shift -= 4) {
|
|
137
|
+
t = (x >> shift) & 0xf;
|
|
138
|
+
if (i | t) buf[i++] = NIBBLE_TO_CHR;
|
|
139
|
+
}
|
|
140
|
+
t = x & 0xf;
|
|
141
|
+
buf[i++] = NIBBLE_TO_CHR;
|
|
142
|
+
|
|
143
|
+
s->length += i + 2;
|
|
144
|
+
buf[i] = '\0';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
#ifdef SUPPORT_64BIT_OFFSET
|
|
148
|
+
void _FASTCALL_ str_off64(_WString* s, OFFSET_INTEGER x)
|
|
149
|
+
{
|
|
150
|
+
int8_t* buf;
|
|
151
|
+
int i = 0, shift = 0;
|
|
152
|
+
OFFSET_INTEGER t = 0;
|
|
153
|
+
|
|
154
|
+
buf = (int8_t*)&s->p[s->length];
|
|
155
|
+
|
|
156
|
+
buf[0] = '0';
|
|
157
|
+
buf[1] = 'x';
|
|
158
|
+
buf += 2;
|
|
159
|
+
|
|
160
|
+
for (shift = 60; shift != 0; shift -= 4) {
|
|
161
|
+
t = (x >> shift) & 0xf;
|
|
162
|
+
if (i | t) buf[i++] = NIBBLE_TO_CHR;
|
|
163
|
+
}
|
|
164
|
+
t = x & 0xf;
|
|
165
|
+
buf[i++] = NIBBLE_TO_CHR;
|
|
166
|
+
|
|
167
|
+
s->length += i + 2;
|
|
168
|
+
buf[i] = '\0';
|
|
169
|
+
}
|
|
170
|
+
#endif /* SUPPORT_64BIT_OFFSET */
|
|
171
|
+
|
|
172
|
+
#endif /* DISTORM_LIGHT */
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
textdefs.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 TEXTDEFS_H
|
|
13
|
+
#define TEXTDEFS_H
|
|
14
|
+
|
|
15
|
+
#include "config.h"
|
|
16
|
+
#include "wstring.h"
|
|
17
|
+
|
|
18
|
+
#ifndef DISTORM_LIGHT
|
|
19
|
+
|
|
20
|
+
#define PLUS_DISP_CHR '+'
|
|
21
|
+
#define MINUS_DISP_CHR '-'
|
|
22
|
+
#define OPEN_CHR '['
|
|
23
|
+
#define CLOSE_CHR ']'
|
|
24
|
+
#define SP_CHR ' '
|
|
25
|
+
#define SEG_OFF_CHR ':'
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
Naming Convention:
|
|
29
|
+
|
|
30
|
+
* get - returns a pointer to a string.
|
|
31
|
+
* str - concatenates to string.
|
|
32
|
+
|
|
33
|
+
* hex - means the function is used for hex dump (number is padded to required size) - Little Endian output.
|
|
34
|
+
* code - means the function is used for disassembled instruction - Big Endian output.
|
|
35
|
+
* off - means the function is used for 64bit offset - Big Endian output.
|
|
36
|
+
|
|
37
|
+
* h - '0x' in front of the string.
|
|
38
|
+
|
|
39
|
+
* b - byte
|
|
40
|
+
* dw - double word (can be used for word also)
|
|
41
|
+
* qw - quad word
|
|
42
|
+
|
|
43
|
+
* all numbers are in HEX.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
void _FASTCALL_ str_hex_b(_WString* s, unsigned int x);
|
|
47
|
+
void _FASTCALL_ str_code_hb(_WString* s, unsigned int x);
|
|
48
|
+
void _FASTCALL_ str_code_hdw(_WString* s, uint32_t x);
|
|
49
|
+
void _FASTCALL_ str_code_hqw(_WString* s, uint8_t src[8]);
|
|
50
|
+
|
|
51
|
+
#ifdef SUPPORT_64BIT_OFFSET
|
|
52
|
+
void _FASTCALL_ str_off64(_WString* s, OFFSET_INTEGER x);
|
|
53
|
+
#endif
|
|
54
|
+
|
|
55
|
+
#endif /* DISTORM_LIGHT */
|
|
56
|
+
|
|
57
|
+
#endif /* TEXTDEFS_H */
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/*
|
|
2
|
+
wstring.c
|
|
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
|
+
#include "wstring.h"
|
|
13
|
+
|
|
14
|
+
#ifndef DISTORM_LIGHT
|
|
15
|
+
|
|
16
|
+
void strclear_WS(_WString* s)
|
|
17
|
+
{
|
|
18
|
+
s->p[0] = '\0';
|
|
19
|
+
s->length = 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
void chrcat_WS(_WString* s, uint8_t ch)
|
|
23
|
+
{
|
|
24
|
+
s->p[s->length] = ch;
|
|
25
|
+
s->p[s->length + 1] = '\0';
|
|
26
|
+
s->length += 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void strcpylen_WS(_WString* s, const int8_t* buf, unsigned int len)
|
|
30
|
+
{
|
|
31
|
+
s->length = len;
|
|
32
|
+
memcpy((int8_t*)s->p, buf, len + 1);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void strcatlen_WS(_WString* s, const int8_t* buf, unsigned int len)
|
|
36
|
+
{
|
|
37
|
+
memcpy((int8_t*)&s->p[s->length], buf, len + 1);
|
|
38
|
+
s->length += len;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void strcat_WS(_WString* s, const _WString* s2)
|
|
42
|
+
{
|
|
43
|
+
memcpy((int8_t*)&s->p[s->length], s2->p, s2->length + 1);
|
|
44
|
+
s->length += s2->length;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#endif /* DISTORM_LIGHT */
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
wstring.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 WSTRING_H
|
|
13
|
+
#define WSTRING_H
|
|
14
|
+
|
|
15
|
+
#include "config.h"
|
|
16
|
+
|
|
17
|
+
#ifndef DISTORM_LIGHT
|
|
18
|
+
|
|
19
|
+
void strclear_WS(_WString* s);
|
|
20
|
+
void chrcat_WS(_WString* s, uint8_t ch);
|
|
21
|
+
void strcpylen_WS(_WString* s, const int8_t* buf, unsigned int len);
|
|
22
|
+
void strcatlen_WS(_WString* s, const int8_t* buf, unsigned int len);
|
|
23
|
+
void strcat_WS(_WString* s, const _WString* s2);
|
|
24
|
+
|
|
25
|
+
/*
|
|
26
|
+
* Warning, this macro should be used only when the compiler knows the size of string in advance!
|
|
27
|
+
* This macro is used in order to spare the call to strlen when the strings are known already.
|
|
28
|
+
* Note: sizeof includes NULL terminated character.
|
|
29
|
+
*/
|
|
30
|
+
#define strcat_WSN(s, t) strcatlen_WS((s), ((const int8_t*)t), sizeof((t))-1)
|
|
31
|
+
#define strcpy_WSN(s, t) strcpylen_WS((s), ((const int8_t*)t), sizeof((t))-1)
|
|
32
|
+
|
|
33
|
+
#endif /* DISTORM_LIGHT */
|
|
34
|
+
|
|
35
|
+
#endif /* WSTRING_H */
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/*
|
|
2
|
+
x86defs.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 X86DEFS_H
|
|
13
|
+
#define X86DEFS_H
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
#define SEG_REGS_MAX (6)
|
|
17
|
+
#define CREGS_MAX (9)
|
|
18
|
+
#define DREGS_MAX (8)
|
|
19
|
+
|
|
20
|
+
/* Maximum instruction size, including prefixes */
|
|
21
|
+
#define INST_MAXIMUM_SIZE (15)
|
|
22
|
+
|
|
23
|
+
/* Maximum range of imm8 (comparison type) of special SSE CMP instructions. */
|
|
24
|
+
#define INST_CMP_MAX_RANGE (8)
|
|
25
|
+
|
|
26
|
+
/* Maximum range of imm8 (comparison type) of special AVX VCMP instructions. */
|
|
27
|
+
#define INST_VCMP_MAX_RANGE (32)
|
|
28
|
+
|
|
29
|
+
/* Wait instruction byte code. */
|
|
30
|
+
#define INST_WAIT_INDEX (0x9b)
|
|
31
|
+
|
|
32
|
+
/* Lea instruction byte code. */
|
|
33
|
+
#define INST_LEA_INDEX (0x8d)
|
|
34
|
+
|
|
35
|
+
/* NOP/XCHG instruction byte code. */
|
|
36
|
+
#define INST_NOP_INDEX (0x90)
|
|
37
|
+
|
|
38
|
+
/* ARPL/MOVSXD instruction byte code. */
|
|
39
|
+
#define INST_ARPL_INDEX (0x63)
|
|
40
|
+
|
|
41
|
+
/*
|
|
42
|
+
* Minimal MODR/M value of divided instructions.
|
|
43
|
+
* It's 0xc0, two MSBs set, which indicates a general purpose register is used too.
|
|
44
|
+
*/
|
|
45
|
+
#define INST_DIVIDED_MODRM (0xc0)
|
|
46
|
+
|
|
47
|
+
/* This is the escape byte value used for 3DNow! instructions. */
|
|
48
|
+
#define _3DNOW_ESCAPE_BYTE (0x0f)
|
|
49
|
+
|
|
50
|
+
#define PREFIX_LOCK (0xf0)
|
|
51
|
+
#define PREFIX_REPNZ (0xf2)
|
|
52
|
+
#define PREFIX_REP (0xf3)
|
|
53
|
+
#define PREFIX_CS (0x2e)
|
|
54
|
+
#define PREFIX_SS (0x36)
|
|
55
|
+
#define PREFIX_DS (0x3e)
|
|
56
|
+
#define PREFIX_ES (0x26)
|
|
57
|
+
#define PREFIX_FS (0x64)
|
|
58
|
+
#define PREFIX_GS (0x65)
|
|
59
|
+
#define PREFIX_OP_SIZE (0x66)
|
|
60
|
+
#define PREFIX_ADDR_SIZE (0x67)
|
|
61
|
+
#define PREFIX_VEX2b (0xc5)
|
|
62
|
+
#define PREFIX_VEX3b (0xc4)
|
|
63
|
+
|
|
64
|
+
/* REX prefix value range, 64 bits mode decoding only. */
|
|
65
|
+
#define PREFIX_REX_LOW (0x40)
|
|
66
|
+
#define PREFIX_REX_HI (0x4f)
|
|
67
|
+
/* In order to use the extended GPR's we have to add 8 to the Modr/M info values. */
|
|
68
|
+
#define EX_GPR_BASE (8)
|
|
69
|
+
|
|
70
|
+
/* Mask for REX and VEX features: */
|
|
71
|
+
/* Base */
|
|
72
|
+
#define PREFIX_EX_B (1)
|
|
73
|
+
/* Index */
|
|
74
|
+
#define PREFIX_EX_X (2)
|
|
75
|
+
/* Register */
|
|
76
|
+
#define PREFIX_EX_R (4)
|
|
77
|
+
/* Operand Width */
|
|
78
|
+
#define PREFIX_EX_W (8)
|
|
79
|
+
/* Vector Lengh */
|
|
80
|
+
#define PREFIX_EX_L (0x10)
|
|
81
|
+
|
|
82
|
+
#endif /* X86DEFS_H */
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of Funchook.
|
|
3
|
+
* https://github.com/kubo/funchook
|
|
4
|
+
*
|
|
5
|
+
* Funchook is free software: you can redistribute it and/or modify it
|
|
6
|
+
* under the terms of the GNU General Public License as published by the
|
|
7
|
+
* Free Software Foundation, either version 2 of the License, or (at your
|
|
8
|
+
* option) any later version.
|
|
9
|
+
*
|
|
10
|
+
* As a special exception, the copyright holders of this library give you
|
|
11
|
+
* permission to link this library with independent modules to produce an
|
|
12
|
+
* executable, regardless of the license terms of these independent
|
|
13
|
+
* modules, and to copy and distribute the resulting executable under
|
|
14
|
+
* terms of your choice, provided that you also meet, for each linked
|
|
15
|
+
* independent module, the terms and conditions of the license of that
|
|
16
|
+
* module. An independent module is a module which is not derived from or
|
|
17
|
+
* based on this library. If you modify this library, you may extend this
|
|
18
|
+
* exception to your version of the library, but you are not obliged to
|
|
19
|
+
* do so. If you do not wish to do so, delete this exception statement
|
|
20
|
+
* from your version.
|
|
21
|
+
*
|
|
22
|
+
* Funchook is distributed in the hope that it will be useful, but WITHOUT
|
|
23
|
+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
24
|
+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
25
|
+
* for more details.
|
|
26
|
+
*
|
|
27
|
+
* You should have received a copy of the GNU General Public License
|
|
28
|
+
* along with Funchook. If not, see <http://www.gnu.org/licenses/>.
|
|
29
|
+
*/
|
|
30
|
+
#ifndef FUNCHOOK_H
|
|
31
|
+
#define FUNCHOOK_H 1
|
|
32
|
+
|
|
33
|
+
/*
|
|
34
|
+
* Only functions with FUNCHOOK_EXPORT are visible from outside of funchook.dll
|
|
35
|
+
* or libfunchook.so. Others are invisible.
|
|
36
|
+
*/
|
|
37
|
+
#ifdef WIN32
|
|
38
|
+
#ifdef FUNCHOOK_EXPORTS
|
|
39
|
+
#define FUNCHOOK_EXPORT __declspec(dllexport)
|
|
40
|
+
#else /* FUNCHOOK_EXPORTS */
|
|
41
|
+
#define FUNCHOOK_EXPORT __declspec(dllimport)
|
|
42
|
+
#endif /* FUNCHOOK_EXPORTS */
|
|
43
|
+
#elif defined(__GNUC__)
|
|
44
|
+
#define FUNCHOOK_EXPORT __attribute__((visibility("default")))
|
|
45
|
+
#else
|
|
46
|
+
#define FUNCHOOK_EXPORT
|
|
47
|
+
#endif /* WIN32 */
|
|
48
|
+
|
|
49
|
+
typedef struct funchook funchook_t;
|
|
50
|
+
|
|
51
|
+
#define FUNCHOOK_ERROR_INTERNAL_ERROR -1
|
|
52
|
+
#define FUNCHOOK_ERROR_SUCCESS 0
|
|
53
|
+
#define FUNCHOOK_ERROR_OUT_OF_MEMORY 1
|
|
54
|
+
#define FUNCHOOK_ERROR_ALREADY_INSTALLED 2
|
|
55
|
+
#define FUNCHOOK_ERROR_DISASSEMBLY 3
|
|
56
|
+
#define FUNCHOOK_ERROR_IP_RELATIVE_OFFSET 4
|
|
57
|
+
#define FUNCHOOK_ERROR_CANNOT_FIX_IP_RELATIVE 5
|
|
58
|
+
#define FUNCHOOK_ERROR_FOUND_BACK_JUMP 6
|
|
59
|
+
#define FUNCHOOK_ERROR_TOO_SHORT_INSTRUCTIONS 7
|
|
60
|
+
#define FUNCHOOK_ERROR_MEMORY_ALLOCATION 8 /* memory allocation error */
|
|
61
|
+
#define FUNCHOOK_ERROR_MEMORY_FUNCTION 9 /* other memory function errors */
|
|
62
|
+
#define FUNCHOOK_ERROR_NOT_INSTALLED 10
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Create a funchook handle
|
|
66
|
+
*
|
|
67
|
+
* @return allocated funchook handle. NULL when out-of-memory.
|
|
68
|
+
*/
|
|
69
|
+
FUNCHOOK_EXPORT funchook_t *funchook_create(void);
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Prepare hooking
|
|
73
|
+
*
|
|
74
|
+
* @param funchook a funchook handle created by funchook_create()
|
|
75
|
+
* @param target_func function pointer to be intercepted. The pointer to trampoline function is set on success.
|
|
76
|
+
* @param hook_func function pointer which is called istead of target_func
|
|
77
|
+
* @return error code. one of FUNCHOOK_ERROR_*.
|
|
78
|
+
*/
|
|
79
|
+
FUNCHOOK_EXPORT int funchook_prepare(funchook_t *funchook, void **target_func, void *hook_func);
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Install hooks prepared by funchook_prepare().
|
|
83
|
+
*
|
|
84
|
+
* @param funchook a funchook handle created by funchook_create()
|
|
85
|
+
* @param flags reserved. Set zero.
|
|
86
|
+
* @return error code. one of FUNCHOOK_ERROR_*.
|
|
87
|
+
*/
|
|
88
|
+
FUNCHOOK_EXPORT int funchook_install(funchook_t *funchook, int flags);
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Uninstall hooks installed by funchook_install().
|
|
92
|
+
*
|
|
93
|
+
* @param funchook a funchook handle created by funchook_create()
|
|
94
|
+
* @param flags reserved. Set zero.
|
|
95
|
+
* @return error code. one of FUNCHOOK_ERROR_*.
|
|
96
|
+
*/
|
|
97
|
+
FUNCHOOK_EXPORT int funchook_uninstall(funchook_t *funchook, int flags);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Destroy a funchook handle
|
|
101
|
+
*
|
|
102
|
+
* @param funchook a funchook handle created by funchook_create()
|
|
103
|
+
* @return error code. one of FUNCHOOK_ERROR_*.
|
|
104
|
+
*/
|
|
105
|
+
FUNCHOOK_EXPORT int funchook_destroy(funchook_t *funchook);
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Get error message
|
|
109
|
+
*
|
|
110
|
+
* @param funchook a funchook handle created by funchook_create()
|
|
111
|
+
* @return pointer to buffer containing error message
|
|
112
|
+
*/
|
|
113
|
+
FUNCHOOK_EXPORT const char *funchook_error_message(const funchook_t *funchook);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Set log file name to debug funchook itself.
|
|
117
|
+
*
|
|
118
|
+
* @param name log file name
|
|
119
|
+
* @return error code. one of FUNCHOOK_ERROR_*.
|
|
120
|
+
*/
|
|
121
|
+
FUNCHOOK_EXPORT int funchook_set_debug_file(const char *name);
|
|
122
|
+
|
|
123
|
+
#endif
|