Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Import/Export Tool by swuforce #20

Open
ner00 opened this issue Dec 30, 2024 · 3 comments
Open

Import/Export Tool by swuforce #20

ner00 opened this issue Dec 30, 2024 · 3 comments

Comments

@ner00
Copy link
Contributor

ner00 commented Dec 30, 2024

  1. Download and install AutoIt.
  2. Copy the file Binary.au3 to your Autoit3\Include folder.
  3. Build the scripts to exe.
@ner00
Copy link
Contributor Author

ner00 commented Dec 30, 2024

Include\Binary.au3

; =============================================================================
;  AutoIt Binary UDF (2011.9.15)
;  Purpose: Functions About Binary Type Variable Management
;  Author: Ward
; =============================================================================

; =============================================================================
;  Functions List
;   _BinaryPeek($Binary, $Start, $Type = "byte")
;   _BinaryPoke($Binary, $Start, $Value, $Type = "byte")
;   _BinaryAnd($Binary1, $Binary2)
;   _BinaryOR($Binary1, $Binary2)
;   _BinaryXOR($Binary1, $Binary2)
;   _BinaryNot($Binary)
;   _BinaryShift($Binary, $Shift)
;   _BinaryRotate($Binary, $Shift)
;   _BinaryReverse($Binary)
;   _BinaryInBin($Binary, $Search, $Occur = 1, $Start = 1)
;   _BinaryReplace($Binary, $Search, $Replace, $Occur = 0)
;   _BinarySplit($Binary, $Search)
;   _BinaryRandom($Length, $Start = 0, $To = 255)
;   _BinaryRight($Binary, $Count)
;   _BinaryLeft($Binary, $Count)
;   _BinaryTrimLeft($Binary, $Count)
;   _BinaryTrimRight($Binary, $Count)
;	_BinaryToInt16($Binary)
;	_BinaryFromInt16($Value)
;   _BinaryToInt32($Binary)
;   _BinaryFromInt32($Value)
;   _BinaryToInt64($Binary)
;   _BinaryFromInt64($Value)
;   _BinaryToDouble($Binary)
;   _BinaryFromDouble($Value)
;	_BinaryToMemory($Binary, $Ptr)
;	_BinaryFromMemory($Ptr, $Size)
;	_BinaryToDLLStruct($Binary)
;	_BinaryFromDLLStruct(ByRef $DLLStruct)
;	_BinaryFillDLLStruct($Binary, ByRef $DLLStruct)
;   _BitShift64($Value, $Shift)
;   _BitRotate64($Value, $Shift)
;   _BitNOT64($Value)
;   _BitOR64($Value1, $Value2, [$Value3, ...])
;   _BitAND64($Value1, $Value2, [$Value3, ...])
;   _BitXOR64($Value1, $Value2, [$Value3, ...])
;   _Hex64($Value, $Length = 16)
;   _Dec64($HexString)
; =============================================================================


#Include-once
#Include <Memory.au3>

Global $__Binary_Kernel32Dll = DllOpen("kernel32.dll")
Global $__Binary_User32Dll = DllOpen("user32.dll")
Global $__Binary_MsvcrtDll = DllOpen("msvcrt.dll")

Func __Binary_lstrlenA($Ptr)
	Local $Ret = DllCall($__Binary_Kernel32Dll, "int", "lstrlenA", "ptr", $Ptr)
	If @Error Then Return SetError(@Error, @Extended, 0)
	Return $Ret[0]
EndFunc

Func __Binary_lstrlenW($Ptr)
	Local $Ret = DllCall($__Binary_Kernel32Dll, "int", "lstrlenW", "ptr", $Ptr)
	If @Error Then Return SetError(@Error, @Extended, 0)
	Return $Ret[0]
EndFunc

Func __Binary_Realloc($Ptr, $Size)
	Local $Ret = DllCall($__Binary_MsvcrtDll, "ptr:cdecl", "realloc", "ptr", $Ptr, "ulong_ptr", $Size)
	If @Error Then Return SetError(@Error, @Extended, 0)
	If $Ret[0] = 0 Then Exit MsgBox(16, "AutoIt Binary UDF Error", "Out of memory !!")
	Return $Ret[0]
EndFunc

Func __Binary_Free($Ptr)
	DllCall($__Binary_MsvcrtDll, "ptr:cdecl", "free", "ptr", $Ptr)
	If @Error Then Return SetError(@Error, @Extended, 0)
EndFunc

Func __BinaryCodeBufferAlloc($Code)
	Local $Ptr = _MemVirtualAlloc(0, BinaryLen($Code), $MEM_COMMIT, $PAGE_EXECUTE_READWRITE)
	If $Ptr = 0 Then Exit MsgBox(16, "AutoIt Binary UDF Error", "Out of memory !!")
	Local $Buffer = DllStructCreate("byte[" & BinaryLen($Code) & "]", $Ptr)
	DllStructSetData($Buffer, 1, $Code)
	Return $Ptr
EndFunc

Func _BinaryPeek($Binary, $Start, $Type = "byte")
	$Binary = Binary($Binary)
	If $Start > BinaryLen($Binary) Or $Start = 0 Then Return SetError(1, 0, "")

	Local $Buffer = DllStructCreate("byte[" & (BinaryLen($Binary) + 8) & "]")
	DllStructSetData($Buffer, 1, $Binary)

	Local $Ptr = DllStructGetPtr($Buffer) + $Start - 1, $Len = -1
	If $Type = "str" Then
		$Len = __Binary_lstrlenA($Ptr)
		$Type = "char[" & $Len & "]"
	ElseIf $Type = "wstr" Then
		$Len = __Binary_lstrlenW($Ptr)
		$Type = "wchar[" & $Len & "]"
	EndIf
	If $Len = 0 Then Return ""

	Local $Target = DllStructCreate($Type, $Ptr)
	If DllStructGetSize($Target) = 0 Or DllStructGetSize($Target) > BinaryLen($Binary) - $Start + 1 Then Return SetError(1, 0, "")
	Return DllStructGetData($Target, 1)
EndFunc

Func _BinaryPoke($Binary, $Start, $Value, $Type = "byte")
	$Binary = Binary($Binary)
	If $Start > BinaryLen($Binary) Or $Start = 0 Then Return SetError(1, 0, "")

	Local $Buffer = DllStructCreate("byte[" & (BinaryLen($Binary)) & "]")
	DllStructSetData($Buffer, 1, $Binary)

	Local $Ptr = DllStructGetPtr($Buffer) + $Start - 1
	If $Type = "str" Then
		$Value = String($Value)
		$Type = "char[" & (StringLen($Value) + 1) & "]"
	ElseIf $Type = "wstr" Then
		$Value = String($Value)
		$Type = "wchar[" & (StringLen($Value) + 1) & "]"
	EndIf

	Local $Target = DllStructCreate($Type, $Ptr)
	If DllStructGetSize($Target) = 0 Or DllStructGetSize($Target) > BinaryLen($Binary) - $Start + 1 Then Return SetError(1, 0, "")
	DllStructSetData(DllStructCreate($Type, $Ptr), 1, $Value)
	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryAnd($Binary1, $Binary2)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x4989CA4863CA31D289C8FFC841F7F14863D2418A04104120440AFFE2E9C3")
		Else
			$Code = Binary("0x5589E556578B7D088B75108B4D0C31D289C848F775148A041620440FFFE2EF5F5E5DC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary1 = Binary($Binary1)
	$Binary2 = Binary($Binary2)

	Local $Len1 = BinaryLen($Binary1)
	Local $Buffer1 = DllStructCreate("byte[" & $Len1 & "]")
	DllStructSetData($Buffer1, 1, $Binary1)

	Local $Len2 = BinaryLen($Binary2)
	Local $Buffer2 = DllStructCreate("byte[" & $Len2 & "]")
	DllStructSetData($Buffer2, 1, $Binary2)

	If $Len1 And $Len2 Then
		DllCall($__Binary_User32Dll, "none", "CallWindowProc", "ptr", $CodeBufferPtr, _
																"ptr", DllStructGetPtr($Buffer1), _
																"uint", $Len1, _
																"ptr", DllStructGetPtr($Buffer2), _
																"uint", $Len2)
	EndIf
	Return DllStructGetData($Buffer1, 1)
EndFunc

Func _BinaryOR($Binary1, $Binary2)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x4989CA4863CA31D289C8FFC841F7F14863D2418A04104108440AFFE2E9C3")
		Else
			$Code = Binary("0x5589E556578B7D088B75108B4D0C31D289C848F775148A041608440FFFE2EF5F5E5DC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary1 = Binary($Binary1)
	$Binary2 = Binary($Binary2)

	Local $Len1 = BinaryLen($Binary1)
	Local $Buffer1 = DllStructCreate("byte[" & $Len1 & "]")
	DllStructSetData($Buffer1, 1, $Binary1)

	Local $Len2 = BinaryLen($Binary2)
	Local $Buffer2 = DllStructCreate("byte[" & $Len2 & "]")
	DllStructSetData($Buffer2, 1, $Binary2)

	If $Len1 And $Len2 Then
		DllCall($__Binary_User32Dll, "none", "CallWindowProc", "ptr", $CodeBufferPtr, _
																"ptr", DllStructGetPtr($Buffer1), _
																"uint", $Len1, _
																"ptr", DllStructGetPtr($Buffer2), _
																"uint", $Len2)
	EndIf

	Return DllStructGetData($Buffer1, 1)
EndFunc

Func _BinaryXOR($Binary1, $Binary2)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x4989CA4863CA31D289C8FFC841F7F14863D2418A04104130440AFFE2E9C3")
		Else
			$Code = Binary("0x5589E556578B7D088B75108B4D0C31D289C848F775148A041630440FFFE2EF5F5E5DC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary1 = Binary($Binary1)
	$Binary2 = Binary($Binary2)

	Local $Len1 = BinaryLen($Binary1)
	Local $Buffer1 = DllStructCreate("byte[" & $Len1 & "]")
	DllStructSetData($Buffer1, 1, $Binary1)

	Local $Len2 = BinaryLen($Binary2)
	Local $Buffer2 = DllStructCreate("byte[" & $Len2 & "]")
	DllStructSetData($Buffer2, 1, $Binary2)

	If $Len1 And $Len2 Then
		DllCall($__Binary_User32Dll, "none", "CallWindowProc", "ptr", $CodeBufferPtr, _
																"ptr", DllStructGetPtr($Buffer1), _
																"uint", $Len1, _
																"ptr", DllStructGetPtr($Buffer2), _
																"uint", $Len2)
	EndIf

	If $Len1 = 0 Then Return Binary("")
	Return DllStructGetData($Buffer1, 1)
EndFunc

Func _BinaryNot($Binary)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x4887CAF6540AFFE2FAC3")
		Else
			$Code = Binary("0x5589E58B45088B4D0CF65408FFE2FA5DC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary = Binary($Binary)

	Local $Len = BinaryLen($Binary)
	Local $Buffer = DllStructCreate("byte[" & $Len & "]")
	DllStructSetData($Buffer, 1, $Binary)

	If $Len Then
		DllCall($__Binary_User32Dll, "none", "CallWindowProc", "ptr", $CodeBufferPtr, _
																"ptr", DllStructGetPtr($Buffer), _
																"uint", $Len, _
																"int", 0, _
																"int", 0)
	EndIf

	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryShift($Binary, $Shift)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x4989CA4C63CA4983F90074434183F800743D7F1F41F7D84C89C94C89D2F8D0129F48FFC9740648FFC29EEBF241FFC875E6EB1C4C89C9498D540AFFF8D01A9F48FFC9740648FFCA9EEBF241FFC875E4C3")
		Else
			$Code = Binary("0x5589E55657538B7D088B5D0C8B751083FB00743183FE00742C7F16F7DE89D989FAF8D0129F497404429EEBF64E75EEEB1489D98D540FFFF8D01A9F4974044A9EEBF64E75EC5B5F5E5DC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary = Binary($Binary)

	Local $Len = BinaryLen($Binary)
	Local $Buffer = DllStructCreate("byte[" & $Len & "]")
	DllStructSetData($Buffer, 1, $Binary)

	If $Len Then
		DllCall($__Binary_User32Dll, "none", "CallWindowProc", "ptr", $CodeBufferPtr, _
																"ptr", DllStructGetPtr($Buffer), _
																"uint", $Len, _
																"int", $Shift, _
																"int", 0)
	EndIf

	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryRotate($Binary, $Shift)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x4989CA4C63CA4983F90074554183F800744F7F2941F7D84C89C9498D540AFF410FB602660FBAE000D01A9F48FFC9740648FFCA9EEBF241FFC875DCEB244C89C94C89D2430FB6440AFF660FBAE007D0129F48FFC9740648FFC29EEBF241FFC875DCC3")
		Else
			$Code = Binary("0x5589E55657538B7D088B5D0C8B751083FB00744183FE00743C7F1FF7DE89D98D540FFF0FB607660FBAE000D01A9F4974044A9EEBF64E75E5EB1B89D989FA0FB6441FFF660FBAE007D0129F497404429EEBF64E75E55B5F5E5DC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary = Binary($Binary)

	Local $Len = BinaryLen($Binary)
	Local $Buffer = DllStructCreate("byte[" & $Len & "]")
	DllStructSetData($Buffer, 1, $Binary)

	If $Len Then
		DllCall($__Binary_User32Dll, "none", "CallWindowProc", "ptr", $CodeBufferPtr, _
																"ptr", DllStructGetPtr($Buffer), _
																"uint", $Len, _
																"int", $Shift, _
																"int", 0)
	EndIf

	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryReverse($Binary)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x4889C84863D2488D5410FFEB128A0A32088808320A880A300848FFCA48FFC04839D072E9C3")
		Else
			$Code = Binary("0x8B4424048B5424088D5410FFEB0E8A0A32088808320A880A30084A4039D072EEC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary = Binary($Binary)

	Local $Len = BinaryLen($Binary)
	Local $Buffer = DllStructCreate("byte[" & $Len & "]")
	DllStructSetData($Buffer, 1, $Binary)

	If $Len Then
		DllCall($__Binary_User32Dll, "none", "CallWindowProc", "ptr", $CodeBufferPtr, _
																"ptr", DllStructGetPtr($Buffer), _
																"uint", $Len, _
																"int", 0, _
																"int", 0)
	EndIf

	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryInBin($Binary, $Search, $Occur = 1, $Start = 1)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x555756534883EC08448B51188B5120448B491C4C8B59108B4108488B294585D274504183F9007E5585D24989E8BB01000000741083EA0139D076374189D029D04D8D04284139C277294489D24863DBEB034901D84839D24C89C64C89DF4889D1F3A675064183E901741A83E8014139C276DF4883C40831C05B5E5F5DC375154989E8EBC04883C4084129E85B5E5F418D40015DC34189C041F7D9BBFFFFFFFF4529D04D8D0428EB9C")
		Else
			$Code = Binary("0x5589E583EC24895DF48B4D088975F8897DFC8B398B59088B51108B7104897DF08B45F0895DE88B590C8945E031C085DB8955E48B51148975EC743A837DE4007E51C745DC0100000085D27538395DEC7222FC8B75E039DB89D98B7DE8F3A67505FF4DE47455FF4DEC8B55DC0155E0395DEC73DF31C08B5DF48B75F88B7DFC89EC5DC210004A3B55EC73EB0155E02955ECEBBA7DDFF75DE48B45ECC745DCFFFFFFFF29D80145E085D274A24A31C03B55EC73C32955E02955ECEB928B4DF0294DE08B45E040EBAF")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary = Binary($Binary)
	$Search = Binary($Search)

	Local $Len1 = BinaryLen($Binary)
	Local $Buffer1 = DllStructCreate("byte[" & $Len1 & "]")
	DllStructSetData($Buffer1, 1, $Binary)

	Local $Len2 = BinaryLen($Search)
	Local $Buffer2 = DllStructCreate("byte[" & $Len2 & "]")
	DllStructSetData($Buffer2, 1, $Search)

	Local $Var = DllStructCreate("ptr bin1; uint len1; ptr bin2; uint len2;int occur; uint start")
	DllStructSetData($Var, "bin1", DllStructGetPtr($Buffer1))
	DllStructSetData($Var, "bin2", DllStructGetPtr($Buffer2))
	DllStructSetData($Var, "len1", $Len1)
	DllStructSetData($Var, "len2", $Len2)
	DllStructSetData($Var, "occur", $Occur)
	DllStructSetData($Var, "start", $Start)

	Local $Ret = DllCall($__Binary_User32Dll, "uint", "CallWindowProc", "ptr", $CodeBufferPtr, _
																		"ptr", DllStructGetPtr($Var), _
																		"int", 0, _
																		"int", 0, _
																		"int", 0)
	Return $Ret[0]
EndFunc

Func _BinaryReplace($Binary, $Search, $Replace, $Occur = 0)
	Static $ReAlloc = DllCallbackRegister("__Binary_Realloc", "ptr:cdecl", "ptr;uint")
	Static $ReAllocPtr = DllCallbackGetPtr($ReAlloc)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x41574531FF415641554154555756534883EC688B6918488B41204C898424C000000048899424B8000000448B592C448B412885ED48894424484C8B6110448B71084C8B2975144883C4684C89F85B5E5F5D415C415D415E415FC34585DBC744245C000000000F88DB0100004139E84489F276724589F24D89EFC74424400000000089EA4439D5774E4489D34C89F8EB0B83EB0139DD773F4883C0014839D24889C64C89E74889D1F3A675E54885C07426834424400144395C2440741289E94429F98D040189C14129C24901CFEBB58B74244085F674E64489C229EA0FAF542440418D54161031C9448944243844895C242841FFD1448B4424384531D24885C04989C74989C189EB448B5C24284589C04C894424400F842CFFFFFF48894424504589D74439F50F87940000004489F24C89E8EB0F83EA0139D50F87810000004883C0014839DB4889C64C89E74889D9F3A675E14885C0746889C74C89EA4C89C94429EF44895C24284C894C243089FE01EF4183C7014989F04129FEE8560100004C8B4C24304C8B442440488B542448498D34314889F1E83B010000448B5C24284C8B4C244089F84901C54539DF4E8D0C0E0F856CFFFFFF4585FF0F8463FFFFFF4589F64589FA4C89C94D89F04C89EA4C8B7C24504C894C24304489542438E8F30000004C8B4C24308B5C245C488B8C24C0000000448B542438488B8424B80000004D01F14529F985DB4489094489100F8432FEFFFF8B114C89F8498D5417FF4939D70F831FFEFFFF0FB60A32088808320A880A4883EA0130084883C0014839D072E6E900FEFFFF4489F241F7DB4C89E8498D5415FF4939D5731A0FB60A32088808320A880A4883EA0130084883C0014839D072E689EA4C89E0498D5414FF4939D4731A0FB60A32088808320A880A4883EA0130084883C0014839D072E6488B4424484489C2488D5410FF4839D0731A0FB60A32088808320A880A4883EA0130084883C0014839D072E6C744245C01000000E996FDFFFF56574889CF4889D64C89C1FCF3A45F5EC3")
		Else
			$Code = Binary("0x5557565383EC5C8B442470C744242C000000008B50188B580C8B48148B7010895424408B68088B500485DB8B00894C243C897424488954243089442434750E8B44242C83C45C5B5E5F5DC210008B742440C744244C0000000085F60F88D6010000395C243C8B4424300F8683000000894424288B442434896C242CC74424380000000089C53B5C2428775031C0EB0D8B54242883C00129C239D3773F8B7C242C8D74050039DB8974244489D9F3A675DF8B54244485D2742383442438018B4C2440394C2438740C29EA01DA01D529542428EBB28B4C243885C974EC8B44243C8B7424308B6C242C29D80FAF4424388D44061089442404C7042400000000FF54247CC74424440000000085C08944242C894424380F8426FFFFFF3B5C24300F87A40000008B4424308B4C243401C1894C2428EB0B83E80139C30F87890000008B74242889EF89D929C639DB8974241CF3A675E18B54241C85D2746D89D68B4424348B5424382B74243483442444018914248974240889442404E8320100008B7C24388B4C243C8B44244801F701DE893C24894C240889442404E8120100008B542440037C243C017424342974243039542444897C24380F855EFFFFFF8B44244485C00F8452FFFFFF8B7424308B4424348B5424388974240889442404891424E8CC0000008B4424388B4C24788B7C244C01F08B7424442B44242C85FF89018B44247489300F8436FEFFFF8B44242C8B118D5410FF39D00F8324FEFFFF0FB60A32088808320A880A83EA01300883C00139D072E9E908FEFFFF8D5410FFF75C244039D073170FB60A32088808320A880A83EA01300883C00139D072E98D541DFF89E839D573170FB60A32088808320A880A83EA01300883C00139D072E98B4424488B74243C8D5430FF39D073170FB60A32088808320A880A83EA01300883C00139D072E9C744244C01000000E9B2FDFFFF56578B7C240C8B7424108B4C241485C9742FFC83F9087227F7C7010000007402A449F7C702000000740566A583E90289CAC1E902F3A589D183E103F3A4EB02F3A45F5EC3")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	$Binary = Binary($Binary)
	$Search = Binary($Search)
	$Replace = Binary($Replace)

	Local $BinaryLen = BinaryLen($Binary)
	Local $SearchLen = BinaryLen($Search)
	Local $ReplaceLen = BinaryLen($Replace)

	Local $Len1 = BinaryLen($Binary)
	Local $Buffer1 = DllStructCreate("byte[" & $Len1 & "]")
	DllStructSetData($Buffer1, 1, $Binary)

	Local $Len2 = BinaryLen($Search)
	Local $Buffer2 = DllStructCreate("byte[" & $Len2 & "]")
	DllStructSetData($Buffer2, 1, $Search)

	Local $Len3 = BinaryLen($Replace)
	Local $Buffer3 = DllStructCreate("byte[" & $Len3 & "]")
	DllStructSetData($Buffer3, 1, $Replace)

	Local $Var = DllStructCreate("ptr bin1; uint len1; ptr bin2; uint len2; ptr bin3; uint len3; int occur; ")
	DllStructSetData($Var, "bin1", DllStructGetPtr($Buffer1))
	DllStructSetData($Var, "bin2", DllStructGetPtr($Buffer2))
	DllStructSetData($Var, "bin3", DllStructGetPtr($Buffer3))
	DllStructSetData($Var, "len1", $Len1)
	DllStructSetData($Var, "len2", $Len2)
	DllStructSetData($Var, "len3", $Len3)
	DllStructSetData($Var, "occur", $Occur)

	Local $Ret = DllCall($__Binary_User32Dll, "uint", "CallWindowProc", "ptr", $CodeBufferPtr, _
																		"ptr", DllStructGetPtr($Var), _
																		"uint*", 0, _
																		"uint*", 0, _
																		"ptr", $ReAllocPtr)

	Local $Result, $Count
	If $Ret[0] Then
		Local $Buffer = DllStructCreate("byte[" & $Ret[4] & "]", $Ret[0])
		$Result = DllStructGetData($Buffer, 1)
		$Count = $Ret[3]
		__Binary_Free($Ret[0])
	Else
		$Result = DllStructGetData($Buffer1, 1)
		$Count = 0
	EndIf

	Return SetExtended($Count, $Result)
EndFunc

Func _BinarySplit($Binary, $Search)
	$Binary = Binary($Binary)
	$Search = Binary($Search)

	Local $SearchLen = BinaryLen($Search)
	Local $Array[1] = [0]
	Do
		Local $Pos = _BinaryInBin($Binary, $Search)

		$Array[0] += 1
		ReDim $Array[$Array[0] + 1]
		$Array[$Array[0]] = BinaryMid($Binary, 1, $Pos - 1)

		$Binary = BinaryMid($Binary, $Pos + $SearchLen)
	Until $Pos = 0

	Return $Array
EndFunc

Func _BinaryRandom($Length, $Start = 0, $To = 255, $Seed = 0)
	Static $CodeBufferPtr
	If Not $CodeBufferPtr Then
		Local $Code
		If @AutoItX64 Then
			$Code = Binary("0x41574156415541545531ED5756534881ECF80900004585C948C78424D009000000000000745E4C8D54241044894C2410B801000000498D72044489CBC1EB1E4431CB4469CB6589076C468D0C0883C00144890E4883C6043D7002000075DB498D42044C899424D00900004C89D548898424D8090000498D823406000048898424E00900004589C341C1E8084538C376034587D885D20F84730100004C8D542410450FB6C0410FB6C34183C00183EA014129C0498D8238060000488D5C1101498D7204498DBA340600004D8D8AC00900004889442408EB4789C2C1EA0B31C289D0C1E0072580562C9D31D031D289C5C1E50F81E50000C6EF31C589E8C1E81231E841F7F0418D141388114883C1014839D90F84F8000000488BAC24D00900004885ED0F84870000004C8BBC24E00900004C8BA424D80900004D8D6F044C89E0448B308B55004C89A424D00900004983C4044C89AC24E00900004C89A424D80900004489F081E2000000804183E60125FFFFFF7F41F7DE09D04181E6DFB00899D1E84431F04133074D39CD89450074164D39CC0F8540FFFFFF4C899424D8090000E933FFFFFF4C899424E0090000EBE00F3131D04989F4BD010000008944241089C2C1EA1E31C269C26589076C01E883C501418904244983C40481FD7002000075DE4C899424D00900004889B424D80900004889F04889BC24E00900004C8B6C24084C89D54989FF4989F4E930FFFFFF4881C4F80900005B5E5F5D415C415D415E415FC3")
		Else
			$Code = Binary("0x5531D257565381ECE40900008BB424040A00008B9C24000A0000C78424D80900000000000085F6744C89742418B8010000008D4C241889F2C1EA1E31F269F26589076C8D343089348183C0013D7002000075E38D44241C89CA898424DC0900008D84244C060000898C24D8090000898424E0090000885C2413C1EB08385C2413760A0FB644241393884424138B8424FC09000085C00F84690100000FB6DB0FB644241383C3018DB424D8090000895C240C8D4C241831DB2944240C893424EB5289C2C1EA0B31C289D0C1E0072580562C9D31D031D289C6C1E60F81E60000C6EF31C689F0C1E81231F0F774240C8B8424F80900000254241388141883C301399C24FC0900000F86F90000008B9424D809000085D20F84850000008BAC24E00900008BBC24DC0900008D750489F8897424048B008B3289BC24D809000083C70489BC24DC0900008944240825FFFFFF7F81E60000008009F08B742408D1E883E601F7DE81E6DFB0089931F08B342433450089028B54240439F2899424E009000074153B3C240F8536FFFFFF898C24DC090000E92AFFFFFF898C24E0090000EBE20F3131D0BE010000008944241889C2C1EA1E31C269C26589076C01F08904B183C60181FE7002000075E38D44241C8D94244C06000089C78DB42450060000899424E00900008DAC244C06000089CA898C24D8090000898424DC09000089742404E92DFFFFFF81C4E40900005B5E5F5DC21000")
		EndIf
		$CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
	EndIf

	If $Length = 0 Then Return Binary("")

	Local $Buffer = DllStructCreate("byte[" & $Length & "]")
	Local $Ret = DllCall($__Binary_User32Dll, "uint", "CallWindowProc", "ptr", $CodeBufferPtr, _
																		"ptr", DllStructGetPtr($Buffer), _
																		"uint", $Length, _
																		"word", $To * 256 + $Start, _
																		"uint", $Seed)
	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryRight($Binary, $Count)
	Return BinaryMid($Binary, BinaryLen($Binary) - $Count + 1)
EndFunc

Func _BinaryLeft($Binary, $Count)
	Return BinaryMid($Binary, 1, $Count)
EndFunc

Func _BinaryTrimLeft($Binary, $Count)
	Return BinaryMid($Binary, $Count + 1)
EndFunc

Func _BinaryTrimRight($Binary, $Count)
	Return BinaryMid($Binary, 1, BinaryLen($Binary) - $Count)
EndFunc

Func _BinaryToInt16($Binary)
	Return BitAND(Int(Binary($Binary)), 0xFFFF)
EndFunc

Func _BinaryFromInt16($Value)
	Return _BinaryLeft(Binary(BitAND($Value, 0xFFFF)), 2)
EndFunc

Func _BinaryToInt32($Binary)
	Return BitAND(Int(Binary($Binary)), 0xFFFFFFFF)
EndFunc

Func _BinaryFromInt32($Value)
	Return Binary(BitAND($Value, 0xFFFFFFFF))
EndFunc

Func _BinaryToInt64($Binary)
	Local $Buffer = DllStructCreate("byte[8]")
	DllStructSetData($Buffer, 1, Binary($Binary))

	Return DllStructGetData(DllStructCreate("int64", DllStructGetPtr($Buffer)), 1)
EndFunc

Func _BinaryFromInt64($Value)
	Local $Buffer = DllStructCreate("int64")
	DllStructSetData($Buffer, 1, $Value)

	Return DllStructGetData(DllStructCreate("byte[8]", DllStructGetPtr($Buffer)), 1)
EndFunc

Func _BinaryToDouble($Binary)
	Local $Buffer = DllStructCreate("byte[8]")
	DllStructSetData($Buffer, 1, Binary($Binary))

	Return DllStructGetData(DllStructCreate("double", DllStructGetPtr($Buffer)), 1)
EndFunc

Func _BinaryFromDouble($Value)
	Local $Buffer = DllStructCreate("double")
	DllStructSetData($Buffer, 1, $Value)

	Return DllStructGetData(DllStructCreate("byte[8]", DllStructGetPtr($Buffer)), 1)
EndFunc

Func _BinaryToMemory($Binary, $Ptr)
	Local $Buffer = DllStructCreate("byte[" & BinaryLen($Binary) & "]", $Ptr)
	DllStructSetData($Buffer, 1, $Binary)
EndFunc

Func _BinaryFromMemory($Ptr, $Size = 1)
	Local $Buffer = DllStructCreate("byte[" & $Size & "]", $Ptr)
	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryToDLLStruct($Binary)
	Local $Buffer = DllStructCreate("byte[" & BinaryLen($Binary) & "]")
	DllStructSetData($Buffer, 1, $Binary)
	Return $Buffer
EndFunc

Func _BinaryFromDLLStruct(ByRef $DLLStruct)
	Local $Buffer = DllStructCreate("byte[" & DllStructGetSize($DLLStruct) & "]", DllStructGetPtr($DLLStruct))
	Return DllStructGetData($Buffer, 1)
EndFunc

Func _BinaryFillDLLStruct($Binary, ByRef $DLLStruct)
	Local $Buffer = DllStructCreate("byte[" & DllStructGetSize($DLLStruct) & "]", DllStructGetPtr($DLLStruct))
	DllStructSetData($Buffer, 1, $Binary)
EndFunc

Func _BitShift64($Value, $Shift)
	Return _BinaryToInt64(_BinaryShift(_BinaryFromInt64($Value), $Shift))
EndFunc

Func _BitRotate64($Value, $Shift)
	Return _BinaryToInt64(_BinaryRotate(_BinaryFromInt64($Value), $Shift))
EndFunc

Func _BitNOT64($Value)
	Return _BinaryToInt64(_BinaryNOT(_BinaryFromInt64($Value)))
EndFunc

Func _BitXOR64($Value1, $Value2, $Value3 = 0, $Value4 = 0, $Value5 = 0, $Value6 = 0, $Value7 = 0, $Value8 = 0, $Value9 = 0, $Value10 = 0, $Value11 = 0, $Value12 = 0, $Value13 = 0, $Value14 = 0, $Value15 = 0, $Value16 = 0, $Value17 = 0, $Value18 = 0, $Value19 = 0, $Value20 = 0)
	Local $Ret = _BinaryFromInt64($Value1)
	For $i = 2 To @NumParams
		$Ret = _BinaryXOR($Ret, _BinaryFromInt64(Eval("Value" & $i)))
	Next
	Return _BinaryToInt64($Ret)
EndFunc

Func _BitAND64($Value1, $Value2, $Value3 = 0, $Value4 = 0, $Value5 = 0, $Value6 = 0, $Value7 = 0, $Value8 = 0, $Value9 = 0, $Value10 = 0, $Value11 = 0, $Value12 = 0, $Value13 = 0, $Value14 = 0, $Value15 = 0, $Value16 = 0, $Value17 = 0, $Value18 = 0, $Value19 = 0, $Value20 = 0)
	Local $Ret = _BinaryFromInt64($Value1)
	For $i = 2 To @NumParams
		$Ret = _BinaryAND($Ret, _BinaryFromInt64(Eval("Value" & $i)))
	Next
	Return _BinaryToInt64($Ret)
EndFunc

Func _BitOR64($Value1, $Value2, $Value3 = 0, $Value4 = 0, $Value5 = 0, $Value6 = 0, $Value7 = 0, $Value8 = 0, $Value9 = 0, $Value10 = 0, $Value11 = 0, $Value12 = 0, $Value13 = 0, $Value14 = 0, $Value15 = 0, $Value16 = 0, $Value17 = 0, $Value18 = 0, $Value19 = 0, $Value20 = 0)
	Local $Ret = _BinaryFromInt64($Value1)
	For $i = 2 To @NumParams
		$Ret = _BinaryOR($Ret, _BinaryFromInt64(Eval("Value" & $i)))
	Next
	Return _BinaryToInt64($Ret)
EndFunc

Func _Hex64($Value, $Len = 16)
	Local $Binary = _BinaryReverse(_BinaryFromInt64($Value))
	Return StringRight(StringTrimLeft($Binary, 2), $Len)
EndFunc

Func _Dec64($Hex)
	If Mod(StringLen($Hex), 2) = 1 Then $Hex = "0" & $Hex
	Return _BinaryToInt64(_BinaryReverse("0x" & $Hex))
EndFunc

@ner00
Copy link
Contributor Author

ner00 commented Dec 30, 2024

firewatch_import.au3

#include<File.au3>
#include<Binary.au3>
Dim $NEWdata, $Num = 1
$TxtPath = FileOpenDialog("Select the TXT file", @ScriptDir, "text files (*.txt)",1)
If @error = 1 Then Exit
_FileReadToArray($TxtPath,$NEWdata)
$Dir = StringTrimRight(CompGetFileName($TxtPath),4)
$Names = _FileListToArrayRec($Dir, "*-2", 1,1)
For $i=1 to $Names[0]
	$File = FileOpen ($Dir &"\"& $Names[$i], 0+16)
	FileSetPos($File,28,0)
	$Size = _BinaryToInt32(FileRead($File, 4))
	FileRead($File, $Size)
	$pad = 4 - Mod($Size, 4)
	If $pad < 4 Then
		FileRead($File,$pad)
	EndIf
	$Files = FileRead($File, 4)
	$pos = FileGetPos($File)
	FileSetPos($File,0,0)
	$Newfile = FileRead($File,$pos)
	For $f = 1 to $Files
		For $n = 1 to 2
			$Size = _BinaryToInt32(FileRead($File, 4))
			FileRead($File,$Size)
			$pad = 4 - Mod($Size, 4)
			If $pad < 4 Then
				FileRead($File,$pad)
			EndIf
			$NEWdata[$Num] = StringRegExpReplace($NEWdata[$Num],"<cf>",@CRLF)
			$NEWdata[$Num] = StringRegExpReplace($NEWdata[$Num],"<lf>",@LF)
			$NEWdata[$Num] = StringRegExpReplace($NEWdata[$Num],"<cr>",@CR)
			$NewText = StringToBinary($NEWdata[$Num],4)
			$Size = BinaryLen($NewText)
			$pad = 4 - Mod($Size, 4)
			If $pad < 4 Then
				$Newfile &= _BinaryReverse(Binary("0x" & Hex($Size,8))) & $NewText & _binaryrandom($pad, 0, 0)
			Else
				$Newfile &= _BinaryReverse(Binary("0x" & Hex($Size,8))) & $NewText
			EndIf
			$Num += 1
		Next
	Next
	$hNewfile = FileOpen($Dir &"\"& $Names[$i], 2+16)
	FileWrite($hNewfile,$Newfile)
	FileClose($hNewfile)
	FileClose($File)
Next
TrayTip ("Importer", "Finish!", 3)
sleep (3000)
Func CompGetFileName($Path)
If StringLen($Path) < 4 Then Return -1
$ret = StringSplit($Path,"\",2)
If IsArray($ret) Then
Return $ret[UBound($ret)-1]
EndIf
If @error Then Return -1
EndFunc

@ner00
Copy link
Contributor Author

ner00 commented Dec 30, 2024

firewatch_export.au3

#Include<File.au3>
#include<binary.au3>
$Dir = FileSelectFolder("Select the folder...", "", "", @ScriptDir)
If $Dir = "" Then
   Exit
EndIf
$Names = _FileListToArrayRec($Dir, "*.-2", 1,1)
Dim $Text,$List
For $i=1 to $Names[0]
	$File = FileOpen ($Dir &"\"& $Names[$i], 0+16)
	FileSetPos($File,28,0)
	$Size = _BinaryToInt32(FileRead($File, 4))
	FileRead($File, $Size)
	$pad = 4 - Mod($Size, 4)
	If $pad < 4 Then
		FileRead($File,$pad)
	EndIf
	$Files = FileRead($File, 4)
	For $f = 1 to $Files
		For $n = 1 to 2
			$Size = _BinaryToInt32(FileRead($File, 4))
			$Str =  BinaryToString(FileRead($File,$Size),4)
			$Str = StringRegExpReplace($Str,@CRLF,"<cf>")
			$Str = StringRegExpReplace($Str,@LF,"<lf>")
			$Str = StringRegExpReplace($Str,@CR,"<cr>")
			$Text &= $Str & @CRLF
			$pad = 4 - Mod($Size, 4)
			If $pad < 4 Then
				FileRead($File,$pad)
			EndIf
		Next
	Next
	FileClose($File)
Next
$hFile = FileOpen(CompGetFileName($Dir)&".txt", 2+256)
FileWrite($hFile,$Text)
FileClose($hFile)
TrayTip("Exporter", "Finish!", 3)
sleep(3000)
Func CompGetFileName($Path)
    If StringLen($Path) < 4 Then Return -1
    $ret = StringSplit($Path,"\",2)
    If IsArray($ret) Then
        Return $ret[UBound($ret)-1]
    EndIf
    If @error Then Return -1
EndFunc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant