-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMaltegoLocalTransformLib.pb
163 lines (138 loc) · 5.43 KB
/
MaltegoLocalTransformLib.pb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
OpenConsole()
#MaltegoType_Email = "EmailAddress"
#MaltegoType_Person = "Person"
#MaltegoType_MatchingRule = "loose"
Structure Field
DisplayName.s
MatchingRule.s
Value.s
EndStructure
Structure MaltegoEntity
Type.s
Value.s
Weight.i
ConnectionLabel.s
Map AdditionalFields.Field()
List ConnectionLabelProperties.s();Not Implemented
;{
; AdditionalFields("link#0")\DisplayName = "My first edge property"
; AdditionalFields("link#0")\Value = "My first edge property value"
; AdditionalFields("link#0")\MatchingRule = #MaltegoType_MatchingRule
;
; AdditionalFields("link#1")\DisplayName = "My second edge property"
; AdditionalFields("link#1")\Value = "My second edge property value"
; AdditionalFields("link#1")\MatchingRule = #MaltegoType_MatchingRule
;}
VisibleConnectionLabelIndex.i
EndStructure
Global NewList MaltegoReturnEntities.MaltegoEntity()
Procedure AddMaltegoCustomEntity(Type.s,Value.s,Map *AdditionalFields.Field(), LinkLabel.s="",Weight=0)
;Basic Information
AddElement(MaltegoReturnEntities())
MaltegoReturnEntities()\Type = Type
MaltegoReturnEntities()\Value = Value
MaltegoReturnEntities()\Weight = Weight
;Additional dynamic properties
CopyMap(*AdditionalFields(),MaltegoReturnEntities()\AdditionalFields())
If Len(LinkLabel) > 0
;Label on Arrow:
MaltegoReturnEntities()\AdditionalFields("link#maltego.link.label")\DisplayName = "link#maltego.link.label"
MaltegoReturnEntities()\AdditionalFields("link#maltego.link.label")\Value = LinkLabel
MaltegoReturnEntities()\AdditionalFields("link#maltego.link.label")\MatchingRule = #MaltegoType_MatchingRule
MaltegoReturnEntities()\AdditionalFields("link#maltego.link.show-label")\DisplayName = "link#maltego.link.show-label"
MaltegoReturnEntities()\AdditionalFields("link#maltego.link.show-label")\Value = "1"
MaltegoReturnEntities()\AdditionalFields("link#maltego.link.show-label")\MatchingRule = #MaltegoType_MatchingRule
EndIf
EndProcedure
;{ Templates
Procedure Maltego_PersonEnrichEntity(EntityType.s,EntityValue.s,firstname.s="",lastname.s="",AutogenerateName=0)
ForEach MaltegoReturnEntities()
If MaltegoReturnEntities()\Type = EntityType And MaltegoReturnEntities()\Value = EntityValue
MaltegoReturnEntities()\AdditionalFields("firstname")\Value = firstname
MaltegoReturnEntities()\AdditionalFields("lastname")\Value = lastname
If AutogenerateName
MaltegoReturnEntities()\Value = ""
EndIf
Else
Continue
EndIf
Next
EndProcedure
;}
Structure Properties
Map Property.s()
EndStructure
Structure InputParams
List Params.Properties()
EndStructure
Procedure Maltego_ReadInput(*Input.InputParams)
For x = 1 To CountProgramParameters()
Param$ = ProgramParameter()
If FindString(Param$,"=")
For y = 1 To CountString(Param$,"#")+1
AddElement(*Input\Params())
tempString.s = StringField(Param$,y,"#")
a.s = StringField(tempString,1,"=")
b.s = StringField(tempString,2,"=")
*Input\Params()\Property(a) = b
Next
Else
AddElement(*Input\Params())
*Input\Params()\Property(Param$) = Param$
EndIf
Next
EndProcedure
;{ Documentation
;Param 1 = "Hans Wurst"
;Param 2 = "person.fullname=Hans Wurst#firstname=Hans#lastname=Wurst"
;Param 3 = ""
;}
Procedure.s CreateMaltegoStdoutXml()
result$ = "<MaltegoMessage>"
result$ + "<MaltegoTransformResponseMessage>"
result$ + " <Entities>"
ForEach MaltegoReturnEntities()
result$ + " <Entity Type="+Chr(34)+MaltegoReturnEntities()\Type+Chr(34)+">"
result$ + " <Value>"+Chr(34)+MaltegoReturnEntities()\Value+Chr(34)+"</Value>"
result$ + " <Weight>"+MaltegoReturnEntities()\Weight+"</Weight>"
If MapSize(MaltegoReturnEntities()\AdditionalFields()) > 0
result$ + "<AdditionalFields>"
ForEach MaltegoReturnEntities()\AdditionalFields()
result$ + "<Field Name="+Chr(34)+MapKey(MaltegoReturnEntities()\AdditionalFields())+Chr(34)+" "
result$ + "DisplayName="+Chr(34)+MaltegoReturnEntities()\AdditionalFields()\DisplayName+Chr(34)+" "
result$ + "MatchingRule="+Chr(34)+MaltegoReturnEntities()\AdditionalFields()\MatchingRule+Chr(34)+" "
result$ + ">"+MaltegoReturnEntities()\AdditionalFields()\Value+"</Field>"
Next
result$ + "</AdditionalFields>"
EndIf
result$ + " </Entity>"
Next
result$ + " </Entities>"
result$ + "</MaltegoTransformResponseMessage>"
result$ + "</MaltegoMessage>"
ProcedureReturn result$
EndProcedure
; NewMap AdditionalFields.Field()
; AdditionalFields("Age")\DisplayName = "Age"
; AdditionalFields("Age")\Value = "45"
; AdditionalFields("Age")\MatchingRule = #MaltegoType_MatchingRule
;
; AdditionalFields("HairColor")\DisplayName = "Hair Color"
; AdditionalFields("HairColor")\Value = "Blond"
; AdditionalFields("HairColor")\MatchingRule = #MaltegoType_MatchingRule
; AddMaltegoCustomEntity(#MaltegoType_Person,"Hans Wurst",AdditionalFields(),"Geiler Scheiss")
; Maltego_PersonEnrichEntity(#MaltegoType_Person,"Hans Wurst","Hans","Wurst",1)
; Output
Procedure Maltego_Output()
MaltegoXmlStdOutString.s = CreateMaltegoStdoutXml()
Print(MaltegoXmlStdOutString)
FlushFileBuffers_(GetStdHandle_(#STD_OUTPUT_HANDLE))
EndProcedure
; IDE Options = PureBasic 6.00 LTS (Windows - x64)
; ExecutableFormat = Console
; CursorPosition = 5
; Folding = B9
; EnableThread
; EnableXP
; DPIAware
; Executable = ..\Bitmasker\IACR-Scaper\IACR_StudentToPublicationTransform.exe