[feat] optimize
This commit is contained in:
		
							
								
								
									
										248
									
								
								01/project-hbj-attacker/.idea/editor.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										248
									
								
								01/project-hbj-attacker/.idea/editor.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,248 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <project version="4"> | ||||||
|  |   <component name="BackendCodeEditorSettings"> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedOverridenMethod/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppModulePartitionWithSeveralPartitionUnits/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantFwdClassOrEnumSpecifier/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifierADL/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" /> | ||||||
|  |     <option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" /> | ||||||
|  |   </component> | ||||||
|  | </project> | ||||||
| @@ -1,5 +1,6 @@ | |||||||
| mod map; | mod map; | ||||||
| mod processes; | mod processes; | ||||||
|  | mod asm; | ||||||
|  |  | ||||||
| pub use map::is_address_in_range; | pub use map::is_address_in_range; | ||||||
| pub use processes::get_pid_by_name; | pub use processes::get_pid_by_name; | ||||||
| @@ -9,3 +10,6 @@ pub use processes::write_memory_ptrace; | |||||||
| pub use map::first_rw_segment; | pub use map::first_rw_segment; | ||||||
| pub use map::module_base_address; | pub use map::module_base_address; | ||||||
| pub use map::first_exec_segment; | pub use map::first_exec_segment; | ||||||
|  | pub use asm::assemble; | ||||||
|  | pub use processes::find_remote_proc; | ||||||
|  | pub use processes::wait; | ||||||
							
								
								
									
										12
									
								
								01/project-hbj-attacker/src/helper/asm.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								01/project-hbj-attacker/src/helper/asm.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  |  | ||||||
|  | use iced_x86::code_asm::asm_traits::CodeAsmJmp; | ||||||
|  | use iced_x86::{Instruction, code_asm::*}; | ||||||
|  |  | ||||||
|  | pub fn assemble<F>(addr: u64, op: F) -> Result<Vec<u8>, Box<dyn std::error::Error>> | ||||||
|  | where | ||||||
|  |     F: Fn(&mut CodeAssembler) -> Result<(), Box<dyn std::error::Error>>, | ||||||
|  | { | ||||||
|  |     let mut asm = CodeAssembler::new(64)?; | ||||||
|  |     _ = op(&mut asm); | ||||||
|  |     Ok(asm.assemble(addr)?) | ||||||
|  | } | ||||||
| @@ -4,9 +4,44 @@ use std::fs; | |||||||
| use nix::sys::uio::{process_vm_readv, RemoteIoVec, process_vm_writev}; | use nix::sys::uio::{process_vm_readv, RemoteIoVec, process_vm_writev}; | ||||||
| use nix::unistd::Pid; | use nix::unistd::Pid; | ||||||
| use std::error::Error; | use std::error::Error; | ||||||
|  | use std::ffi::CString; | ||||||
| use std::io::{IoSliceMut, IoSlice}; | use std::io::{IoSliceMut, IoSlice}; | ||||||
| use nix::sys::ptrace; | use nix::sys::ptrace; | ||||||
| use std::mem; | use std::mem; | ||||||
|  | use libc::{dlsym, RTLD_NEXT}; | ||||||
|  | use crate::helper::module_base_address; | ||||||
|  | use nix::sys::wait::{waitpid, WaitPidFlag, WaitStatus}; | ||||||
|  |  | ||||||
|  | const GREEN: &str = "\x1b[32m"; | ||||||
|  | const RESET: &str = "\x1b[0m"; | ||||||
|  |  | ||||||
|  | pub fn wait(pid: Pid) -> Option<WaitStatus> | ||||||
|  | { | ||||||
|  |     let f = waitpid(pid, Some(WaitPidFlag::WUNTRACED)).ok()?; | ||||||
|  |  | ||||||
|  |     match f { | ||||||
|  |         WaitStatus::Stopped(stopped_pid, signal) => { | ||||||
|  |             println!("[DEBUG] PID {} stopped by signal: {:?}", stopped_pid, signal); | ||||||
|  |         } | ||||||
|  |         WaitStatus::Exited(exited_pid, status) => { | ||||||
|  |             println!("[DEBUG] PID {} exited with status: {}", exited_pid, status); | ||||||
|  |         } | ||||||
|  |         WaitStatus::Signaled(signaled_pid, signal, core_dump) => { | ||||||
|  |             println!("[DEBUG] PID {} killed by signal: {:?} (core dump: {})", | ||||||
|  |                      signaled_pid, signal, core_dump); | ||||||
|  |         } | ||||||
|  |         WaitStatus::Continued(continued_pid) => { | ||||||
|  |             println!("[DEBUG] PID {} continued", continued_pid); | ||||||
|  |         } | ||||||
|  |         WaitStatus::StillAlive => { | ||||||
|  |             println!("[DEBUG] PID {} still alive", pid); | ||||||
|  |         } | ||||||
|  |         _ => {} | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     Some(f) | ||||||
|  | } | ||||||
|  |  | ||||||
| fn list_processes() -> Result<HashMap<String, i32>, std::io::Error> | fn list_processes() -> Result<HashMap<String, i32>, std::io::Error> | ||||||
| { | { | ||||||
|     let mut processes = HashMap::<String, i32>::new(); |     let mut processes = HashMap::<String, i32>::new(); | ||||||
| @@ -86,7 +121,7 @@ pub fn write_memory_vm(pid: Pid, mut start_addr: usize, mut data: &[u8]) -> Resu | |||||||
| } | } | ||||||
|  |  | ||||||
| pub fn write_memory_ptrace(pid: Pid, start_addr: usize, data: &[u8]) -> Result<usize, Box<dyn Error>> { | pub fn write_memory_ptrace(pid: Pid, start_addr: usize, data: &[u8]) -> Result<usize, Box<dyn Error>> { | ||||||
|     let word_size = mem::size_of::<libc::c_long>(); |     let word_size = size_of::<libc::c_long>(); | ||||||
|     if word_size == 0 { |     if word_size == 0 { | ||||||
|         return Err("invalid word size".into()); |         return Err("invalid word size".into()); | ||||||
|     } |     } | ||||||
| @@ -137,11 +172,11 @@ fn write_unaligned_head( | |||||||
| } | } | ||||||
|  |  | ||||||
| fn write_full_word(pid: Pid, addr: usize, data: &[u8]) -> Result<usize, Box<dyn Error>> { | fn write_full_word(pid: Pid, addr: usize, data: &[u8]) -> Result<usize, Box<dyn Error>> { | ||||||
|     let mut arr = [0u8; mem::size_of::<libc::c_long>()]; |     let mut arr = [0u8; size_of::<libc::c_long>()]; | ||||||
|     arr.copy_from_slice(data); |     arr.copy_from_slice(data); | ||||||
|     let val = libc::c_long::from_ne_bytes(arr); |     let val = libc::c_long::from_ne_bytes(arr); | ||||||
|     ptrace::write(pid, addr as *mut libc::c_void, val)?; |     ptrace::write(pid, addr as *mut libc::c_void, val)?; | ||||||
|     Ok(mem::size_of::<libc::c_long>()) |     Ok(size_of::<libc::c_long>()) | ||||||
| } | } | ||||||
|  |  | ||||||
| fn write_unaligned_tail( | fn write_unaligned_tail( | ||||||
| @@ -158,3 +193,53 @@ fn write_unaligned_tail( | |||||||
|     ptrace::write(pid, addr as *mut libc::c_void, new_word)?; |     ptrace::write(pid, addr as *mut libc::c_void, new_word)?; | ||||||
|     Ok(data.len()) |     Ok(data.len()) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | pub fn find_remote_proc(module: &str, symbol: &str, pid: Pid) -> Option<u64> | ||||||
|  | { | ||||||
|  |     // Read our own process memory maps to find module base address | ||||||
|  |     let self_maps = fs::read_to_string("/proc/self/maps").ok()?; | ||||||
|  |     let self_map_lines = self_maps.lines().collect::<Vec<&str>>(); | ||||||
|  |     let symbol_offset: u64; | ||||||
|  |  | ||||||
|  |     // Find module base address in our own process | ||||||
|  |     let Some(module_base_local) = module_base_address(&self_map_lines, module) else { | ||||||
|  |         return None; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     println!("{GREEN}[local]{RESET} {module} base: {:#016x}", module_base_local); | ||||||
|  |  | ||||||
|  |     // Use dlsym to get the address of symbol in our own process | ||||||
|  |     unsafe { | ||||||
|  |         let symbol_addr_local = dlsym(RTLD_NEXT, CString::new(symbol).unwrap().as_bytes_with_nul().as_ptr() as *const _); | ||||||
|  |         // Calculate offset of symbol from module base in our process | ||||||
|  |         symbol_offset = symbol_addr_local as u64 - module_base_local; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     println!( | ||||||
|  |         "{GREEN}[local]{RESET} {symbol} offset = {:#016x}", | ||||||
|  |         symbol_offset | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     // Read target process memory maps to find its module base address | ||||||
|  |     let target_maps = fs::read_to_string(format!("/proc/{}/maps", pid)).ok()?; | ||||||
|  |     let target_map_lines = target_maps.lines().collect::<Vec<&str>>(); | ||||||
|  |  | ||||||
|  |     // Find module base address in target process | ||||||
|  |     let Some(module_base_target) = module_base_address(&target_map_lines, module) else { | ||||||
|  |         return None; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     println!( | ||||||
|  |         "{GREEN}[trace]{RESET} {module} base = {:#016x}", | ||||||
|  |         module_base_target | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     // Calculate symbol address in target process using the same offset | ||||||
|  |     let target_symbol_addr = module_base_target + symbol_offset; | ||||||
|  |     println!( | ||||||
|  |         "{GREEN}[trace]{RESET} {symbol} address = {:#016x}", | ||||||
|  |         target_symbol_addr | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     Some(target_symbol_addr) | ||||||
|  | } | ||||||
| @@ -3,113 +3,64 @@ | |||||||
| mod helper; | mod helper; | ||||||
|  |  | ||||||
| use nix::sys::ptrace; | use nix::sys::ptrace; | ||||||
| use nix::sys::wait::waitpid; |  | ||||||
| use nix::unistd::Pid; | use nix::unistd::Pid; | ||||||
| use std::arch::asm; | use std::arch::asm; | ||||||
| use std::ffi::CString; | use std::ffi::CString; | ||||||
|  |  | ||||||
| use helper::*; | use helper::*; | ||||||
| use iced_x86::code_asm::asm_traits::CodeAsmJmp; | use iced_x86::code_asm::{eax, r8, r9, r10, rax, rdi, rdx, rsi, rcx, rsp, rbp}; | ||||||
| use iced_x86::{Instruction, code_asm::*}; |  | ||||||
| use libc::user_regs_struct; |  | ||||||
| use libc::{RTLD_NEXT, c_void, dlsym}; | use libc::{RTLD_NEXT, c_void, dlsym}; | ||||||
|  | use libc::{ptrace, user_regs_struct}; | ||||||
| use std::fs; | use std::fs; | ||||||
| use std::io::BufRead; | use std::io::BufRead; | ||||||
|  |  | ||||||
| const GREEN: &str = "\x1b[32m"; | const GREEN: &str = "\x1b[32m"; | ||||||
| const RESET: &str = "\x1b[0m"; | const RESET: &str = "\x1b[0m"; | ||||||
|  |  | ||||||
| fn inject1( | fn inject1(pid: Pid, seg_rw: (u64, u64)) -> Result<(), Box<dyn std::error::Error>> // Simple injection | ||||||
|     pid: Pid, |  | ||||||
|     seg_rw: (u64, u64), |  | ||||||
|     regs: user_regs_struct, |  | ||||||
| ) -> Result<(), Box<dyn std::error::Error>> // Simple injection |  | ||||||
| { | { | ||||||
|  |     let regs = ptrace::getregs(pid)?; | ||||||
|     let injected_data = "You are injected. \r\n"; |     let injected_data = "You are injected. \r\n"; | ||||||
|     write_memory_vm(pid, seg_rw.0 as usize, &injected_data.as_bytes())?; |     write_memory_vm(pid, seg_rw.0 as usize, &injected_data.as_bytes())?; | ||||||
|  |     println!( | ||||||
|  |         "{GREEN}[trace]{RESET} write \"{}\" to {:#016x}", | ||||||
|  |         injected_data, seg_rw.0 | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     let mut asm = CodeAssembler::new(64)?; |     let injected_inst = assemble(regs.rip as u64, |asm| { | ||||||
|  |         asm.mov(rax, 1u64)?; // Syscall 1 (write) | ||||||
|  |         asm.mov(rdi, 1u64)?; // Fd 1 (STDOUT) | ||||||
|  |         asm.mov(rsi, seg_rw.0)?; // Buffer pointer (Here is rw segment in target) | ||||||
|  |         asm.mov(rdx, injected_data.as_bytes().len() as u64)?; // Buffer length | ||||||
|  |         asm.syscall()?; // Syscall interrupt | ||||||
|  |         asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow | ||||||
|  |         Ok(()) | ||||||
|  |     })?; | ||||||
|  |  | ||||||
|     asm.mov(rax, 1u64)?; // Syscall 1 (write) |  | ||||||
|     asm.mov(rdi, 1u64)?; // Fd 1 (STDOUT) |  | ||||||
|     asm.mov(rsi, seg_rw.0)?; // Buffer pointer (Here is rw segment in target) |  | ||||||
|     asm.mov(rdx, injected_data.as_bytes().len() as u64)?; // Buffer length |  | ||||||
|     asm.syscall()?; // Syscall interrupt |  | ||||||
|  |  | ||||||
|     asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow |  | ||||||
|  |  | ||||||
|     let injected_inst = asm.assemble(regs.rip as u64)?; |  | ||||||
|     write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?; |     write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?; | ||||||
|  |     println!( | ||||||
|  |         "{GREEN}[trace]{RESET} write instructions to {:#016x}", | ||||||
|  |         regs.rip | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     // Continue target |     // Continue target | ||||||
|     ptrace::cont(pid, None)?; |     ptrace::cont(pid, None)?; | ||||||
|     waitpid(pid, None)?; |     println!("{GREEN}[trace]{RESET} continue from {:#016x}", regs.rip); | ||||||
|  |     wait(pid); | ||||||
|  |  | ||||||
|  |     let regs = ptrace::getregs(pid)?; | ||||||
|  |     println!("{GREEN}[trace]{RESET} int3 at {:#016x}", regs.rip); | ||||||
|  |  | ||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
|  |  | ||||||
| fn inject2( | fn inject2(pid: Pid, seg_rw: (u64, u64)) -> Result<(), Box<dyn std::error::Error>> // ld injection | ||||||
|     pid: Pid, |  | ||||||
|     seg_rw: (u64, u64), |  | ||||||
|     regs: user_regs_struct, |  | ||||||
| ) -> Result<(), Box<dyn std::error::Error>> // ld injection |  | ||||||
| { | { | ||||||
|  |     let regs = ptrace::getregs(pid)?; | ||||||
|     // Get the absolute path to our shared library |     // Get the absolute path to our shared library | ||||||
|     let lib_path = fs::canonicalize("./target/debug/libproject_hbj_attacker.so")? |     let lib_path = fs::canonicalize("./target/debug/libproject_hbj_attacker.so")? | ||||||
|         .to_string_lossy() |         .to_string_lossy() | ||||||
|         .into_owned(); |         .into_owned(); | ||||||
|     let cpid = nix::unistd::getpid().to_string(); |  | ||||||
|  |  | ||||||
|     // Read our own process memory maps to find libc base address |  | ||||||
|     let self_maps = fs::read_to_string(format!("/proc/{}/maps", cpid))?; |  | ||||||
|     let self_map_lines = self_maps.lines().collect::<Vec<&str>>(); |  | ||||||
|     let mut dlopen_offset: u64 = 0; |  | ||||||
|  |  | ||||||
|     // Find libc base address in our own process |  | ||||||
|     let Some(libc_base_local) = module_base_address(&self_map_lines, "libc.so") else { |  | ||||||
|         return Err(Box::new(std::io::Error::new( |  | ||||||
|             std::io::ErrorKind::Other, |  | ||||||
|             "libc not found", |  | ||||||
|         ))); |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     println!("{GREEN}[local]{RESET} libc base: {:#016x}", libc_base_local); |  | ||||||
|  |  | ||||||
|     // Use dlsym to get the address of dlopen in our own process |  | ||||||
|     unsafe { |  | ||||||
|         let dlopen_addr_local = dlsym(RTLD_NEXT, b"dlopen\0".as_ptr() as *const _); |  | ||||||
|         // Calculate offset of dlopen from libc base in our process |  | ||||||
|         dlopen_offset = dlopen_addr_local as u64 - libc_base_local; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     println!( |  | ||||||
|         "{GREEN}[local]{RESET} dlopen offset = {:#016x}", |  | ||||||
|         dlopen_offset |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     // Read target process memory maps to find its libc base address |  | ||||||
|     let target_maps = fs::read_to_string(format!("/proc/{}/maps", pid))?; |  | ||||||
|     let target_map_lines = target_maps.lines().collect::<Vec<&str>>(); |  | ||||||
|  |  | ||||||
|     // Find libc base address in target process |  | ||||||
|     let Some(libc_base_target) = module_base_address(&target_map_lines, "libc.so") else { |  | ||||||
|         return Err(Box::new(std::io::Error::new( |  | ||||||
|             std::io::ErrorKind::Other, |  | ||||||
|             "libc not found", |  | ||||||
|         ))); |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     println!( |  | ||||||
|         "{GREEN}[trace]{RESET} libc base = {:#016x}", |  | ||||||
|         libc_base_target |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     // Calculate dlopen address in target process using the same offset |  | ||||||
|     let target_dlopen_addr = libc_base_target + dlopen_offset; |  | ||||||
|     println!( |  | ||||||
|         "{GREEN}[trace]{RESET} dlopen address = {:#016x}", |  | ||||||
|         target_dlopen_addr |  | ||||||
|     ); |  | ||||||
|  |  | ||||||
|     // Start Inject |     // Start Inject | ||||||
|     let c_lib_path = CString::new(lib_path).unwrap(); |     let c_lib_path = CString::new(lib_path).unwrap(); | ||||||
| @@ -120,13 +71,21 @@ fn inject2( | |||||||
|         seg_rw.0 |         seg_rw.0 | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     let mut asm = CodeAssembler::new(64)?; |     let Some(target_dlopen_addr) = find_remote_proc("libc.so", "dlopen", pid) else { | ||||||
|     asm.mov(rdi, seg_rw.0)?; // Param 1: Filename |         return Err(Box::new(std::io::Error::new( | ||||||
|     asm.mov(rsi, 2u64)?; // Param 2: Flag, 2(RTLD_NOW) |             std::io::ErrorKind::Other, | ||||||
|     asm.call(target_dlopen_addr)?; // Syscall interrupt |             "first rw segment not found", | ||||||
|  |         ))); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     let injected_inst = assemble(regs.rip as u64, |asm| { | ||||||
|  |         asm.mov(rdi, seg_rw.0)?; // Param 1: Filename | ||||||
|  |         asm.mov(rsi, 2u64)?; // Param 2: Flag, 2(RTLD_NOW) | ||||||
|  |         asm.call(target_dlopen_addr)?; // Syscall interrupt | ||||||
|  |         asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow | ||||||
|  |         Ok(()) | ||||||
|  |     })?; | ||||||
|  |  | ||||||
|     asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow |  | ||||||
|     let injected_inst = asm.assemble(regs.rip as u64)?; |  | ||||||
|     write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?; |     write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?; | ||||||
|     println!( |     println!( | ||||||
|         "{GREEN}[trace]{RESET} write instructions to {:#016x}", |         "{GREEN}[trace]{RESET} write instructions to {:#016x}", | ||||||
| @@ -135,37 +94,38 @@ fn inject2( | |||||||
|  |  | ||||||
|     // Continue target |     // Continue target | ||||||
|     ptrace::cont(pid, None)?; |     ptrace::cont(pid, None)?; | ||||||
|     println!("{GREEN}[trace]{RESET} running..."); |     println!("{GREEN}[trace]{RESET} continue from {:#016x}", regs.rip); | ||||||
|     waitpid(pid, None)?; |     wait(pid); | ||||||
|     println!("{GREEN}[trace]{RESET} int3!"); |  | ||||||
|  |     let regs = ptrace::getregs(pid)?; | ||||||
|  |     println!("{GREEN}[trace]{RESET} int3 at {:#016x}", regs.rip); | ||||||
|  |  | ||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
|  |  | ||||||
| fn inject3( | fn inject3(pid: Pid, seg_rw: (u64, u64)) -> Result<(), Box<dyn std::error::Error>> // thread inject | ||||||
|     pid: Pid, |  | ||||||
|     seg_rw: (u64, u64), |  | ||||||
|     regs: user_regs_struct, |  | ||||||
| ) -> Result<(), Box<dyn std::error::Error>> // thread inject |  | ||||||
| { | { | ||||||
|  |     let regs = ptrace::getregs(pid)?; | ||||||
|     // Alloc rwx memory |     // Alloc rwx memory | ||||||
|     let mut asm = CodeAssembler::new(64)?; |  | ||||||
|  |  | ||||||
|     asm.mov(rax, 9u64)?; // Syscall 9 (mmap) |     let injected_inst = assemble(regs.rip as u64, |asm| { | ||||||
|  |         asm.mov(rax, 9u64)?; // Syscall 9 (mmap) | ||||||
|  |  | ||||||
|     asm.mov(rdi, 0u64)?; // Addr |         asm.mov(rdi, 0u64)?; // Addr | ||||||
|     asm.mov(rsi, 4096u64)?; // Length, we alloc a page (4K) |         asm.mov(rsi, 4096u64)?; // Length, we alloc a page (4K) | ||||||
|     asm.mov( |         asm.mov( | ||||||
|         rdx, |             rdx, | ||||||
|         (libc::PROT_READ | libc::PROT_WRITE | libc::PROT_EXEC) as u64, |             (libc::PROT_READ | libc::PROT_WRITE | libc::PROT_EXEC) as u64, | ||||||
|     )?; // Set protect to rwx |         )?; // Set protect to rwx | ||||||
|     asm.mov(r10, (libc::MAP_SHARED | libc::MAP_ANONYMOUS) as u64)?; // Private and anonymous |         asm.mov(r10, (libc::MAP_PRIVATE | libc::MAP_ANONYMOUS) as u64)?; // Private and anonymous | ||||||
|     asm.mov(r8, 01i64)?; // Fd (-1 because we want anonymous) |         asm.mov(r8, 01i64)?; // Fd (-1 because we want anonymous) | ||||||
|     asm.mov(r9, 0u64)?; // Offset |         asm.mov(r9, 0u64)?; // Offset | ||||||
|  |  | ||||||
|     asm.syscall()?; // Syscall interrupt |         asm.syscall()?; // Syscall interrupt | ||||||
|     asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow |         asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow | ||||||
|  |         Ok(()) | ||||||
|  |     })?; | ||||||
|  |  | ||||||
|     let injected_inst = asm.assemble(regs.rip as u64)?; |  | ||||||
|     write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?; |     write_memory_ptrace(pid, regs.rip as usize, &injected_inst)?; | ||||||
|     println!( |     println!( | ||||||
|         "{GREEN}[trace]{RESET} write instructions to {:#016x}", |         "{GREEN}[trace]{RESET} write instructions to {:#016x}", | ||||||
| @@ -174,9 +134,13 @@ fn inject3( | |||||||
|  |  | ||||||
|     // Continue target |     // Continue target | ||||||
|     ptrace::cont(pid, None)?; |     ptrace::cont(pid, None)?; | ||||||
|     println!("{GREEN}[trace]{RESET} running..."); |     println!("{GREEN}[trace]{RESET} continue from {:#016x}", regs.rip); | ||||||
|     waitpid(pid, None)?; |     wait(pid); | ||||||
|     println!("{GREEN}[trace]{RESET} int3!"); |  | ||||||
|  |     println!( | ||||||
|  |         "{GREEN}[trace]{RESET} int3 at {:#016x}", | ||||||
|  |         ptrace::getregs(pid)?.rip | ||||||
|  |     ); | ||||||
|  |  | ||||||
|     let regs_after_map = ptrace::getregs(pid)?; |     let regs_after_map = ptrace::getregs(pid)?; | ||||||
|     let page_addr = regs_after_map.rax as usize; |     let page_addr = regs_after_map.rax as usize; | ||||||
| @@ -185,67 +149,79 @@ fn inject3( | |||||||
|         page_addr |         page_addr | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     let injected_data = "I am injected thread, I am running... \r\n"; |     let injected_data = "[%d] I am the injected thread, I am running... \r\n"; | ||||||
|     write_memory_vm(pid, page_addr + 0x500, &injected_data.as_bytes())?; |     write_memory_vm(pid, page_addr + 0x200, &CString::new(injected_data).unwrap().as_bytes_with_nul())?; | ||||||
|     write_memory_vm(pid, page_addr + 0x600, &1i64.to_le_bytes())?; |     write_memory_vm(pid, page_addr + 0x300, &1i64.to_le_bytes())?; | ||||||
|     write_memory_vm(pid, page_addr + 0x608, &0u64.to_le_bytes())?; |     write_memory_vm(pid, page_addr + 0x308, &0u64.to_le_bytes())?; | ||||||
|  |  | ||||||
|  |     let printf = find_remote_proc("libc.so", "printf", pid).unwrap(); | ||||||
|  |  | ||||||
|     asm = CodeAssembler::new(64)?; |  | ||||||
|     // Construct inject payload |     // Construct inject payload | ||||||
|     let mut target_label = asm.create_label(); |     let injected_payload = assemble(page_addr as u64, |asm| { | ||||||
|  |         let mut target_label = asm.create_label(); | ||||||
|  |  | ||||||
|     asm.set_label(&mut target_label)?; |         asm.mov(rbp, rsp)?; | ||||||
|     asm.mov(rax, 1u64)?; // Syscall 1 (write) |         asm.mov(rcx, 0u64)?; | ||||||
|     asm.mov(rdi, 1u64)?; // Fd 1 (STDOUT) |         asm.set_label(&mut target_label)?; | ||||||
|     asm.mov(rsi, (page_addr + 0x500) as u64)?; // Buffer pointer (Here is page_addr + 0x500) |  | ||||||
|     asm.mov(rdx, injected_data.as_bytes().len() as u64)?; // Buffer length |  | ||||||
|     asm.syscall()?; // Syscall interrupt |  | ||||||
|  |  | ||||||
|     asm.mov(rax, 35u64)?; // Syscall 35 (nano sleep) |         asm.add(rcx, 1i32)?; | ||||||
|     asm.mov(rdi, (page_addr + 0x600) as u64)?; // Req |         asm.push(rcx)?; | ||||||
|     asm.mov(rsi, 0u64)?; //Rem |  | ||||||
|     asm.syscall()?; // Syscall interrupt |  | ||||||
|  |  | ||||||
|     asm.jmp(target_label)?; // Jmp back to loop |         asm.mov(rdi, (page_addr + 0x200) as u64)?; | ||||||
|  |         asm.mov(rsi, rcx)?; | ||||||
|  |         asm.call(printf)?; | ||||||
|  |  | ||||||
|     let injected_payload = asm.assemble(page_addr as u64)?; |         asm.mov(rax, 35u64)?; // Syscall 35 (nano sleep) | ||||||
|  |         asm.mov(rdi, (page_addr + 0x300) as u64)?; // Req | ||||||
|  |         asm.mov(rsi, 0u64)?; //Rem | ||||||
|  |         asm.syscall()?; // Syscall interrupt | ||||||
|  |  | ||||||
|  |         asm.pop(rcx)?; | ||||||
|  |         asm.jmp(target_label)?; // Jmp back to loop | ||||||
|  |         Ok(()) | ||||||
|  |     })?; | ||||||
|     write_memory_vm(pid, page_addr, &injected_payload)?; |     write_memory_vm(pid, page_addr, &injected_payload)?; | ||||||
|     println!("{GREEN}[trace]{RESET} write payload to {:#016x}", page_addr); |     println!("{GREEN}[trace]{RESET} write payload to {:#016x}", page_addr); | ||||||
|  |  | ||||||
|     // Start Trigger |     // Start Trigger | ||||||
|     let regs = ptrace::getregs(pid)?; |     let regs = ptrace::getregs(pid)?; | ||||||
|  |     // ptrace::setregs(pid, regs)?; | ||||||
|  |  | ||||||
|     asm = CodeAssembler::new(64)?; |     let injected_trigger = assemble(regs.rip as u64, |asm| { | ||||||
|  |         asm.mov(rax, 56u64)?; // Syscall 56 (clone) | ||||||
|  |  | ||||||
|     asm.mov(rax, 56u64)?; // Syscall 56 (clone) |         asm.mov( | ||||||
|  |             rdi, | ||||||
|  |             (libc::CLONE_VM | ||||||
|  |                 | libc::CLONE_FS | ||||||
|  |                 | libc::CLONE_FILES | ||||||
|  |                 | libc::CLONE_SIGHAND | ||||||
|  |                 | libc::CLONE_THREAD) as u64, | ||||||
|  |         )?; // Flags | ||||||
|  |         asm.mov(rsi, (page_addr + 0x1000) as u64)?; // Stack top | ||||||
|  |  | ||||||
|     asm.mov( |         asm.mov(rdx, 0u64)?; // parent_tid = NULL | ||||||
|         rdi, |         asm.mov(r10, 0u64)?; // child_tid = NULL | ||||||
|         (libc::CLONE_VM |         asm.mov(r8, 0u64)?; // tls = NULL | ||||||
|             | libc::CLONE_FS |  | ||||||
|             | libc::CLONE_FILES |  | ||||||
|             | libc::CLONE_SIGHAND |  | ||||||
|             | libc::CLONE_THREAD) as u64, |  | ||||||
|     )?; // Flags |  | ||||||
|     asm.mov(rsi, (page_addr + 0x800) as u64)?; // Stack top |  | ||||||
|  |  | ||||||
|     asm.mov(rdx, 0u64)?; // parent_tid = NULL |         asm.syscall()?; // Syscall interrupt | ||||||
|     asm.mov(r10, 0u64)?; // child_tid = NULL |         asm.test(eax, eax)?; // Syscall returns zero? | ||||||
|     asm.mov(r8, 0u64)?; // tls = NULL |         asm.jz(page_addr as u64)?; | ||||||
|  |  | ||||||
|     asm.syscall()?; // Syscall interrupt |         asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow | ||||||
|     asm.test(eax, eax)?; // Syscall returns zero? |  | ||||||
|     asm.jz(page_addr as u64)?; |  | ||||||
|  |  | ||||||
|     asm.int3()?; // (Important!!!) Use int3 interrupt to retrieve control flow |         Ok(()) | ||||||
|  |     })?; | ||||||
|  |  | ||||||
|     let injected_trigger = asm.assemble(regs.rip as u64)?; |  | ||||||
|     write_memory_ptrace(pid, regs.rip as usize, &injected_trigger)?; |     write_memory_ptrace(pid, regs.rip as usize, &injected_trigger)?; | ||||||
|     println!("{GREEN}[trace]{RESET} write trigger to {:#016x}", regs.rip); |     println!("{GREEN}[trace]{RESET} write trigger to {:#016x}", regs.rip); | ||||||
|  |  | ||||||
|     // Continue target |  | ||||||
|     ptrace::cont(pid, None)?; |     ptrace::cont(pid, None)?; | ||||||
|     waitpid(pid, None)?; |     println!("{GREEN}[trace]{RESET} continue from {:#016x}", regs.rip); | ||||||
|  |     wait(pid); | ||||||
|  |  | ||||||
|  |     let regs = ptrace::getregs(pid)?; | ||||||
|  |     println!("{GREEN}[trace]{RESET} int3 at {:#016x}", regs.rip); | ||||||
|  |  | ||||||
|     Ok(()) |     Ok(()) | ||||||
| } | } | ||||||
| @@ -282,9 +258,9 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { | |||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     ptrace::attach(pid)?; |     ptrace::attach(pid)?; | ||||||
|     waitpid(pid, None)?; |     wait(pid); | ||||||
|     ptrace::step(pid, None)?; |     ptrace::step(pid, None)?; | ||||||
|     waitpid(pid, None)?; |     wait(pid); | ||||||
|  |  | ||||||
|     // ↓ Old behavior, but maybe the process stay in their libraries forever ? |     // ↓ Old behavior, but maybe the process stay in their libraries forever ? | ||||||
|  |  | ||||||
| @@ -304,28 +280,24 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { | |||||||
|  |  | ||||||
|     // Save context |     // Save context | ||||||
|     let regs = ptrace::getregs(pid)?; // Save current registers |     let regs = ptrace::getregs(pid)?; // Save current registers | ||||||
|     let buffer = read_memory_vm(pid, seg_x.0 as usize, 128)?; // Save current memory context |     let buffer = read_memory_vm(pid, seg_x.0 as usize, 4096)?; // Save current memory context | ||||||
|     let buffer_rw = read_memory_vm(pid, seg_rw.0 as usize, 128)?; // Save current rw memory |     let buffer_rw = read_memory_vm(pid, seg_rw.0 as usize, 4096)?; // Save current rw memory | ||||||
|  |  | ||||||
|     println!("{GREEN}[trace]{RESET} Seg_x.0 is {:#016x}", seg_x.0); |     println!("{GREEN}[trace]{RESET} Seg_x.0 is {:#016x}", seg_x.0); | ||||||
|  |  | ||||||
|     write_memory_ptrace(pid, seg_x.0 as usize, &[0x90u8; 128])?; |     write_memory_ptrace(pid, seg_x.0 as usize, &[0x90u8; 4096])?; | ||||||
|     ptrace::setregs(pid, user_regs_struct { |     ptrace::setregs( | ||||||
|         rip: seg_x.0, |  | ||||||
|         ..regs |  | ||||||
|     })?; |  | ||||||
|  |  | ||||||
|     // Do inject here |  | ||||||
|  |  | ||||||
|     inject3( |  | ||||||
|         pid, |         pid, | ||||||
|         seg_rw, |  | ||||||
|         user_regs_struct { |         user_regs_struct { | ||||||
|             rip: seg_x.0, |             rip: seg_x.0, | ||||||
|             ..regs |             ..regs | ||||||
|         }, |         }, | ||||||
|     )?; |     )?; | ||||||
|  |  | ||||||
|  |     // Do inject here | ||||||
|  |  | ||||||
|  |     inject3(pid, seg_rw)?; | ||||||
|  |  | ||||||
|     // End inject logics |     // End inject logics | ||||||
|  |  | ||||||
|     // Restore context |     // Restore context | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 rootacite
					rootacite