-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUE3_PACKAGE_ANALISYS.vb
3064 lines (2433 loc) · 148 KB
/
UE3_PACKAGE_ANALISYS.vb
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Module UE3_PACKAGE_ANALISYS
Private Const HEADER_MAGIC = -1641380927
' Package Flags
Public Const PF_AllowDownload = &H1
Public Const PF_ClientOptional = &H2
Public Const PF_ServerSideOnly = &H4
Public Const PF_BrokenLinks = &H8
Public Const PF_Cooked = &H8
Public Const PF_Unsecure = &H10
Public Const PF_Encrypted = &H20
Public Const PF_Need = &H8000
Public Const PF_Map = &H20000
Public Const PF_Script = &H200000
Public Const PF_Debug = &H400000
Public Const PF_Imports = &H800000
Public Const PF_Compressed = &H2000000
Public Const PF_FullyCompressed = &H4000000
Public Const PF_NoExportsData = &H20000000
Public Const PF_Stripped = &H40000000
Public Const PF_Protected = &H80000000
' Package Flags Compressed
Public Const PF_Compressed_ZLIB = &H1
Public Const PF_Compressed_LZO = &H2
Public Const PF_Compressed_LZX = &H4
' Object Flags High
Public Const OF_H_Obsolete = &H20
Public Const OF_H_Final = &H80
Public Const OF_H_PerObjectLocalized = &H100
Public Const OF_H_PropertiesObject = &H200
Public Const OF_H_ArchetypeObject = &H400
Public Const OF_H_RemappedName = &H800
' Object Flags Low
Public Const OF_L_Transactional = &H1
Public Const OF_L_Public = &H4
Public Const OF_L_PropertiesObject = &H200
Public Const OF_L_LoadForClient = &H10000
Public Const OF_L_LoadForServer = &H20000
Public Const OF_L_LoadForEdit = &H40000
Public Const OF_L_Standalone = &H80000
Public Const OF_L_NotForClient = &H100000
Public Const OF_L_NotForServer = &H200000
Public Const OF_L_NotForEditg = &H400000
Public Const OF_L_HasStack = &H2000000
Public Const OF_L_Native = &H4000000
Public Const OF_L_Marked = &H8000000
' Export Flag
Public Const EF_ForcedExport = &H1
' Function Flags
Public Const FF_Final = &H1
Public Const FF_Defined = &H2
Public Const FF_Iterator = &H4
Public Const FF_PreOperator = &H10
Public Const FF_Net = &H40
Public Const FF_NetReliable = &H80
Public Const FF_Exec = &H200
Public Const FF_Native = &H400
Public Const FF_Event = &H800
Public Const FF_Operator = &H1000
Public Const FF_Static = &H2000
Public Const FF_NoExport = &H4000
Public Const FF_OptionalParameters = &H4000
Public Const FF_Const = &H8000
Public Const FF_Invariant = &H10000
Public Const FF_Public = &H20000
Public Const FF_Private = &H40000
Public Const FF_Protected = &H80000
Public Const FF_Delegate = &H100000
Public Const FF_NetServer = &H200000
Public Const FF_NetClient = &H1000000
Public Const FF_DLLImport = &H2000000
' Class Flags
Public Const CF_Abstract = &H1
Public Const CF_Compiled = &H2
Public Const CF_Config = &H4
Public Const CF_Transient = &H8
Public Const CF_Parsed = &H10
Public Const CF_Localized = &H20
Public Const CF_SafeReplace = &H40
Public Const CF_RuntimeStatic = &H80
Public Const CF_NoExport = &H100
Public Const CF_Placeable = &H200
Public Const CF_PerObjectConfig = &H400
Public Const CF_NativeReplication = &H800
Public Const CF_EditInlineNew = &H1000
Public Const CF_CollapseCategories = &H2000
Public Const CF_ExportStructs = &H4000
Public Const CF_Instanced = &H200000
Public Const CF_HideDropDown = &H400000
Public Const CF_HasComponents = &H400000
Public Const CF_CacheExempt = &H800000
Public Const CF_Hidden = &H800000
Public Const CF_ParseConfig = &H1000000
Public Const CF_Deprecated = &H1000000
Public Const CF_HideDropDown2 = &H2000000
Public Const CF_Exported = &H4000000
Public Const CF_NativeOnly = &H20000000
' Struct Flags
Public Const SF_Native = &H1
Public Const SF_Export = &H2
Public Const SF_Long = &H4
Public Const SF_HasComponents = &H4
Public Const SF_Init = &H8
Public Const SF_Transient = &H8
Public Const SF_Atomic = &H10
Public Const SF_Immutable = &H20
Public Const SF_StrictConfig = &H40
Public Const SF_ImmutableWhenCooked = &H80
Public Const SF_AtomicWhenCooked = &H100
' Property Flags Low
Public Const PF_L_Editable = &H1
Public Const PF_L_Const = &H2
Public Const PF_L_Input = &H4
Public Const PF_L_ExportObject = &H8
Public Const PF_L_OptionalParm = &H10
Public Const PF_L_Net = &H20
Public Const PF_L_EditConstArray = &H40
Public Const PF_L_EditFixedSize = &H40
Public Const PF_L_Parm = &H80
Public Const PF_L_OutParm = &H100
Public Const PF_L_SkipParm = &H200
Public Const PF_L_ReturnParm = &H400
Public Const PF_L_CoerceParm = &H800
Public Const PF_L_Native = &H1000
Public Const PF_L_Transient = &H2000
Public Const PF_L_Config = &H4000
Public Const PF_L_Localized = &H8000
Public Const PF_L_Travel = &H10000
Public Const PF_L_EditConst = &H20000
Public Const PF_L_GlobalConfig = &H40000
Public Const PF_L_Component = &H80000
Public Const PF_L_OnDemand = &H100000
Public Const PF_L_Init = &H100000
Public Const PF_L_New = &H200000
Public Const PF_L_DuplicateTransient = &H200000
Public Const PF_L_NeedCtorLink = &H400000
Public Const PF_L_NoExport = &H800000
Public Const PF_L_Cache = &H1000000
Public Const PF_L_NoImport = &H1000000
Public Const PF_L_EditorData = &H2000000
Public Const PF_L_NoClear = &H2000000
Public Const PF_L_EditInline = &H4000000
Public Const PF_L_EdFindable = &H8000000
Public Const PF_L_EditInlineUse = &H10000000
Public Const PF_L_Deprecated = &H20000000
Public Const PF_L_EditInlineNotify = &H40000000
Public Const PF_L_DataBinding = &H40000000
Public Const PF_L_SerializeText = &H80000000
Public Const PF_L_Automated = &H80000000
' Property Flags High
Public Const PF_H_RepNotify = &H1
Public Const PF_H_Interp = &H2
Public Const PF_H_NonTransactional = &H4
Public Const PF_H_EditorOnly = &H8
Public Const PF_H_NotForConsole = &H10
Public Const PF_H_RepRetry = &H20
Public Const PF_H_PrivateWrite = &H40
Public Const PF_H_ProtectedWrite = &H80
Public Const PF_H_Archetype = &H100
Public Const PF_H_EditHide = &H200
Public Const PF_H_EditTextBox = &H400
Public Const PF_H_CrossLevelPassive = &H1000
Public Const PF_H_CrossLevelActive = &H2000
' State Flags
Public Const SF_Editable = &H1
Public Const SF_Auto = &H2
Public Const SF_Simulated = &H4
' UE3 Token
Public Const EX_LocalVariable = &H0
Public Const EX_InstanceVariable = &H1
Public Const EX_DefaultVariable = &H2
Public Const EX_Return = &H4
Public Const EX_Switch = &H5
Public Const EX_Jump = &H6
Public Const EX_JumpIfNot = &H7
Public Const EX_Stop = &H8
Public Const EX_Assert = &H9
Public Const EX_Case = &HA
Public Const EX_Nothing = &HB
Public Const EX_LabelTable = &HC
Public Const EX_GotoLabel = &HD
Public Const EX_EatReturnValue = &HE
Public Const EX_Let = &HF
Public Const EX_DynArrayElement = &H10
Public Const EX_New = &H11
Public Const EX_ClassContext = &H12
Public Const EX_Metacast = &H13
Public Const EX_LetBool = &H14
Public Const EX_EndParmValue = &H15
Public Const EX_EndFunctionParms = &H16
Public Const EX_Self = &H17
Public Const EX_Skip = &H18
Public Const EX_Context = &H19
Public Const EX_ArrayElement = &H1A
Public Const EX_VirtualFunction = &H1B
Public Const EX_FinalFunction = &H1C
Public Const EX_IntConst = &H1D
Public Const EX_FloatConst = &H1E
Public Const EX_StringConst = &H1F
Public Const EX_ObjectConst = &H20
Public Const EX_NameConst = &H21
Public Const EX_RotationConst = &H22
Public Const EX_VectorConst = &H23
Public Const EX_ByteConst = &H24
Public Const EX_IntZero = &H25
Public Const EX_IntOne = &H26
Public Const EX_True = &H27
Public Const EX_False = &H28
Public Const EX_NativeParm = &H29
Public Const EX_NoObject = &H2A
Public Const EX_IntConstByte = &H2C
Public Const EX_BoolVariable = &H2D
Public Const EX_DynamicCast = &H2E
Public Const EX_Iterator = &H2F
Public Const EX_IteratorPop = &H30
Public Const EX_IteratorNext = &H31
Public Const EX_StructCmpEq = &H32
Public Const EX_StructCmpNe = &H33
Public Const EX_UnicodeStringConst = &H34
Public Const EX_StructMember = &H35
Public Const EX_DynArrayLength = &H36
Public Const EX_GlobalFunction = &H37
Public Const EX_PrimitiveCast = &H38
Public Const EX_DynArrayInsert = &H39
Public Const EX_ReturnNothing = &H3A
Public Const EX_EqualEqual_DelDel = &H3B
Public Const EX_NotEqual_DelDel = &H3C
Public Const EX_EqualEqual_DelFunc = &H3D
Public Const EX_NotEqual_DelFunc = &H3E
Public Const EX_EmptyDelegate = &H3F
Public Const EX_DynArrayRemove = &H40
Public Const EX_DebugInfo = &H41
Public Const EX_DelegateFunction = &H42
Public Const EX_DelegateProperty = &H43
Public Const EX_LetDelegate = &H44
Public Const EX_Conditional = &H45
Public Const EX_DynArrayFind = &H46
Public Const EX_DynArrayFindStruct = &H47
Public Const EX_LocalOutVariable = &H48
Public Const EX_DefaultParmValue = &H49
Public Const EX_EmptyParmValue = &H4A
Public Const EX_InstanceDelegate = &H4B
Public Const EX_GoW_DefaultValue = &H50
Public Const EX_InterfaceContext = &H51
Public Const EX_InterfaceCast = &H52
Public Const EX_EndOfScript = &H53
Public Const EX_DynArrayAdd = &H54
Public Const EX_DynArrayAddItem = &H55
Public Const EX_DynArrayRemoveItem = &H56
Public Const EX_DynArrayInsertItem = &H57
Public Const EX_DynArrayIterator = &H58
Public Const EX_ExtendedNative = &H60
Public Const EX_FirstNative = &H70
Private Const UNKNOWN_VAR_LENGHT = 12
Private Const GUID_VAR_LENGHT = 16
Private Const UNKNOWN_OBJECT_STACK_LENGHT = 22
Private Const UNKNOWN_ENGINE_VERSION_LENGHT = 28
Structure UE3_TABLES_NAMES
Dim szName As String
Dim dwFlag As UE3_OBJECTFLAGS
End Structure
Structure UE3_NAMEINDEX
Dim dwIndex As Int32
Dim dwNumber As Int32
End Structure
Structure UE3_NETOBJECTS
Dim dwNetObject As Int32
End Structure
Structure UE3_OBJECTFLAGS
Dim dwHighFlag As Int32
Dim dwLowFlag As Int32
End Structure
Structure UE3_TABLES_EXPORTS
Dim dwClassObject As Int32
Dim dwSuperObject As Int32
Dim dwOuterObject As Int32
Dim pObjectName As UE3_NAMEINDEX
Dim dwArchetypeObject As Int32
Dim pObjectFlags As UE3_OBJECTFLAGS
Dim dwSerialSize As Int32
Dim dwSerialOffset As Int32
Dim dwExportFlags As Int32
Dim dwNetObjectsCount As Int32
Dim dwPackageGUID() As Byte
Dim dwUnknown000 As Int32
Dim pNetObjects() As UE3_NETOBJECTS
End Structure
Structure UE3_TABLES_IMPORTS
Dim pPackageName As UE3_NAMEINDEX
Dim pClassName As UE3_NAMEINDEX
Dim dwOuterObject As Int32
Dim pObjectName As UE3_NAMEINDEX
End Structure
Structure UE3_TABLE_FUNCTIONS
Dim dwExportIndex As Int32
Dim dwNextObjectIndex As Int32
Dim pUObjectDefaultProperties() As UE3_TABLE_UDEFAULTPROPERTIES
Dim dwNextField As Int32
Dim dwParentField As Int32
Dim dwScriptText As Int32
Dim dwChildren As Int32
Dim dwCppText As Int32
Dim dwLine As Int32
Dim dwTextPos As Int32
Dim dwByteScriptSize As Int32
Dim dwDataScriptSize As Int32
Dim dwByteScript() As Byte
Dim dwByteScriptStartPosition As Int32
Dim dwByteScriptEndPosition As Int32
Dim dwNativeTokenIndex As Int16
Dim dwOperPrecedence As Byte
Dim dwFunctionFlags As Int32
Dim dwRepOffset As Int16
Dim pFriendlyName As UE3_NAMEINDEX
End Structure
Structure UE3_TABLE_CONSTS
Dim dwExportIndex As Int32
Dim dwNextObjectIndex As Int32
Dim pUObjectDefaultProperties() As UE3_TABLE_UDEFAULTPROPERTIES
Dim dwParentField As Int32
Dim dwNextField As Int32
Dim dwConstLenght As Int32
Dim szValue As String
End Structure
Structure UE3_TABLE_ENUMS
Dim dwExportIndex As Int32
Dim dwNextObjectIndex As Int32
Dim pUObjectDefaultProperties() As UE3_TABLE_UDEFAULTPROPERTIES
Dim dwParentField As Int32
Dim dwNextField As Int32
Dim dwEnumLenght As Int32
Dim pEnumValue() As UE3_NAMEINDEX
End Structure
Structure UE3_TMAP
Dim pTK As UE3_NAMEINDEX
Dim PTI As Int32
End Structure
Structure UE3_TMAP_2
Dim pTK As Int32
Dim PTI As Int32
End Structure
Structure UE3_TABLE_CLASSES
Dim dwExportIndex As Int32
Dim dwNextObjectIndex As Int32
Dim dwNextField As Int32
Dim dwParentField As Int32
Dim dwScriptText As Int32
Dim dwChildren As Int32
Dim dwCppText As Int32
Dim dwLine As Int32
Dim dwTextPos As Int32
Dim dwByteScriptSize As Int32
Dim dwDataScriptSize As Int32
Dim dwByteScript() As Byte
Dim dwProbeMask As Int32
Dim dwLabelTableOffset As Int16
Dim dwStateFlags As Int32
Dim dwStateMapSize As Int32
Dim pStateMap() As UE3_TMAP
Dim dwClassFlags As Int32
End Structure
Structure UE3_TABLE_UDEFAULTPROPERTIES
Dim pNameIdx As UE3_NAMEINDEX
Dim pTypeIdx As UE3_NAMEINDEX
Dim dwPropertySize As Int32
Dim dwArrayIdx As Int32
Dim dwBoolValue As Byte
Dim pInnerNameIdx As UE3_NAMEINDEX
Dim pInnerValue() As Byte
End Structure
Structure UE3_TABLE_SCRIPTSTRUCTS
Dim dwExportIndex As Int32
Dim dwNextObjectIndex As Int32
Dim pUObjectDefaultProperties() As UE3_TABLE_UDEFAULTPROPERTIES
Dim dwNextField As Int32
Dim dwParentField As Int32
Dim dwScriptText As Int32
Dim dwChildren As Int32
Dim dwCppText As Int32
Dim dwLine As Int32
Dim dwTextPos As Int32
Dim dwByteScriptSize As Int32
Dim dwDataScriptSize As Int32
Dim dwByteScript() As Byte
Dim dwStructFlag As Int32
Dim pUDefaultProperties() As UE3_TABLE_UDEFAULTPROPERTIES
End Structure
Structure UE3_TABLE_PROPERTIES
Dim dwExportIndex As Int32
Dim dwNextObjectIndex As Int32
Dim pUObjectDefaultProperties() As UE3_TABLE_UDEFAULTPROPERTIES
Dim dwParentField As Int32
Dim dwNextField As Int32
Dim dwArrayDim As Int16
Dim dwElementSize As Int16
Dim pFlag As UE3_OBJECTFLAGS
Dim pCategoryIndex As UE3_NAMEINDEX
Dim dwArrayEnumRef As Int32
Dim dwRepOffset As Int16
End Structure
Structure UE3_TABLE_STATES
Dim dwExportIndex As Int32
Dim dwNextObjectIndex As Int32
Dim pUObjectDefaultProperties() As UE3_TABLE_UDEFAULTPROPERTIES
Dim dwNextField As Int32
Dim dwParentField As Int32
Dim dwScriptText As Int32
Dim dwChildren As Int32
Dim dwCppText As Int32
Dim dwLine As Int32
Dim dwTextPos As Int32
Dim dwByteScriptSize As Int32
Dim dwDataScriptSize As Int32
Dim dwByteScript() As Byte
Dim dwProbeMask As Int32
Dim dwLabelTableOffset As Int16
Dim dwStateFlags As Int32
Dim dwStateMapSize As Int32
Dim pStateMap() As UE3_TMAP
End Structure
Private Structure FGenerationInfo
Dim dwExportCount As Int32
Dim dwNameCount As Int32
Dim dwNetObjectCount As Int32
End Structure
Private Structure FCompressedChunk
Dim dwUncompressedOffset As Int32
Dim dwUncompressedSize As Int32
Dim dwCompressedOffset As Int32
Dim dwCompressedSize As Int32
End Structure
Private Structure FCompressdChunkHeaderBlock
Dim dwCompressedSize As Int32
Dim dwUncompressedSize As Int32
End Structure
Private Structure FCompressedChunkHeader
Dim dwSignature As Int32
Dim dwBlockSize As Int32
Dim dwCompressedSize As Int32
Dim dwUncompressedSize As Int32
Dim pFCompressdChunkHeaderBlock() As FCompressdChunkHeaderBlock
End Structure
Private Structure UE3_HEADER_PACKAGE_FORMAT
Dim dwSignature As Int32
Dim dwPackageVersion As Int16
Dim dwLicenseeVersion As Int16
Dim dwHeaderSize As Int32 ' PackageVersion >= 249
Dim dwFolderNameLenght As Int32
Dim szFolderName() As Byte ' PackageVersion >= 269
Dim dwPackageFlag As Int32
Dim dwNameCount As Int32
Dim dwNameOffset As Int32
Dim dwExportCount As Int32
Dim dwExportOffset As Int32
Dim dwImportCount As Int32
Dim dwImportOffsert As Int32
Dim dwDependsOffset As Int32 ' PackageVersion >= 415
Dim dwSerialOffset As Int32
Dim dwUnknownVar() As Byte ' PackageVersion >= 584
Dim dwGUID() As Byte ' PackageVersion >= 68
Dim dwFGenerationInfoCount As Int32
Dim pFGenerationInfo() As FGenerationInfo ' PackageVersion >= 68
Dim dwEngineVersion As Int32 ' PackageVersion >= 245
Dim dwCookerVersion As Int32 ' PackageVersion >= 277
Dim dwCompressionFlag As Int32 ' PackageVersion >= 334
Dim dwFCompressedChunkCount As Int32
Dim pFCompressedChunk() As FCompressedChunk
Dim dwEndOfSection As Int32
Dim dwGapBytes() As Byte
Dim szGameName As String
Dim bFullCompressed As Boolean
End Structure
Private szErrorMessage As String
Private pUE3Header As UE3_HEADER_PACKAGE_FORMAT
Private pFCompressedChunkHeader As FCompressedChunkHeader
Public pUE3TablesNames() As UE3_TABLES_NAMES
Public pUE3TablesExports() As UE3_TABLES_EXPORTS
Public pUE3TablesImports() As UE3_TABLES_IMPORTS
Public pUE3TablesFunctions() As UE3_TABLE_FUNCTIONS
Public pUE3TablesConsts() As UE3_TABLE_CONSTS
Public pUE3TablesEnums() As UE3_TABLE_ENUMS
Public pUE3TablesClass() As UE3_TABLE_CLASSES
Public pUE3TablesScriptStruct() As UE3_TABLE_SCRIPTSTRUCTS
Public pUE3TablesProperties() As UE3_TABLE_PROPERTIES
Public pUE3TablesStates() As UE3_TABLE_STATES
Function DeserializePackage(ByVal szPackageName As String, ByVal szNewPackageName As String) As Integer
Dim dwResult As Integer
szErrorMessage = ""
dwResult = ReadPackageHeader(szPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox("Percorso " + szPackageName + " non valido !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
Case -2
MsgBox("Signature del file non valida !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
Case -3
MsgBox("Compressione file non supportata !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
Case -4
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
End Select
Return -1
End If
If pUE3Header.bFullCompressed Then
dwResult = DecompressFullCompression(szPackageName, szNewPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox("Signature del file non valida !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
Case -2
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
End Select
Return -1
End If
szPackageName = szNewPackageName
dwResult = ReadPackageHeader(szPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox("Percorso " + szPackageName + " non valido !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
Case -2
MsgBox("Signature del file non valida !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
Case -3
MsgBox("Compressione file non supportata !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
Case -4
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageHeader()")
End Select
Return -1
End If
End If
If pUE3Header.dwCompressionFlag <> 0 Then
dwResult = WritePackageHeader(szNewPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "WritePackageHeader()")
End Select
Return -1
End If
dwResult = ReadPackageChunkHeader(szPackageName, szNewPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox("Non ci sono Chunk compressi !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageChunkHeader()")
Case -2
MsgBox("Signature Chunk non valida !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageChunkHeader()")
Case -3
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadPackageChunkHeader()")
End Select
Return -1
End If
Else
szNewPackageName = szPackageName
End If
dwResult = ReadTableNames(szNewPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox("dwNameCount = 0 !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableNames()")
Case -2
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableNames()")
End Select
Return -1
End If
dwResult = ReadTableExports(szNewPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox("dwExportCount = 0 !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableExports()")
Case -2
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableExports()")
End Select
Return -1
End If
dwResult = ReadTableImports(szNewPackageName)
If dwResult <> 0 Then
Select Case dwResult
Case -1
MsgBox("dwImportCount = 0 !", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableImports()")
Case -2
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableImports()")
End Select
Return -1
End If
dwResult = ReadTableFunctions(szNewPackageName)
If dwResult <> 0 Then
If dwResult = -3 Then
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableFunctions()")
Return -1
End If
End If
dwResult = ReadTableConsts(szNewPackageName)
If dwResult <> 0 Then
If dwResult = -3 Then
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableConsts()")
Return -1
End If
End If
dwResult = ReadTableEnums(szNewPackageName)
If dwResult <> 0 Then
If dwResult = -3 Then
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableEnums()")
Return -1
End If
End If
dwResult = ReadTableClasses(szNewPackageName)
If dwResult <> 0 Then
If dwResult = -3 Then
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableClasses()")
Return -1
End If
End If
dwResult = ReadTableScriptStruct(szNewPackageName)
If dwResult <> 0 Then
If dwResult = -3 Then
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableScriptStruct()")
Return -1
End If
End If
dwResult = ReadTableProperties(szNewPackageName)
If dwResult <> 0 Then
If dwResult = -3 Then
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableProperties()")
Return -1
End If
End If
dwResult = ReadTableStates(szNewPackageName)
If dwResult <> 0 Then
If dwResult = -3 Then
MsgBox(szErrorMessage, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ReadTableStates()")
Return -1
End If
End If
Return 0
End Function
Function GetGameName() As Boolean
If pUE3Header.dwPackageVersion = 421 Then
pUE3Header.szGameName = "Medal of Honor Airborne"
ElseIf pUE3Header.dwPackageVersion = 433 Then
pUE3Header.szGameName = "Frontlines Fuel of War"
ElseIf pUE3Header.dwPackageVersion = 512 Then
pUE3Header.szGameName = "Unreal Tournament 3"
ElseIf pUE3Header.dwPackageVersion = 576 Then
If pUE3Header.dwEngineVersion = 4601 Then
pUE3Header.szGameName = "Homefront"
ElseIf pUE3Header.dwEngineVersion = 4701 Then
pUE3Header.szGameName = "CrimeCraft GangWars"
End If
ElseIf pUE3Header.dwPackageVersion = 742 Then
pUE3Header.szGameName = "Bulletstorm"
ElseIf pUE3Header.dwPackageVersion = 765 Then
pUE3Header.szGameName = "Rising Storm Red Orchestra 2"
ElseIf pUE3Header.dwPackageVersion = 859 Then
If pUE3Header.dwEngineVersion = 9641 Then
pUE3Header.szGameName = "Ravaged Zombie Apocalypse"
ElseIf pUE3Header.dwEngineVersion = 9641 Then
pUE3Header.szGameName = "America's Army: Proving Grounds"
End If
ElseIf pUE3Header.dwPackageVersion = 860 Then
pUE3Header.szGameName = "Outlast"
End If
End Function
Function ReadPackageHeader(ByVal szFilePath As String) As Integer
Try
Dim dwIndex As Integer
If Dir(szFilePath, FileAttribute.Normal) = "" Then
Return -1
End If
Dim pCurrStream As System.IO.Stream = New System.IO.FileStream(szFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim pCurrBinaryStream As New System.IO.BinaryReader(pCurrStream, System.Text.Encoding.ASCII)
pUE3Header.dwSignature = pCurrBinaryStream.ReadInt32()
If pUE3Header.dwSignature <> HEADER_MAGIC Then
pCurrBinaryStream.Close()
pCurrStream.Close()
Return -2
End If
pUE3Header.dwPackageVersion = pCurrBinaryStream.ReadInt16()
pUE3Header.dwLicenseeVersion = pCurrBinaryStream.ReadInt16()
If pUE3Header.dwPackageVersion = 0 Then
pUE3Header.bFullCompressed = True
pCurrBinaryStream.Close()
pCurrStream.Close()
Return 0
End If
If pUE3Header.dwPackageVersion >= 249 Then
pUE3Header.dwHeaderSize = pCurrBinaryStream.ReadInt32()
End If
If pUE3Header.dwPackageVersion >= 269 Then
pUE3Header.dwFolderNameLenght = pCurrBinaryStream.ReadInt32()
pUE3Header.szFolderName = pCurrBinaryStream.ReadBytes(pUE3Header.dwFolderNameLenght)
End If
pUE3Header.dwPackageFlag = pCurrBinaryStream.ReadInt32()
pUE3Header.dwNameCount = pCurrBinaryStream.ReadInt32()
pUE3Header.dwNameOffset = pCurrBinaryStream.ReadInt32()
pUE3Header.dwExportCount = pCurrBinaryStream.ReadInt32()
pUE3Header.dwExportOffset = pCurrBinaryStream.ReadInt32()
pUE3Header.dwImportCount = pCurrBinaryStream.ReadInt32()
pUE3Header.dwImportOffsert = pCurrBinaryStream.ReadInt32()
If pUE3Header.dwPackageVersion >= 415 Then
pUE3Header.dwDependsOffset = pCurrBinaryStream.ReadInt32()
End If
If pUE3Header.dwPackageVersion >= 584 Then
pUE3Header.dwSerialOffset = pCurrBinaryStream.ReadInt32()
pUE3Header.dwUnknownVar = pCurrBinaryStream.ReadBytes(UNKNOWN_VAR_LENGHT)
End If
If pUE3Header.dwPackageVersion >= 68 Then
pUE3Header.dwGUID = pCurrBinaryStream.ReadBytes(GUID_VAR_LENGHT)
End If
If pUE3Header.dwPackageVersion >= 68 Then
pUE3Header.dwFGenerationInfoCount = pCurrBinaryStream.ReadInt32()
ReDim pUE3Header.pFGenerationInfo(pUE3Header.dwFGenerationInfoCount - 1)
For dwIndex = 0 To pUE3Header.dwFGenerationInfoCount - 1
pUE3Header.pFGenerationInfo(dwIndex).dwExportCount = pCurrBinaryStream.ReadInt32()
pUE3Header.pFGenerationInfo(dwIndex).dwNameCount = pCurrBinaryStream.ReadInt32()
pUE3Header.pFGenerationInfo(dwIndex).dwNetObjectCount = pCurrBinaryStream.ReadInt32()
Next dwIndex
End If
If pUE3Header.dwPackageVersion >= 245 Then
pUE3Header.dwEngineVersion = pCurrBinaryStream.ReadInt32()
End If
GetGameName()
If pUE3Header.dwPackageVersion >= 277 Then
pUE3Header.dwCookerVersion = pCurrBinaryStream.ReadInt32()
End If
If pUE3Header.dwEngineVersion = 3240 Then
pCurrBinaryStream.ReadBytes(UNKNOWN_ENGINE_VERSION_LENGHT)
End If
If pUE3Header.dwPackageVersion >= 334 Then
pUE3Header.dwCompressionFlag = pCurrBinaryStream.ReadInt32()
If pUE3Header.dwCompressionFlag <> 0 And pUE3Header.dwCompressionFlag <> PF_Compressed_LZO Then
pCurrBinaryStream.Close()
pCurrStream.Close()
Return -3
End If
End If
If pUE3Header.dwCompressionFlag <> 0 Then
If pUE3Header.dwPackageVersion >= 334 Then
pUE3Header.dwFCompressedChunkCount = pCurrBinaryStream.ReadInt32()
ReDim pUE3Header.pFCompressedChunk(pUE3Header.dwFCompressedChunkCount - 1)
For dwIndex = 0 To pUE3Header.dwFCompressedChunkCount - 1
pUE3Header.pFCompressedChunk(dwIndex).dwUncompressedOffset = pCurrBinaryStream.ReadInt32()
pUE3Header.pFCompressedChunk(dwIndex).dwUncompressedSize = pCurrBinaryStream.ReadInt32()
pUE3Header.pFCompressedChunk(dwIndex).dwCompressedOffset = pCurrBinaryStream.ReadInt32()
pUE3Header.pFCompressedChunk(dwIndex).dwCompressedSize = pCurrBinaryStream.ReadInt32()
Next dwIndex
End If
End If
If pUE3Header.dwPackageVersion = 742 Then
pCurrBinaryStream.ReadInt32()
End If
pUE3Header.dwEndOfSection = pCurrBinaryStream.BaseStream.Position
If pUE3Header.dwFCompressedChunkCount > 0 Then
ReDim pUE3Header.dwGapBytes(pUE3Header.pFCompressedChunk(0).dwCompressedOffset - pUE3Header.dwEndOfSection)
pUE3Header.dwGapBytes = pCurrBinaryStream.ReadBytes(pUE3Header.pFCompressedChunk(0).dwCompressedOffset - pUE3Header.dwEndOfSection)
End If
pCurrBinaryStream.Close()
pCurrStream.Close()
Return 0
Catch ex As Exception
szErrorMessage = ex.Message
Return -4
End Try
End Function
Function WritePackageHeader(ByVal szFilePath As String) As Integer
Try
Dim pCurrStream As System.IO.Stream = New System.IO.FileStream(szFilePath, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite)
Dim pCurrBinaryStream As New System.IO.BinaryWriter(pCurrStream, System.Text.Encoding.ASCII)
pCurrBinaryStream.Write(pUE3Header.dwSignature)
pCurrBinaryStream.Write(pUE3Header.dwPackageVersion)
pCurrBinaryStream.Write(pUE3Header.dwLicenseeVersion)
If pUE3Header.dwPackageVersion >= 249 Then
pCurrBinaryStream.Write(pUE3Header.dwHeaderSize)
End If
If pUE3Header.dwPackageVersion >= 269 Then
pCurrBinaryStream.Write(pUE3Header.dwFolderNameLenght)
pCurrBinaryStream.Write(pUE3Header.szFolderName)
End If
If pUE3Header.dwPackageFlag And PF_Compressed Then
pCurrBinaryStream.Write(pUE3Header.dwPackageFlag - PF_Compressed)
Else
pCurrBinaryStream.Write(pUE3Header.dwPackageFlag)
End If
pCurrBinaryStream.Write(pUE3Header.dwNameCount)
pCurrBinaryStream.Write(pUE3Header.dwNameOffset)
pCurrBinaryStream.Write(pUE3Header.dwExportCount)
pCurrBinaryStream.Write(pUE3Header.dwExportOffset)
pCurrBinaryStream.Write(pUE3Header.dwImportCount)
pCurrBinaryStream.Write(pUE3Header.dwImportOffsert)
If pUE3Header.dwPackageVersion >= 415 Then
pCurrBinaryStream.Write(pUE3Header.dwDependsOffset)
End If
If pUE3Header.dwPackageVersion >= 584 Then
pCurrBinaryStream.Write(pUE3Header.dwSerialOffset)
pCurrBinaryStream.Write(pUE3Header.dwUnknownVar)
End If
If pUE3Header.dwPackageVersion >= 68 Then
pCurrBinaryStream.Write(pUE3Header.dwGUID)
End If
If pUE3Header.dwPackageVersion >= 68 Then
pCurrBinaryStream.Write(pUE3Header.dwFGenerationInfoCount)
For dwIndex = 0 To pUE3Header.dwFGenerationInfoCount - 1
pCurrBinaryStream.Write(pUE3Header.pFGenerationInfo(dwIndex).dwExportCount)
pCurrBinaryStream.Write(pUE3Header.pFGenerationInfo(dwIndex).dwNameCount)
pCurrBinaryStream.Write(pUE3Header.pFGenerationInfo(dwIndex).dwNetObjectCount)
Next dwIndex
End If
If pUE3Header.dwPackageVersion >= 245 Then
pCurrBinaryStream.Write(pUE3Header.dwEngineVersion)
End If
If pUE3Header.dwEngineVersion = 3240 Then
pCurrBinaryStream.Write(UNKNOWN_ENGINE_VERSION_LENGHT)
End If
If pUE3Header.dwPackageVersion >= 277 Then
pCurrBinaryStream.Write(pUE3Header.dwCookerVersion)
End If
If pUE3Header.dwPackageVersion >= 334 Then
If pUE3Header.dwCompressionFlag = 0 Then
pCurrBinaryStream.Write(0)
Else
pCurrBinaryStream.Write(pUE3Header.dwCompressionFlag Mod PF_Compressed_LZO)
End If
End If
pCurrBinaryStream.Write(0)
If Not pUE3Header.dwGapBytes Is Nothing Then
pCurrBinaryStream.Write(pUE3Header.dwGapBytes)
End If
pCurrBinaryStream.Close()
pCurrStream.Close()
Return 0
Catch ex As Exception
szErrorMessage = ex.Message
Return -1
End Try
End Function
Function ReadPackageChunkHeader(ByVal szFilePath As String, ByVal szNewFilePath As String) As Integer
Try
Dim dwIndex As Integer
Dim dwIndexBlock As Integer
Dim dwBlockCount As Integer
Dim dwBlockStart As Integer
Dim pCompressedData() As Byte
Dim pUnCompressedData() As Byte
If pUE3Header.pFCompressedChunk.Length = 0 Then
Return -1
End If
Dim pCurrStream As System.IO.Stream = New System.IO.FileStream(szFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim pCurrBinaryStream As New System.IO.BinaryReader(pCurrStream, System.Text.Encoding.ASCII)
For dwIndex = 0 To pUE3Header.pFCompressedChunk.Length - 1
pCurrBinaryStream.BaseStream.Position = pUE3Header.pFCompressedChunk(dwIndex).dwCompressedOffset
pFCompressedChunkHeader.dwSignature = pCurrBinaryStream.ReadInt32()
If pFCompressedChunkHeader.dwSignature <> HEADER_MAGIC Then
pCurrBinaryStream.Close()
pCurrStream.Close()
Return -2
End If
pFCompressedChunkHeader.dwBlockSize = pCurrBinaryStream.ReadInt32()
pFCompressedChunkHeader.dwCompressedSize = pCurrBinaryStream.ReadInt32()
pFCompressedChunkHeader.dwUncompressedSize = pCurrBinaryStream.ReadInt32()
If pFCompressedChunkHeader.dwUncompressedSize Mod pFCompressedChunkHeader.dwBlockSize = 0 Then
dwBlockCount = Fix(pFCompressedChunkHeader.dwUncompressedSize / pFCompressedChunkHeader.dwBlockSize)
Else