
مشروع يقوم بعملية تحديث لبيانات Resource بملفات البرامج التنفيذية بنفس طريقة
البرنامج الشهير ResHacker.exe كما يمكن البحث و التحميل كذالك في بيانات
Resource معلومات أكثر حول هذه العملية من موقع ميكروسوفت من هذا الرابط
موقع ResHacker
angusj.com/resourcehacker/
رابط ميكروسوفت
Peering Inside the PE: A Tour of the Win32 Portable Executable File Format
msdn.microsoft.com/en-us/library/ms809762.aspx
المشروع مصمم على لغة autoitscript لعدم إمكانية تحديث ملفات هذه اللغة بواظائف Resource
المتعارف عليها وذالك لوجود بيانات إظافية بالملف التفيذي الناتج من برنامج Compiling اللغة
Compiling Scripts with Aut2Exe و هي بيانات مشفرة لكود Scripts اللغة مضاف في
أخر الملف و خارج عن SizeOfImage حجم الأمج للملف التفيذي EXE
لمن يريد تجربة عمليات المشروع عليه أولا تنصيب مترجم اللغة Autoit من هذا الرابط
autoitscript.com/cgi-bin/getfi…toit3/autoit-v3-setup.exe
أو من صفحة إنزال المترجم من هنا
autoitscript.com/autoit3/downloads.shtml
المشروع كامل على المرفقات
وهذا كود لسكربتات المشروع
AutoitResHacker.au3
كود المصدر
- #Include <WinAPI.au3>
- Func FindResourceExW($sFileName,$ResType,$ResName,$ResLang)
- $ImageArray = FileToImageArray($sFileName)
- if Not IsArray($ImageArray) Then Return 0
- $hFile = $ImageArray[0][0]
- $ResStartPos = $ImageArray[3][0]
- $PosOfResRawData = $ImageArray[7][0]
- $OffsetToDir = 0
- $OffsetToDir = GetRes_DirEntry($hFile,$PosOfResRawData ,$OffsetToDir,$ResType)
- if Not($OffsetToDir) Then Return 0
- $OffsetToDir = GetRes_DirEntry($hFile,$PosOfResRawData,$OffsetToDir,$ResName)
- if Not($OffsetToDir) Then Return 0
- $OffsetToDir = GetRes_DirEntry($hFile,$PosOfResRawData,$OffsetToDir,$ResLang)
- if Not($OffsetToDir) Then Return 0
- $IMAGE_RESOURCE_DATA_ENTRY = _
- READ_IMAGE_RES_DAT($hFile,$PosOfResRawData,$OffsetToDir)
- $DataLangOffsetToData = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"OffsetToData")
- $DataLangDataSize = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"Size")
- if Not($DataLangOffsetToData) Then Return 0
- $HandFindRes = DllStructCreate("hwnd;int;int;int;int")
- DllStructSetData($HandFindRes,1,$hFile)
- DllStructSetData($HandFindRes,2,$ResStartPos)
- DllStructSetData($HandFindRes,3,$DataLangOffsetToData)
- DllStructSetData($HandFindRes,4,$DataLangDataSize)
- DllStructSetData($HandFindRes,5,$PosOfResRawData)
- Return $HandFindRes
- EndFunc
- Func LoadResource($HandFindRes)
- if Not IsDllStruct($HandFindRes) Then Return -1
- $hFile = DllStructGetData($HandFindRes,1)
- if Not ($hFile) Then Return -2
- $ResStartPos = DllStructGetData($HandFindRes,2)
- $DataLangOffsetToData = DllStructGetData($HandFindRes,3)
- $DataLangDataSize = DllStructGetData($HandFindRes,4)
- $PosOfResRawData = DllStructGetData($HandFindRes,5)
- if ($DataLangOffsetToData - $ResStartPos) <= 0 Then _
- Return MsgBox(0,"", _
- "Compressor Resource")
- $DataPos = $PosOfResRawData + ($DataLangOffsetToData - $ResStartPos)
- $LoadRes = READ_Data($hFile,$DataPos,$DataLangDataSize)
- Return $LoadRes
- EndFunc
- Func SizeofResource($HandFindRes)
- if Not IsDllStruct($HandFindRes) Then Return -1
- $hFile = DllStructGetData($HandFindRes,1)
- if Not ($hFile) Then Return -2
- $DataLangDataSize = DllStructGetData($HandFindRes,4)
- Return $DataLangDataSize
- EndFunc
- Func LockResource($LoadRes)
- if Not IsDllStruct($LoadRes) Then Return -1
- Return DllStructGetPtr($LoadRes)
- EndFunc
- Func FindRes_CloseHandle($HandFindRes)
- if Not IsDllStruct($HandFindRes) Then Return -1
- $hFile = DllStructGetData($HandFindRes,1)
- if Not ($hFile) Then Return -2
- _WinAPI_CloseHandle($hFile)
- EndFunc
- Func GetRes_DirEntry($hFile,$PosOfResRawData,$OffsetToDir,$FindName)
- $IMAGE_RESOURCE_DIRECTORY = _
- READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,$OffsetToDir)
- $Entries = DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
- + DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
- if IsInt($FindName) Then
- For $j = 0 To $Entries - 1
- $IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$PosOfResRawData,$OffsetToDir + (16 + ($j * 8)))
- $Name = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- $OffsetToData = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- if $Name <> $FindName Or NameIsString($Name) Then ContinueLoop
- $OffsetToDir = OffsetToDirectory($OffsetToData)
- Return $OffsetToDir
- Next
- Else
- For $j = 0 To $Entries - 1
- $IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$PosOfResRawData,$OffsetToDir + (16 + ($j * 8)))
- $Name = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- if Not NameIsString($Name) Then ContinueLoop
- $OffsetToData = DllStructGetData($IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- $NameString = _
- ReadStringName($Name,$hFile,$PosOfResRawData)
- if StringCompare($NameString,$FindName) _
- <> 0 Then ContinueLoop
- $OffsetToDir = OffsetToDirectory($OffsetToData)
- Return $OffsetToDir
- Next
- EndIf
- Return 0
- EndFunc
- Func ResourceList($sFileName)
- $ImageArray = FileToImageArray($sFileName)
- if Not IsArray($ImageArray) Then Return 0
- $hFile = $ImageArray[0][0]
- $ResStartPos = $ImageArray[3][0]
- $PosOfResRawData = $ImageArray[7][0]
- $IMAGE_RESOURCE_DIRECTORY = _
- READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,0)
- $Entries = DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
- + DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
- $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
- Local $RtArray[2][12] , $TestTypeChange = False , $TestLangChange = False _
- , $TestNameChange = False ,$D = 0 ,$E = 0 , $F = 0 , $G = 0 , $H = 0 , $J = 0 , $K = 0 _
- , $L = 0 , $iTestNameChange = "" , $iTestTypeChange = "" , $iTestLangChange , $ALLSize
- For $A = 0 To $Entries - 1
- $Type_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$PosOfResRawData,(16 + ($A * 8)))
- $PType_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $TypeName = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- if NameIsString($TypeName) Then $TypeName = ReadStringName($TypeName,$hFile,$PosOfResRawData)
- $TypeOffsetToData = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- $TypeOffsetToDirectory = OffsetToDirectory($TypeOffsetToData)
- $NameIMAGE_RESOURCE_DIRECTORY = _
- READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,$TypeOffsetToDirectory)
- $NameEntries = DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
- + DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
- $ImgResDir = DllStructGetPtr($NameIMAGE_RESOURCE_DIRECTORY)
- $OUT_PIMAGE_RES_DIR2 = $ImgResDir
- For $B = 0 To $NameEntries - 1
- $Name_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$PosOfResRawData ,$TypeOffsetToDirectory + (16 + ($B * 8)))
- $PName_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $NameName = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- if NameIsString($NameName) Then $NameName = ReadStringName($NameName,$hFile,$PosOfResRawData)
- $NameOffsetToData = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- $NameOffsetToDirectory = OffsetToDirectory($NameOffsetToData)
- $LangIMAGE_RESOURCE_DIRECTORY = _
- READ_IMAGE_RES_DIR($hFile,$PosOfResRawData,$NameOffsetToDirectory)
- $LangEntries = DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
- + DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfLangdEntries")
- $ImgResDir = DllStructGetPtr($LangIMAGE_RESOURCE_DIRECTORY)
- $OUT_PIMAGE_RES_DIR4 = $ImgResDir
- For $C = 0 To $LangEntries - 1
- $Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$PosOfResRawData ,$NameOffsetToDirectory + (16 + ($C * 8)))
- $PLang_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $LangName = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- if NameIsString($LangName) Then $LangName = ReadStringName($LangName,$hFile,$PosOfResRawData)
- $LangOffsetToData = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- $LangOffsetToDirectory = OffsetToDirectory($LangOffsetToData)
- $IMAGE_RESOURCE_DATA_ENTRY = _
- READ_IMAGE_RES_DAT($hFile,$PosOfResRawData , $LangOffsetToDirectory)
- $DataLangOffsetToData = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"OffsetToData")
- $DataLangDataSize = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"Size")
- $RtArray[0][0] = "TypeName"
- $RtArray[0][1] = "NameName"
- $RtArray[0][2] = "LangName"
- $RtArray[0][3] = "Size Of Res"
- $RtArray[0][4] = "OffsetToData In File"
- $RtArray[0][5] = "IsCompressorRes"
- $RtArray[0][6] = "TypeName IsString"
- $RtArray[0][7] = "NameName IsString"
- $RtArray[0][8] = "LangName IsString"
- $RtArray[0][9] = "TypeName IsInt"
- $RtArray[0][10] = "NameName IsInt"
- $RtArray[0][11] = "LangName IsInt"
- $RtArray[UBound($RtArray) - 1][0] = $TypeName
- $RtArray[UBound($RtArray) - 1][1] = $NameName
- $RtArray[UBound($RtArray) - 1][2] = $LangName
- $RtArray[UBound($RtArray) - 1][3] = $DataLangDataSize
- if ($DataLangOffsetToData - $ResStartPos) > 0 Then _
- $RtArray[UBound($RtArray) - 1][4] = $PosOfResRawData + ($DataLangOffsetToData - $ResStartPos)
- $RtArray[UBound($RtArray) - 1][5] = ($DataLangOffsetToData - $ResStartPos) <= 0
- $RtArray[UBound($RtArray) - 1][6] = IsString($TypeName)
- $RtArray[UBound($RtArray) - 1][7] = IsString($NameName)
- $RtArray[UBound($RtArray) - 1][8] = IsString($LangName)
- $RtArray[UBound($RtArray) - 1][9] = IsInt($TypeName)
- $RtArray[UBound($RtArray) - 1][10] = IsInt($NameName)
- $RtArray[UBound($RtArray) - 1][11] = IsInt($LangName)
- ReDim $RtArray[UBound($RtArray) + 1][12]
- Next
- Next
- Next
- ReDim $RtArray[UBound($RtArray) - 1][12]
- _WinAPI_CloseHandle($hFile)
- Return $RtArray
- EndFunc
- Func BeginUpdateResource($pFileName,$OutFile = "OutFile.exe")
- if ($pFileName == $OutFile) Then Return 0
- $ImageArray = FileToImageArray($pFileName)
- if Not IsArray($ImageArray) Then Return $ImageArray
- $ImageArray = RESOURCE_DIRECTORY_TO_ARRAY($ImageArray)
- if Not IsArray($ImageArray) Then Return $ImageArray
- ReDim $ImageArray[12][2]
- $ImageArray[11][0] = $OutFile
- $ImageArray[11][1] = "OutFile"
- Return $ImageArray
- EndFunc
- Func UpdateResource($ImageArray,$lpType,$lpName,$wLanguage,$Data_Ptr,$Data_Size)
- Local $SizeStrlpType = 0 , $SizeStrlpName = 0 , $TestType = False , _
- $TestLang = False , $TestName = False , $TestTypeChange = False , $A = "" _
- , $B = "", $C = "" , $D = "", $E = "", $F = "" , $G = "" , $H = "", $nBytes , _
- $OF_READWRITE = 0x00000002 , $OF_CREATE = 0x00001000
- if Not IsArray($ImageArray) Then Return -1
- if Not IsInt($wLanguage) Then Return -2
- if Not IsPtr($Data_Ptr) Then Return -3
- if $lpType == "" Or $lpName == "" Then Return -4
- if IsString($lpType) Then $lpType = StringUpper($lpType)
- if IsString($lpName) Then $lpName = StringUpper($lpName)
- $RtArray = $ImageArray[10][0]
- if Not($RtArray[0][16]) Then
- $TempFile = @TempDir & "\~Res.res"
- if Not FileExists(@TempDir) Then $TempFile = @ScriptDir & "\~Res.res"
- $RtArray[0][16] = $TempFile
- Else
- $TempFile = $RtArray[0][16]
- EndIf
- $DataStruct = DllStructCreate("char[' & $Data_Size & ']",$Data_Ptr)
- $Data_Ptr = DllStructGetPtr($DataStruct)
- $Data_Size = DllStructGetSize($DataStruct)
- if Not($RtArray[0][17]) Then
- $hTempFile = WINAPIOpenFile($TempFile,$OF_CREATE + $OF_READWRITE)
- $RtArray[0][17] = $hTempFile
- $RtArray[0][18] = 0
- Else
- $hTempFile = $RtArray[0][17]
- EndIf
- $MovePos = $RtArray[0][18]
- WRITE_Data($hTempFile,$MovePos,$DataStruct)
- For $i = 0 To UBound($RtArray) - 1
- $TypeName = $RtArray[$i][0]
- $NameName = $RtArray[$i][1]
- $LangName = $RtArray[$i][2]
- if $lpType < $TypeName And $A == "" Then $A = $i
- if $lpType == $TypeName Then
- $TestType = True
- $G = $i
- if $B == "" Then $B = $i
- if $lpName < $NameName And $C == "" Then $C = $i
- if $lpName == $NameName Then
- $TestName = True
- if $D == "" Then $D = $i
- if $wLanguage < $LangName And $E == "" Then $E = $i
- if $wLanguage == $LangName Then
- if $F == "" Then $F = $i
- $TestLang = True
- Else
- ContinueLoop
- EndIf
- Else
- ContinueLoop
- EndIf
- Else
- ContinueLoop
- EndIf
- Next
- if $TestType = True And $TestName = True And $TestLang = True Then
- $RtArray[$F][3] = $Data_Size
- $RtArray[$F][15] = True
- $RtArray[$F][19] = $RtArray[0][18]
- EndIf
- if $TestType = False And $TestName = False And $TestLang = False Then
- if $A == "" Then
- ReDim $RtArray[UBound($RtArray) + 1][20]
- $RtArray[UBound($RtArray) - 1][0] = $lpType
- $RtArray[UBound($RtArray) - 1][1] = $lpName
- $RtArray[UBound($RtArray) - 1][2] = $wLanguage
- $RtArray[UBound($RtArray) - 1][3] = $Data_Size
- $RtArray[UBound($RtArray) - 1][4] = True
- $RtArray[UBound($RtArray) - 1][5] = True
- $RtArray[UBound($RtArray) - 1][6] = True
- $RtArray[UBound($RtArray) - 1][7] = 0
- $RtArray[UBound($RtArray) - 1][15] = True
- $RtArray[UBound($RtArray) - 1][19] = $RtArray[0][18]
- if IsInt($lpType) Then
- $RtArray[0][8] += 1
- if $RtArray[0][9] == "" Then $RtArray[0][9] = 0
- Else
- $RtArray[0][9] += 1
- if $RtArray[0][8] == "" Then $RtArray[0][8] = 0
- EndIf
- if IsString($lpName) Then
- $RtArray[UBound($RtArray) - 1][10] = 1
- $RtArray[UBound($RtArray) - 1][11] = 0
- Else
- $RtArray[UBound($RtArray) - 1][11] = 1
- $RtArray[UBound($RtArray) - 1][10] = 0
- EndIf
- $RtArray[UBound($RtArray) - 1][12] = 0
- $RtArray[UBound($RtArray) - 1][13] = 1
- Else
- Dim $OuArray[1][20]
- For $i = 0 To UBound($RtArray) - 1
- if $i = $A Then
- $OuArray[UBound($OuArray) - 1][0] = $lpType
- $OuArray[UBound($OuArray) - 1][1] = $lpName
- $OuArray[UBound($OuArray) - 1][2] = $wLanguage
- $OuArray[UBound($OuArray) - 1][3] = $Data_Size
- $OuArray[UBound($OuArray) - 1][4] = True
- $OuArray[UBound($OuArray) - 1][5] = True
- $OuArray[UBound($OuArray) - 1][6] = True
- $OuArray[UBound($OuArray) - 1][7] = 0
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = True
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
- if IsInt($lpType) Then
- $OuArray[0][8] += 1
- if $OuArray[0][9] == "" Then $OuArray[0][9] = 0
- Else
- $OuArray[0][9] += 1
- if $OuArray[0][8] == "" Then $OuArray[0][8] = 0
- EndIf
- if IsString($lpName) Then
- $OuArray[UBound($OuArray) - 1][10] = 1
- $OuArray[UBound($OuArray) - 1][11] = 0
- Else
- $OuArray[UBound($OuArray) - 1][11] = 1
- $OuArray[UBound($OuArray) - 1][10] = 0
- EndIf
- $OuArray[UBound($OuArray) - 1][12] = 0
- $OuArray[UBound($OuArray) - 1][13] = 1
- ReDim $OuArray[UBound($OuArray) + 1][20]
- EndIf
- $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
- $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
- $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
- $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
- $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
- $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
- $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
- $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
- ReDim $OuArray[UBound($OuArray) + 1][20]
- Next
- ReDim $OuArray[UBound($OuArray) - 1][20]
- $RtArray = $OuArray
- EndIf
- EndIf
- if $TestType = True And $TestName = False And $TestLang = False Then
- Dim $OuArray[1][20]
- if $C == "" Then
- For $i = 0 To UBound($RtArray) - 1
- if $i = 0 Then
- if IsString($lpName) Then
- $RtArray[$B][10] += 1
- if $RtArray[$B][11] == "" Then _
- $RtArray[$B][11] = 0
- Else
- $RtArray[$B][11] += 1
- if $RtArray[$B][10] == "" Then _
- $RtArray[$B][10] = 0
- EndIf
- $RtArray[UBound($RtArray) - 1][12] = 0
- $RtArray[UBound($RtArray) - 1][13] = 1
- EndIf
- $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
- $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
- $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
- $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
- $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
- $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
- $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
- $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
- if $OuArray[UBound($OuArray) - 1][4] = False Then
- $OuArray[UBound($OuArray) - 1][10] = 0
- $OuArray[UBound($OuArray) - 1][11] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- if $i = $G Then
- $OuArray[UBound($OuArray) - 1][0] = $lpType
- $OuArray[UBound($OuArray) - 1][1] = $lpName
- $OuArray[UBound($OuArray) - 1][2] = $wLanguage
- $OuArray[UBound($OuArray) - 1][3] = $Data_Size
- $OuArray[UBound($OuArray) - 1][4] = False
- $OuArray[UBound($OuArray) - 1][5] = True
- $OuArray[UBound($OuArray) - 1][6] = True
- $OuArray[UBound($OuArray) - 1][7] = 0
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = True
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
- if $OuArray[UBound($OuArray) - 1][4] = False Then
- $OuArray[UBound($OuArray) - 1][10] = 0
- $OuArray[UBound($OuArray) - 1][11] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- EndIf
- Next
- Else
- For $i = 0 To UBound($RtArray) - 1
- if $i = 0 Then
- if IsString($lpName) Then
- $RtArray[$B][10] += 1
- if $RtArray[$B][11] == "" Then _
- $RtArray[$B][11] = 0
- Else
- $RtArray[$B][11] += 1
- if $RtArray[$B][10] == "" Then _
- $RtArray[$B][10] = 0
- EndIf
- $RtArray[UBound($RtArray) - 1][12] = 0
- $RtArray[UBound($RtArray) - 1][13] = 1
- EndIf
- if $i = $C Then
- $OuArray[UBound($OuArray) - 1][0] = $lpType
- $OuArray[UBound($OuArray) - 1][1] = $lpName
- $OuArray[UBound($OuArray) - 1][2] = $wLanguage
- $OuArray[UBound($OuArray) - 1][3] = $Data_Size
- $OuArray[UBound($OuArray) - 1][4] = False
- $OuArray[UBound($OuArray) - 1][5] = True
- $OuArray[UBound($OuArray) - 1][6] = True
- $OuArray[UBound($OuArray) - 1][7] = 0
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = True
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
- if $OuArray[UBound($OuArray) - 1][4] = False Then
- $OuArray[UBound($OuArray) - 1][10] = 0
- $OuArray[UBound($OuArray) - 1][11] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- EndIf
- $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
- $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
- $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
- $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
- $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
- $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
- $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
- $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
- if $OuArray[UBound($OuArray) - 1][4] = False Then
- $OuArray[UBound($OuArray) - 1][10] = 0
- $OuArray[UBound($OuArray) - 1][11] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- Next
- EndIf
- ReDim $OuArray[UBound($OuArray) - 1][20]
- $RtArray = $OuArray
- EndIf
- if $TestType = True And $TestName = True And $TestLang = False Then
- Dim $OuArray[1][20]
- if $E == "" Then
- For $i = 0 To UBound($RtArray) - 1
- if $i = 0 Then
- $RtArray[$D][12] = 0
- $RtArray[$D][13] += 1
- EndIf
- $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
- $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
- $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
- $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
- $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
- $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
- $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
- $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
- if $OuArray[UBound($OuArray) - 1][5] = False Then
- $OuArray[UBound($OuArray) - 1][12] = 0
- $OuArray[UBound($OuArray) - 1][13] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- if $i = $G Then
- $OuArray[UBound($OuArray) - 1][0] = $lpType
- $OuArray[UBound($OuArray) - 1][1] = $lpName
- $OuArray[UBound($OuArray) - 1][2] = $wLanguage
- $OuArray[UBound($OuArray) - 1][3] = $Data_Size
- $OuArray[UBound($OuArray) - 1][4] = False
- $OuArray[UBound($OuArray) - 1][5] = False
- $OuArray[UBound($OuArray) - 1][6] = True
- $OuArray[UBound($OuArray) - 1][7] = 0
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = True
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][12] = 0
- $OuArray[UBound($OuArray) - 1][13] += 1
- if $OuArray[UBound($OuArray) - 1][5] = False Then
- $OuArray[UBound($OuArray) - 1][12] = 0
- $OuArray[UBound($OuArray) - 1][13] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- EndIf
- Next
- Else
- For $i = 0 To UBound($RtArray) - 1
- if $i = 0 Then
- $RtArray[$D][12] = 0
- $RtArray[$D][13] += 1
- EndIf
- if $i = $E Then
- $OuArray[UBound($OuArray) - 1][0] = $lpType
- $OuArray[UBound($OuArray) - 1][1] = $lpName
- $OuArray[UBound($OuArray) - 1][2] = $wLanguage
- $OuArray[UBound($OuArray) - 1][3] = $Data_Size
- $OuArray[UBound($OuArray) - 1][4] = False
- $OuArray[UBound($OuArray) - 1][5] = False
- $OuArray[UBound($OuArray) - 1][6] = True
- $OuArray[UBound($OuArray) - 1][7] = 0
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = True
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][18]
- if $OuArray[UBound($OuArray) - 1][5] = False Then
- $OuArray[UBound($OuArray) - 1][12] = 0
- $OuArray[UBound($OuArray) - 1][13] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- EndIf
- $OuArray[UBound($OuArray) - 1][0] = $RtArray[$i][0]
- $OuArray[UBound($OuArray) - 1][1] = $RtArray[$i][1]
- $OuArray[UBound($OuArray) - 1][2] = $RtArray[$i][2]
- $OuArray[UBound($OuArray) - 1][3] = $RtArray[$i][3]
- $OuArray[UBound($OuArray) - 1][4] = $RtArray[$i][4]
- $OuArray[UBound($OuArray) - 1][5] = $RtArray[$i][5]
- $OuArray[UBound($OuArray) - 1][6] = $RtArray[$i][6]
- $OuArray[UBound($OuArray) - 1][7] = $RtArray[$i][7]
- $OuArray[UBound($OuArray) - 1][8] = $RtArray[$i][8]
- $OuArray[UBound($OuArray) - 1][9] = $RtArray[$i][9]
- $OuArray[UBound($OuArray) - 1][10] = $RtArray[$i][10]
- $OuArray[UBound($OuArray) - 1][11] = $RtArray[$i][11]
- $OuArray[UBound($OuArray) - 1][12] = $RtArray[$i][12]
- $OuArray[UBound($OuArray) - 1][13] = $RtArray[$i][13]
- $OuArray[UBound($OuArray) - 1][14] = $RtArray[$i][14]
- $OuArray[UBound($OuArray) - 1][15] = $RtArray[$i][15]
- $OuArray[UBound($OuArray) - 1][16] = $RtArray[$i][16]
- $OuArray[UBound($OuArray) - 1][17] = $RtArray[$i][17]
- $OuArray[UBound($OuArray) - 1][18] = $RtArray[$i][18]
- $OuArray[UBound($OuArray) - 1][19] = $RtArray[$i][19]
- if $OuArray[UBound($OuArray) - 1][5] = False Then
- $OuArray[UBound($OuArray) - 1][12] = 0
- $OuArray[UBound($OuArray) - 1][13] = 0
- EndIf
- ReDim $OuArray[UBound($OuArray) + 1][20]
- Next
- EndIf
- ReDim $OuArray[UBound($OuArray) - 1][20]
- $RtArray = $OuArray
- EndIf
- $RtArray[0][18] += $Data_Size
- $ImageArray[10][0] = $RtArray
- Return $ImageArray
- EndFunc
- Func EndUpdateResource($ImageArray)
- Return ARRAY_TO_RESOURCE_DIRECTORY($ImageArray)
- EndFunc
- Func RESOURCE_DIRECTORY_TO_ARRAY($ImageArray)
- if Not IsArray($ImageArray) Then Return 0
- $hFile = $ImageArray[0][0]
- $StartPos_Of_ResRawData = $ImageArray[7][0]
- $IMAGE_RESOURCE_DIRECTORY = _
- READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData,0)
- $Entries = DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
- + DllStructGetData($IMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
- $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
- Local $RtArray[1][21] , $TestTypeChange = False , $TestLangChange = False _
- , $TestNameChange = False ,$D = 0 ,$E = 0 , $F = 0 , $G = 0 , $H = 0 , $J = 0 , $K = 0 _
- , $L = 0 , $iTestNameChange = "" , $iTestTypeChange = "" , $iTestLangChange , $ALLSize
- For $A = 0 To $Entries - 1
- $Type_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData,(16 + ($A * 8)))
- $PType_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $TypeName = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- if NameIsString($TypeName) Then $TypeName = ReadStringName($TypeName,$hFile,$StartPos_Of_ResRawData)
- $TypeOffsetToData = DllStructGetData($Type_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- $TypeOffsetToDirectory = OffsetToDirectory($TypeOffsetToData)
- $NameIMAGE_RESOURCE_DIRECTORY = _
- READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData,$TypeOffsetToDirectory)
- $NameEntries = DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
- + DllStructGetData($NameIMAGE_RESOURCE_DIRECTORY,"NumberOfNamedEntries")
- $ImgResDir = DllStructGetPtr($NameIMAGE_RESOURCE_DIRECTORY)
- $OUT_PIMAGE_RES_DIR2 = $ImgResDir
- For $B = 0 To $NameEntries - 1
- $Name_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData ,$TypeOffsetToDirectory + (16 + ($B * 8)))
- $PName_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $NameName = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- if NameIsString($NameName) Then $NameName = ReadStringName($NameName,$hFile,$StartPos_Of_ResRawData)
- $NameOffsetToData = DllStructGetData($Name_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- $NameOffsetToDirectory = OffsetToDirectory($NameOffsetToData)
- $LangIMAGE_RESOURCE_DIRECTORY = _
- READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData,$NameOffsetToDirectory)
- $LangEntries = DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfIdEntries") _
- + DllStructGetData($LangIMAGE_RESOURCE_DIRECTORY,"NumberOfLangdEntries")
- $ImgResDir = DllStructGetPtr($LangIMAGE_RESOURCE_DIRECTORY)
- $OUT_PIMAGE_RES_DIR4 = $ImgResDir
- For $C = 0 To $LangEntries - 1
- $Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY = _
- READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData ,$NameOffsetToDirectory + (16 + ($C * 8)))
- $PLang_IMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $LangName = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"Name")
- if NameIsString($LangName) Then $LangName = ReadStringName($LangName,$hFile,$StartPos_Of_ResRawData)
- $LangOffsetToData = DllStructGetData($Lang_IMAGE_RESOURCE_DIRECTORY_ENTRY,"OffsetToData")
- $LangOffsetToDirectory = OffsetToDirectory($LangOffsetToData)
- $IMAGE_RESOURCE_DATA_ENTRY = _
- READ_IMAGE_RES_DAT($hFile,$StartPos_Of_ResRawData , $LangOffsetToDirectory)
- $DataLangOffsetToData = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"OffsetToData")
- $DataLangDataSize = DllStructGetData($IMAGE_RESOURCE_DATA_ENTRY,"Size")
- if $iTestLangChange <> $LangName Then
- $TestLangChange = True
- Else
- $TestLangChange = False
- EndIf
- if $iTestNameChange <> $NameName Then
- $TestNameChange = True
- Else
- $TestNameChange = False
- EndIf
- if $iTestTypeChange <> $TypeName Then
- $TestTypeChange = True
- Else
- $TestTypeChange = False
- EndIf
- if IsString($TypeName) Then
- if $TestTypeChange = True Then $D += 1
- Else
- if $TestTypeChange = True Then $E += 1
- EndIf
- if IsString($NameName) Then
- $RtArray[UBound($RtArray) - 1][10] = 1
- $RtArray[UBound($RtArray) - 1][11] = 0
- Else
- $RtArray[UBound($RtArray) - 1][10] = 0
- $RtArray[UBound($RtArray) - 1][11] = 1
- EndIf
- if $TestTypeChange = True Then
- $F = UBound($RtArray) - 1
- if IsString($NameName) Then
- $G = 1
- $H = 0
- Else
- $G = 0
- $H = 1
- EndIf
- Else
- if IsString($NameName) Then
- if $TestNameChange = True Then $G += 1
- Else
- if $TestNameChange = True Then $H += 1
- EndIf
- $RtArray[$F][10] = $G
- $RtArray[$F][11] = $H
- EndIf
- if IsString($LangName) Then
- $RtArray[UBound($RtArray) - 1][12] = 1
- $RtArray[UBound($RtArray) - 1][13] = 0
- Else
- $RtArray[UBound($RtArray) - 1][12] = 0
- $RtArray[UBound($RtArray) - 1][13] = 1
- EndIf
- if $TestNameChange = True Or $TestTypeChange = True Then
- $J = UBound($RtArray) - 1
- if IsString($LangName) Then
- $K = 1
- $L = 0
- Else
- $K = 0
- $L = 1
- EndIf
- Else
- if IsString($LangName) Then
- if $TestLangChange = True Then $K += 1
- Else
- if $TestLangChange = True Then $L += 1
- EndIf
- if $TestNameChange = False Or $TestTypeChange = False Then
- $RtArray[$F][12] = $K
- $RtArray[$F][13] = $L
- EndIf
- EndIf
- if $A = 0 And $B = 0 And $C = 0 Then $TestTypeChange = True
- if $TestTypeChange = True Then $TestNameChange = True
- if $TestNameChange = True Or $TestTypeChange = True Then $TestLangChange = True
- $iTestTypeChange = $TypeName
- $iTestNameChange = $NameName
- $iTestLangChange = $LangName
- $RtArray[UBound($RtArray) - 1][0] = $TypeName
- $RtArray[UBound($RtArray) - 1][1] = $NameName
- $RtArray[UBound($RtArray) - 1][2] = $LangName
- $RtArray[UBound($RtArray) - 1][3] = $DataLangDataSize
- $RtArray[UBound($RtArray) - 1][4] = $TestTypeChange
- $RtArray[UBound($RtArray) - 1][5] = $TestNameChange
- $RtArray[UBound($RtArray) - 1][6] = $TestLangChange
- $RtArray[UBound($RtArray) - 1][7] = $DataLangOffsetToData
- $RtArray[UBound($RtArray) - 1][15] = False
- ReDim $RtArray[UBound($RtArray) + 1][21]
- Next
- Next
- Next
- $RtArray[0][9] = $D
- $RtArray[0][8] = $E
- $RtArray[0][14] = $ALLSize
- $RtArray[0][16] = 0
- $RtArray[0][17] = 0
- $RtArray[0][18] = 0
- $RtArray[0][19] = 0
- ReDim $RtArray[UBound($RtArray) - 1][21]
- ReDim $ImageArray[11][2]
- $ImageArray[10][0] = $RtArray
- $ImageArray[10][1] = "ResultArray"
- Return $ImageArray
- EndFunc
- Func ARRAY_TO_RESOURCE_DIRECTORY($ImageArray)
- Local $OF_READWRITE = 0x00000002 , _
- $OF_CREATE = 0x00001000 , _
- $ResTablePos_Start = $ImageArray[3][0] , _
- $SectPos_Start = $ImageArray[4][0] , _
- $SectDatSize = $ImageArray[5][0] , _
- $ResDatSize = $ImageArray[2][0] , _
- $OutFile = $ImageArray[11][0] , _
- $SectIndex = $ImageArray[8][0] , _
- $PosOfResRawData = $ImageArray[7][0] , _
- $hFile = $ImageArray[0][0] , _
- $FileSize = $ImageArray[1][0] , _
- $ImageSize = $ImageArray[9][0]
- $RtArray = $ImageArray[10][0]
- Local $TestType = $RtArray[0][4] , _
- $TestName = $RtArray[0][5] , _
- $FirstTypeName = $RtArray[0][0] , _
- $TestStringName = False , _
- $StringName[1][2] , _
- $FirstPointerToRawData = 0 , _
- $hTempFile = 0
- $HFILE1 = WINAPIOpenFile($OutFile,$OF_CREATE + $OF_READWRITE)
- $HFILE2 = WINAPIOpenFile($OutFile,$OF_CREATE + $OF_READWRITE)
- If Not ($HFILE1) Or Not ($HFILE2) Then Return -1
- $IMAGE_DOS_HEADER = READ_IMAGE_DOS_HEADER($hFile,0)
- WRITE_IMAGE_DOS_HEADER($HFILE1,0,$IMAGE_DOS_HEADER)
- $MovePos = DllStructGetData($IMAGE_DOS_HEADER,"lfanew")
- $lfanew = $MovePos
- $Signature = READ_Signature($hFile,$MovePos)
- WRITE_Signature($HFILE1,$MovePos,$Signature)
- $MovePos += DllStructGetSize($Signature)
- $IMAGE_FILE_HEADER = READ_IMAGE_FILE_HEADER($hFile,$MovePos)
- WRITE_IMAGE_FILE_HEADER($HFILE1,$MovePos,$IMAGE_FILE_HEADER)
- $MovePos += DllStructGetSize($IMAGE_FILE_HEADER)
- $IMAGE_OPTIONAL_HEADER = READ_IMAGE_OPTIONAL_HEADER($hFile,$MovePos)
- $IMovePos = $MovePos
- WRITE_IMAGE_OPTIONAL_HEADER($HFILE1,$MovePos,$IMAGE_OPTIONAL_HEADER)
- $NumberOfSections = DllStructGetData($IMAGE_FILE_HEADER,"NumberOfSections")
- $MovePos += DllStructGetSize($IMAGE_OPTIONAL_HEADER)
- $JMovePos = $MovePos
- $SizeOfHeaders = DllStructGetData($IMAGE_OPTIONAL_HEADER,"SizeOfHeaders")
- ;SizeOf IMAGE_SECTION_HEADER ==> 40
- $RemainderSize = $SizeOfHeaders - ($MovePos + $NumberOfSections * 40)
- $DataPos = ($MovePos + $NumberOfSections * 40)
- $DataStruct = READ_Data($hFile,$DataPos,$RemainderSize)
- WRITE_Data($HFILE2,$DataPos,$DataStruct)
- $SectIndex = $ImageArray[8][0]
- For $i = 1 To $NumberOfSections
- $IMAGE_SECTION_HEADER = READ_IMAGE_SECTION_HEADER($hFile,$MovePos)
- $PointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
- $SizeOfRawData = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
- $VirtualAddress = DllStructGetData($IMAGE_SECTION_HEADER,"VirtualAddress")
- $XMovePos = $MovePos
- if $i = $SectIndex Then ExitLoop
- WRITE_IMAGE_SECTION_HEADER($HFILE1,$MovePos,$IMAGE_SECTION_HEADER)
- $ByteStruct = READ_SECTION($hFile,$PointerToRawData,$SizeOfRawData)
- WRITE_SECTION($HFILE2,$PointerToRawData,$byteStruct)
- $MovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
- Next
- $StartPos = $PointerToRawData
- $IMAGE_RES_DIR = CRE_IMAGE_RES_DIR()
- $NumberOfNamedEntries = $RtArray[0][9]
- $NumberOfIdEntries = $RtArray[0][8]
- $OffsetToData = GetFirstOffsetToData($NumberOfNamedEntries + $NumberOfIdEntries)
- DllStructSetData($IMAGE_RES_DIR,"NumberOfNamedEntries",$NumberOfNamedEntries)
- DllStructSetData($IMAGE_RES_DIR,"NumberOfIdEntries",$NumberOfIdEntries)
- WRITE_IMAGE_RES_DIR($HFILE2,$StartPos,$IMAGE_RES_DIR)
- $OffsetToData -= 16
- $MovePos = 16
- For $M = 0 To UBound($RtArray) -1
- $TestType = $RtArray[$M][4]
- if $TestType <> True Then ContinueLoop
- $OffsetToData += 16
- $IMAGE_RES_DIR_ENTRY = CRE_IMAGE_RES_ENT()
- $TypeName = $RtArray[$M][0]
- if IsString($TypeName) Then
- $StringName[UBound($StringName) - 1][0] = $TypeName
- $StringName[UBound($StringName) - 1][1] = $MovePos
- ReDim $StringName[UBound($StringName) + 1][2]
- $TestStringName = True
- EndIf
- DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$TypeName)
- DllStructSetData($IMAGE_RES_DIR_ENTRY,"OffsetToData",$OffsetToData)
- WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR_ENTRY)
- $NameInOneType = $RtArray[$M][10] + $RtArray[$M][11]
- $OffsetToData += (8 * $NameInOneType)
- $MovePos += 8
- Next
- For $M = 0 To UBound($RtArray) -1
- $TestType = $RtArray[$M][4]
- $TestName = $RtArray[$M][5]
- If $TestType = True Then
- $IMAGE_RES_DIR = CRE_IMAGE_RES_DIR()
- $NumberOfNamedEntries = $RtArray[$M][10]
- $NumberOfIdEntries = $RtArray[$M][11]
- DllStructSetData($IMAGE_RES_DIR,"NumberOfNamedEntries",$NumberOfNamedEntries)
- DllStructSetData($IMAGE_RES_DIR,"NumberOfIdEntries",$NumberOfIdEntries)
- WRITE_IMAGE_RES_DIR($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR)
- $MovePos += 16
- EndIf
- If $TestName <> True Then ContinueLoop
- $OffsetToData += 16
- $IMAGE_RES_DIR_ENTRY = CRE_IMAGE_RES_ENT()
- $NameName = $RtArray[$M][1]
- if IsString($NameName) Then
- $StringName[UBound($StringName) - 1][0] = $NameName
- $StringName[UBound($StringName) - 1][1] = $MovePos
- ReDim $StringName[UBound($StringName) + 1][2]
- $TestStringName = True
- EndIf
- DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$NameName)
- DllStructSetData($IMAGE_RES_DIR_ENTRY,"OffsetToData",$OffsetToData)
- WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR_ENTRY)
- $LangInOneName = $RtArray[$M][12] + $RtArray[$M][13]
- $OffsetToData += (8 * $LangInOneName)
- $MovePos += 8
- Next
- $OffsetToDirectory = OffsetToDirectory($OffsetToData)
- For $M = 0 To UBound($RtArray) -1
- $TestType = $RtArray[$M][4]
- $TestName = $RtArray[$M][5]
- $TestLang = $RtArray[$M][6]
- if $TestName = True Then
- $IMAGE_RES_DIR = CRE_IMAGE_RES_DIR()
- $NumberOfNamedEntries = $RtArray[$M][12]
- $NumberOfIdEntries = $RtArray[$M][13]
- DllStructSetData($IMAGE_RES_DIR,"NumberOfNamedEntries",$NumberOfNamedEntries)
- DllStructSetData($IMAGE_RES_DIR,"NumberOfIdEntries",$NumberOfIdEntries)
- WRITE_IMAGE_RES_DIR($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR)
- $MovePos += 16
- EndIf
- $OffsetToDirectory += 16
- $OffsetToData += 16
- $IMAGE_RES_DIR_ENTRY = CRE_IMAGE_RES_ENT()
- $LangName = $RtArray[$M][2]
- if IsString($LangName) Then
- $StringName[UBound($StringName) - 1][0] = $LangName
- $StringName[UBound($StringName) - 1][1] = $MovePos
- ReDim $StringName[UBound($StringName) + 1][2]
- $TestStringName = True
- EndIf
- DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$LangName)
- DllStructSetData($IMAGE_RES_DIR_ENTRY,"OffsetToData",$OffsetToDirectory)
- WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DIR_ENTRY)
- $MovePos += 8
- Next
- $OffsetToData += 16
- if $TestStringName = True Then
- ReDim $StringName[UBound($StringName) - 1][3]
- For $i = 0 To UBound($StringName) - 1
- $Name = $StringName[$i][0]
- $Length = StringLen($Name)
- $IMAGE_RESOURCE_DIR_STRING_U = CRE_IMAGE_RES_DIR_STRING_U(0,$Length)
- DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"Length",$Length)
- DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"NameString",$Name)
- $DirEntryMovePos = $StringName[$i][1]
- $IMAGE_RES_DIR_ENTRY = READ_IMAGE_RES_ENT($HFILE2,$StartPos,$DirEntryMovePos)
- DllStructSetData($IMAGE_RES_DIR_ENTRY,"Name",$OffsetToData)
- WRITE_IMAGE_RES_EN($HFILE2,$StartPos + $DirEntryMovePos,$IMAGE_RES_DIR_ENTRY)
- $OffsetToData += DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
- Next
- EndIf
- $FirstDataOffsetToData = OffsetToDirectory($OffsetToData + $ResTablePos_Start)
- For $M = 0 To UBound($RtArray) -1
- $DataSize = $RtArray[$M][3]
- $IMAGE_RES_DAT_ENTRY = CRE_IMAGE_RES_DAT()
- DllStructSetData($IMAGE_RES_DAT_ENTRY,"OffsetToData",$FirstDataOffsetToData)
- DllStructSetData($IMAGE_RES_DAT_ENTRY,"Size",$DataSize)
- WRITE_IMAGE_RES_DAT($HFILE2,$StartPos + $MovePos,$IMAGE_RES_DAT_ENTRY)
- $MovePos += 16
- $FirstDataOffsetToData += $DataSize
- Next
- if $TestStringName = True Then
- For $i = 0 To UBound($StringName) - 1
- $Name = $StringName[$i][0]
- $Length = StringLen($Name)
- $IMAGE_RESOURCE_DIR_STRING_U = CRE_IMAGE_RES_DIR_STRING_U(0,$Length)
- DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"Length",$Length)
- DllStructSetData($IMAGE_RESOURCE_DIR_STRING_U,"NameString",$Name)
- WRITE_StringName($HFILE2,$StartPos + $MovePos,$IMAGE_RESOURCE_DIR_STRING_U)
- $MovePos += DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
- Next
- EndIf
- For $i = 0 To UBound($RtArray) - 1
- $DataOffsetToData = $RtArray[$i][7]
- $DataSize = $RtArray[$i][3]
- $NewRes_BOOL = $RtArray[$i][15]
- if ($NewRes_BOOL) Then
- $hTempFile = $RtArray[0][17]
- $MovePosTemp = $RtArray[$i][19]
- $DataStruct = READ_Data($hTempFile,$MovePosTemp,$DataSize)
- WRITE_Data($HFILE2,$StartPos + $MovePos,$DataStruct)
- Else
- $DataPos = $PosOfResRawData + ($DataOffsetToData - $ResTablePos_Start)
- $DataStruct = READ_Data($hFile,$DataPos,$DataSize)
- WRITE_Data($HFILE2,$StartPos + $MovePos,$DataStruct)
- EndIf
- $MovePos += $DataSize
- Next
- $NewResSize = $MovePos
- $SectionSizeOfAfterRes = ($SectPos_Start + $SectDatSize) - ($PosOfResRawData + $ResDatSize)
- if $SectionSizeOfAfterRes > 0 Then
- $DataPos = $PosOfResRawData + $ResDatSize
- $DatSectionStructOfAfterRes = READ_Data($hFile,$DataPos,$SectionSizeOfAfterRes)
- WRITE_Data($HFILE2,$StartPos + $MovePos,$DatSectionStructOfAfterRes)
- $MovePos += $SectionSizeOfAfterRes
- EndIf
- $NewResSectionSize = $MovePos
- $FileAlignment = DllStructGetData($IMAGE_OPTIONAL_HEADER,"FileAlignment")
- $SectionAlignment = DllStructGetData($IMAGE_OPTIONAL_HEADER,"SectionAlignment")
- $OldPointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
- $OldSizeOfRawData = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
- $OldVirtualSize = DllStructGetData($IMAGE_SECTION_HEADER,"Misc")
- $NewSizeOfRawData = ROUND_UP($NewResSectionSize,$FileAlignment)
- DllStructSetData($IMAGE_SECTION_HEADER,"SizeOfRawData",$NewSizeOfRawData)
- $NewVirtualSize = $NewResSectionSize
- DllStructSetData($IMAGE_SECTION_HEADER,"Misc",$NewVirtualSize)
- $DataDirectory = DllStructGetPtr($IMAGE_OPTIONAL_HEADER,31)
- $IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
- $OutPtr = $DataDirectory + ($IMAGE_DIRECTORY_ENTRY_RESOURCE) * 8
- $IMAGE_DATA_DIRECTORY = CRE_IMAGE_DATA_DIR($OutPtr)
- DllStructSetData($IMAGE_DATA_DIRECTORY,"Size",$NewVirtualSize)
- $PIMAGE_DATA_DIRECTORY = DllStructGetPtr($IMAGE_DATA_DIRECTORY)
- $Size = DllStructGetSize($IMAGE_DATA_DIRECTORY)
- RtlMoveMemory($OutPtr,$PIMAGE_DATA_DIRECTORY,$Size)
- $OldSizeOfImage = DllStructGetData($IMAGE_OPTIONAL_HEADER,"SizeOfImage")
- $NewSizeOfImage = $OldSizeOfImage - ROUND_UP($OldSizeOfRawData,$SectionAlignment) _
- + ROUND_UP($NewSizeOfRawData,$SectionAlignment)
- DllStructSetData($IMAGE_OPTIONAL_HEADER,"SizeOfImage",$NewSizeOfImage)
- $AddressOfEntryPoint = DllStructGetData($IMAGE_OPTIONAL_HEADER,"AddressOfEntryPoint")
- $BaseOfCode = DllStructGetData($IMAGE_OPTIONAL_HEADER,"BaseOfCode")
- $BaseOfData = DllStructGetData($IMAGE_OPTIONAL_HEADER,"BaseOfData")
- If $AddressOfEntryPoint > $VirtualAddress Then
- $AddressOfEntryPoint += $NewVirtualSize - $OldVirtualSize
- DllStructSetData($IMAGE_OPTIONAL_HEADER,"AddressOfEntryPoint",$AddressOfEntryPoint)
- EndIf
- If $BaseOfCode > $VirtualAddress Then
- $BaseOfCode += $NewVirtualSize - $OldVirtualSize
- DllStructSetData($IMAGE_OPTIONAL_HEADER,"BaseOfCode",$BaseOfCode)
- EndIf
- If $BaseOfData > $VirtualAddress Then
- $BaseOfData += $NewVirtualSize - $OldVirtualSize
- DllStructSetData($IMAGE_OPTIONAL_HEADER,"BaseOfData",$BaseOfData)
- EndIf
- WRITE_IMAGE_SECTION_HEADER($HFILE1,$XMovePos,$IMAGE_SECTION_HEADER)
- $XMovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
- $NumberOfRvaAndSizes = DllStructGetData($IMAGE_OPTIONAL_HEADER,"NumberOfRvaAndSizes")
- $XOldPointerToRawData = $OldPointerToRawData
- $XOldSizeOfRawData = $OldSizeOfRawData
- $YNewPointerToRawData = $OldPointerToRawData
- $YNewSizeOfRawData = $NewSizeOfRawData
- For $i = $SectIndex + 1 To $NumberOfSections
- $IMAGE_SECTION_HEADER = READ_IMAGE_SECTION_HEADER($hFile,$XMovePos)
- $XOldPointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
- $XOldSizeOfRawData = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
- $YNewSizeOfRawData = $XOldSizeOfRawData
- $SectionDataStruct = READ_SECTION($hFile,$XOldPointerToRawData,$XOldSizeOfRawData)
- $XOldVirtualAddress = DllStructGetData($IMAGE_SECTION_HEADER,"VirtualAddress")
- $BOOL = False
- For $J = 0 To $NumberOfRvaAndSizes
- $OutPtr = $DataDirectory + ($J * 8)
- $IMAGE_DATA_DIRECTORY = CRE_IMAGE_DATA_DIR($OutPtr)
- $DirOldVirtualAddress = DllStructGetData($IMAGE_DATA_DIRECTORY,"VirtualAddress")
- if $XOldVirtualAddress = $DirOldVirtualAddress Then
- ExitLoop
- $BOOL = True
- EndIf
- Next
- $NewVirtualAddress = $XOldVirtualAddress - _
- ROUND_UP($OldSizeOfRawData,$SectionAlignment) _
- + ROUND_UP($NewSizeOfRawData,$SectionAlignment)
- DllStructSetData($IMAGE_SECTION_HEADER,"VirtualAddress",$NewVirtualAddress)
- if ($BOOL) Then
- DllStructSetData($IMAGE_DATA_DIRECTORY,"VirtualAddress",$NewVirtualAddress)
- $PIMAGE_DATA_DIRECTORY = DllStructGetPtr($IMAGE_DATA_DIRECTORY)
- $Size = DllStructGetSize($IMAGE_DATA_DIRECTORY)
- RtlMoveMemory($OutPtr,$PIMAGE_DATA_DIRECTORY,$Size)
- EndIf
- $NewPointerToRawData = $XOldPointerToRawData - _
- ROUND_UP($OldSizeOfRawData,$FileAlignment) _
- + ROUND_UP($NewSizeOfRawData,$FileAlignment)
- DllStructSetData($IMAGE_SECTION_HEADER,"PointerToRawData",$NewPointerToRawData)
- $YNewPointerToRawData = $NewPointerToRawData
- WRITE_IMAGE_SECTION_HEADER($HFILE1,$XMovePos,$IMAGE_SECTION_HEADER)
- WRITE_SECTION($HFILE2,$NewPointerToRawData,$SectionDataStruct)
- $XMovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
- Next
- WRITE_IMAGE_OPTIONAL_HEADER($HFILE2,$IMovePos,$IMAGE_OPTIONAL_HEADER)
- $RemainderFileSize = $FileSize - $XOldPointerToRawData + $XOldSizeOfRawData
- $RemainderFileDataPos = $ImageSize
- $RemainderFileDataStruct = READ_Data($hFile,$RemainderFileDataPos,$RemainderFileSize)
- WRITE_Data($HFILE2,$YNewPointerToRawData + $YNewSizeOfRawData,$RemainderFileDataStruct)
- _WinAPI_CloseHandle($hFile)
- _WinAPI_CloseHandle($HFILE1)
- _WinAPI_CloseHandle($HFILE2)
- if ($hTempFile) Then
- _WinAPI_CloseHandle($hTempFile)
- $TempFile = $RtArray[0][16]
- FileDelete ($TempFile)
- EndIf
- Return True
- EndFunc
- Func FileToImageArray($sFile)
- Local $nBytes , $hFile , $MovePos , $ImageArray[10][2]
- $FileSize = FileGetSize($sFile)
- $hFile = _WinAPI_CreateFile($sFile, 2, 2)
- If Not ($hFile) Then Return -1
- $ImageArray[0][0] = $hFile
- $ImageArray[0][1] = "File handle"
- $ImageArray[1][0] = $FileSize
- $ImageArray[1][1] = "File Size"
- $IMAGE_DOS_HEADER = READ_IMAGE_DOS_HEADER($hFile,0)
- $Size = DllStructGetSize($IMAGE_DOS_HEADER)
- Local $IMAGE_DOS_SIGNATURE_MAC = 0x4D5A ;C++6 WINNT.H
- Local $IMAGE_DOS_SIGNATURE = 0x5A4D ;C++6 WINNT.H
- if DllStructGetData($IMAGE_DOS_HEADER,"magic") <> $IMAGE_DOS_SIGNATURE_MAC And _
- DllStructGetData($IMAGE_DOS_HEADER,"magic") <> $IMAGE_DOS_SIGNATURE Then Return -2
- $MovePos = DllStructGetData($IMAGE_DOS_HEADER,"lfanew")
- $Signature = READ_Signature($hFile,$MovePos)
- $Size = DllStructGetSize($Signature)
- $IMAGE_NT_SIGNATURE_MAC = 0x00004550 ;C++6 WINNT.H
- $IMAGE_NT_SIGNATURE = 0x50450000 ;C++6 WINNT.H
- if DllStructGetData($Signature,"Signature") <> $IMAGE_NT_SIGNATURE_MAC And _
- DllStructGetData($Signature,"Signature") <> $IMAGE_NT_SIGNATURE Then Return -3
- $MovePos += $Size
- $IMAGE_FILE_HEADER = READ_IMAGE_FILE_HEADER($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_FILE_HEADER)
- $MovePos += $Size
- $IMAGE_OPTIONAL_HEADER = READ_IMAGE_OPTIONAL_HEADER($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_OPTIONAL_HEADER)
- $IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x10b ;C++6 WINNT.H
- $IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x20b ;C++6 WINNT.H
- if DllStructGetData($IMAGE_OPTIONAL_HEADER,"Magic") <> $IMAGE_NT_OPTIONAL_HDR32_MAGIC _
- And DllStructGetData($IMAGE_OPTIONAL_HEADER,"Magic") <> $IMAGE_NT_OPTIONAL_HDR64_MAGIC _
- Then Return -4
- $MovePos += $Size
- Local $byteData = DllStructGetPtr($IMAGE_OPTIONAL_HEADER,31)
- Local $IMAGE_DIRECTORY_ENTRY_RESOURCE = 2
- $byteData += ($IMAGE_DIRECTORY_ENTRY_RESOURCE) * 8
- $IMAGE_DATA_DIRECTORY = CRE_IMAGE_DATA_DIR($byteData)
- Local $ResDatSize = DllStructGetData($IMAGE_DATA_DIRECTORY,"Size")
- Local $ResTablePos_Start = DllStructGetData($IMAGE_DATA_DIRECTORY,"VirtualAddress")
- if ($ResDatSize = 0) Then Return _
- MsgBox(0,"MSG","ResTable Not Find")
- $ImageArray[2][0] = $ResDatSize
- $ImageArray[2][1] = "ResDatSize"
- $ImageArray[3][0] = $ResTablePos_Start
- $ImageArray[3][1] = "ResTablePos_Start"
- $NumberOfSections = DllStructGetData($IMAGE_FILE_HEADER,"NumberOfSections")
- For $i = 1 To $NumberOfSections
- $IMAGE_SECTION_HEADER = READ_IMAGE_SECTION_HEADER($hFile,$MovePos)
- $SectPos_Start = DllStructGetData($IMAGE_SECTION_HEADER,"VirtualAddress")
- $SectDatSize = DllStructGetData($IMAGE_SECTION_HEADER,"SizeOfRawData")
- $PointerToRawData = DllStructGetData($IMAGE_SECTION_HEADER,"PointerToRawData")
- if ($SectDatSize) Then
- $StartPos_Of_ResRawData = IS_DIRECTORY_SECTION( $SectPos_Start _
- ,$SectDatSize _
- ,$PointerToRawData _
- ,$ResTablePos_Start)
- if ($StartPos_Of_ResRawData) Then
- $ImageArray[4][0] = $SectPos_Start
- $ImageArray[4][1] = "SectPos_Start"
- $ImageArray[5][0] = $SectDatSize
- $ImageArray[5][1] = "SectDatSize"
- $ImageArray[6][0] = $PointerToRawData
- $ImageArray[6][1] = "PointerToRawData"
- $ImageArray[7][0] = $StartPos_Of_ResRawData
- $ImageArray[7][1] = "StartPos_Of_ResRawData"
- $SectIndex = $i
- $ImageArray[8][0] = $SectIndex
- $ImageArray[8][1] = "SECTION Index"
- EndIf
- EndIf
- $MovePos += DllStructGetSize($IMAGE_SECTION_HEADER)
- Next
- $ImageSize = $PointerToRawData + $SectDatSize
- $ImageArray[9][0] = $ImageSize
- $ImageArray[9][1] = "Image Size"
- Return $ImageArray
- EndFunc
- Func CRE_IMAGE_SECTION_HEADER($BytePtr = 0)
- Local $IMAGE_SIZEOF_SHORT_NAME = 8
- $Tag = _ ;// IMAGE_SECTION_HEADER C++6 WINNT.H without union
- "byte Name[' & $IMAGE_SIZEOF_SHORT_NAME & '];" & _
- "dword Misc;" & _
- "dword VirtualAddress;" & _
- "dword SizeOfRawData;" & _
- "dword PointerToRawData;" & _
- "dword PointerToRelocations;" & _
- "dword PointerToLinenumbers;" & _
- "ushort NumberOfRelocations;" & _
- "ushort NumberOfLinenumbers;" & _
- "dword Characteristics"
- if ($BytePtr) Then _
- Return MRtlMoveMemory($Tag,$BytePtr,40)
- ;reading the IMAGE_SECTION_HEADER
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func CRE_IMAGE_DATA_DIR($BytePtr = 0)
- Local $Tag = _ ;// IMAGE_DATA_DIRECTORY C++6 WINNT.H
- "dword VirtualAddress;" & _
- "dword Size"
- if ($BytePtr) Then _
- Return MRtlMoveMemory($Tag,$BytePtr,8)
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func CRE_IMAGE_OPTIONAL_HEADER($BytePtr = 0)
- Local $Tag = _ ;// IMAGE_OPTIONAL_HEADER C++6 WINNT.H
- "ushort Magic;" & _
- "ubyte MajorLinkerVersion;" & _
- "ubyte MinorLinkerVersion;" & _
- "dword SizeOfCode;" & _
- "dword SizeOfInitializedData;" & _
- "dword SizeOfUninitializedData;" & _
- "dword AddressOfEntryPoint;" & _
- "dword BaseOfCode;" & _
- "dword BaseOfData;" & _
- "dword ImageBase;" & _
- "dword SectionAlignment;" & _
- "dword FileAlignment;" & _
- "ushort MajorOperatingSystemVersion;" & _
- "ushort MinorOperatingSystemVersion;" & _
- "ushort MajorImageVersion;" & _
- "ushort MinorImageVersion;" & _
- "ushort MajorSubsystemVersion;" & _
- "ushort MinorSubsystemVersion;" & _
- "dword Win32VersionValue;" & _
- "dword SizeOfImage;" & _
- "dword SizeOfHeaders;" & _
- "dword CheckSum;" & _
- "ushort Subsystem;" & _
- "ushort DllCharacteristics;" & _
- "dword SizeOfStackReserve;" & _
- "dword SizeOfStackCommit;" & _
- "dword SizeOfHeapReserve;" & _
- "dword SizeOfHeapCommit;" & _
- "dword LoaderFlags;" & _
- "dword NumberOfRvaAndSizes;" & _
- "byte byteData[128]"
- ; 128 ==> sizeof(IMAGE_DATA_DIRECTORY) * IMAGE_NUMBEROF_DIRECTORY_ENTRIES
- if ($BytePtr) Then _
- Return MRtlMoveMemory($Tag,$BytePtr,224)
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func CRE_IMAGE_FILE_HEADER ($BytePtr = 0)
- $Tag = _ ;//File header format C++6 WINNT.H
- "ushort Machine;" & _
- "ushort NumberOfSections;" & _
- "dword TimeDateStamp;" & _
- "dword PointerToSymbolTable;" & _
- "dword NumberOfSymbols;" & _
- "ushort SizeOfOptionalHeader;" & _
- "ushort Characteristics"
- if ($BytePtr) Then _
- Return MRtlMoveMemory($Tag,$BytePtr,20) ;reading the File header format
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func CRE_IMAGE_DOS_HEADER($BytePtr = 0)
- $Tag = _ ;// DOS .EXE header C++6 WINNT.H
- "ushort magic;" & _ ;// Magic number
- "ushort cblp;" & _ ;// Bytes on last page of file
- "ushort cp;" & _ ;// Pages in file
- "ushort crlc;" & _ ;// Relocations
- "ushort cparhdr;" & _ ;// Size of header in paragraphs
- "ushort minalloc;" & _ ;// Minimum extra paragraphs needed
- "ushort maxalloc;" & _ ;// Maximum extra paragraphs needed
- "ushort ss;" & _ ;// Initial (relative) SS value
- "ushort sp;" & _ ;// Initial SP value
- "ushort csum;" & _ ;// Checksum
- "ushort ip;" & _ ;// Initial IP value
- "ushort cs;" & _ ;// Initial (relative) CS value
- "ushort lfarlc;" & _ ;// File address of relocation table
- "ushort ovno;" & _ ;// Overlay number
- "ushort res[4];" & _ ;// Reserved words
- "ushort oemid;" & _ ;// OEM identifier (for e_oeminfo)
- "ushort oeminfo;" & _ ;// OEM information; e_oemid specific
- "ushort res2[10];" & _ ;// Reserved words
- "dword lfanew" ;// File address of new e
- if ($BytePtr) Then _
- Return MRtlMoveMemory($Tag,$BytePtr,64) ;reading the dos header
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func CRE_IMAGE_RES_DIR($BytePtr = 0 , $Entries = 0)
- $Tag = _
- "dword Characteristics;" & _
- "dword TimeDateStamp;" & _
- "ushort MajorVersion;" & _
- "ushort MinorVersion;" & _
- "ushort NumberOfNamedEntries;" & _
- "ushort NumberOfIdEntries"
- if ($BytePtr) Then
- $Struct = DllStructCreate($Tag,$BytePtr)
- $Entries = DllStructGetData($Struct,"NumberOfIdEntries") _
- + DllStructGetData($Struct,"NumberOfNamedEntries")
- $Tag &= ";byte byteData[' & $Entries * 8 & ']"
- ;Entries * Sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)
- Return DllStructCreate($Tag,$BytePtr) ;Create
- Else
- if $Entries = 0 Then Return DllStructCreate($Tag) ;Create
- $Tag &= ";byte byteData[' & $Entries * 8 & ']"
- ;Entries * Sizeof(IMAGE_RESOURCE_DIRECTORY_ENTRY)
- Return DllStructCreate($Tag) ;Create
- EndIf
- EndFunc
- Func CRE_IMAGE_RES_ENT($BytePtr = 0)
- $Tag = _ ;C++6 WINNT.H without union
- "DWORD Name;" & _
- "DWORD OffsetToData"
- if ($BytePtr) Then Return DllStructCreate($Tag,$BytePtr)
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func CRE_IMAGE_RES_DAT($BytePtr = 0)
- $Tag = _
- "DWORD OffsetToData;" & _
- "DWORD Size;" & _
- "DWORD CodePage;" & _
- "DWORD Reserved"
- if ($BytePtr) Then Return DllStructCreate($Tag,$BytePtr)
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func CRE_IMAGE_RES_DIR_STRING_U($BytePtr = 0,$Length = 0)
- Local $FILENAME_MAX = 260
- if $Length = 0 Then $Length = $FILENAME_MAX
- $Tag = "ushort Length;wchar NameString['& $Length & ']";C++6 WINNT.H
- if ($BytePtr) Then Return DllStructCreate($Tag,$BytePtr)
- Return DllStructCreate($Tag) ;Create
- EndFunc
- Func ReadStringName($Name,$hFile,$StartPos_Of_ResRawData)
- Local $nBytes
- $NameOffset = NameOffset($Name)
- $MovePos = $StartPos_Of_ResRawData + $NameOffset
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_RESOURCE_DIR_STRING_U = CRE_IMAGE_RES_DIR_STRING_U()
- $PIMAGE_RESOURCE_DIR_STRING_U = DllStructGetPtr($IMAGE_RESOURCE_DIR_STRING_U)
- $Size = DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
- _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DIR_STRING_U,$Size,$nBytes)
- $Length = DllStructGetData($IMAGE_RESOURCE_DIR_STRING_U,"Length")
- $NameString = DllStructGetData($IMAGE_RESOURCE_DIR_STRING_U,"NameString")
- Return StringLeft($NameString, $Length)
- EndFunc
- Func WRITE_StringName($hFile,$MovePos,$IMAGE_RESOURCE_DIR_STRING_U)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_RESOURCE_DIR_STRING_U)
- $PIMAGE_RESOURCE_DIR_STRING_U = DllStructGetPtr($IMAGE_RESOURCE_DIR_STRING_U)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DIR_STRING_U,$Size,$nBytes)
- EndFunc
- Func READ_SECTION($hFile,$MovePos,$Size)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $byteStruct = DllStructCreate("byte[' & $Size & ']")
- $byteStructPtr = DllStructGetPtr($byteStruct)
- _WinAPI_ReadFile($hFile,$byteStructPtr,$Size,$nBytes)
- Return $byteStruct
- EndFunc
- Func WRITE_SECTION($hFile,$MovePos,$byteStruct)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($byteStruct)
- $byteStructPtr = DllStructGetPtr($byteStruct)
- _WinAPI_WriteFile($hFile,$byteStructPtr,$Size,$nBytes)
- EndFunc
- Func READ_Data($hFile,$MovePos,$Size)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $byteStruct = DllStructCreate("char[' & $Size & ']")
- $byteStructPtr = DllStructGetPtr($byteStruct)
- _WinAPI_ReadFile($hFile,$byteStructPtr,$Size,$nBytes)
- Return $byteStruct
- EndFunc
- Func WRITE_Data($hFile,$MovePos,$byteStruct)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($byteStruct)
- $byteStructPtr = DllStructGetPtr($byteStruct)
- _WinAPI_WriteFile($hFile,$byteStructPtr,$Size,$nBytes)
- EndFunc
- Func READ_IMAGE_DOS_HEADER($hFile,$MovePos)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_DOS_HEADER = CRE_IMAGE_DOS_HEADER()
- $Size = DllStructGetSize($IMAGE_DOS_HEADER)
- $PIMAGE_DOS_HEADER = DllStructGetPtr($IMAGE_DOS_HEADER)
- _WinAPI_ReadFile($hFile,$PIMAGE_DOS_HEADER,$Size,$nBytes)
- Return $IMAGE_DOS_HEADER
- EndFunc
- Func WRITE_IMAGE_DOS_HEADER($hFile,$MovePos,$IMAGE_DOS_HEADER)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_DOS_HEADER)
- $PIMAGE_DOS_HEADER = DllStructGetPtr($IMAGE_DOS_HEADER)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_DOS_HEADER,$Size,$nBytes)
- EndFunc
- Func READ_Signature($hFile,$MovePos)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Tag_Signature = "dword Signature"
- $Signature = DllStructCreate($Tag_Signature)
- $PSignature = DllStructGetPtr($Signature)
- $Size = DllStructGetSize($Signature)
- _WinAPI_ReadFile($hFile,$PSignature,$Size,$nBytes)
- Return $Signature
- EndFunc
- Func WRITE_Signature($hFile,$MovePos,$Signature)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($Signature)
- $PSignature = DllStructGetPtr($Signature)
- Return _WinAPI_WriteFile($hFile,$PSignature,$Size,$nBytes)
- EndFunc
- Func READ_IMAGE_FILE_HEADER($hFile,$MovePos)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_FILE_HEADER = CRE_IMAGE_FILE_HEADER()
- $Size = DllStructGetSize($IMAGE_FILE_HEADER)
- $PIMAGE_FILE_HEADER = DllStructGetPtr($IMAGE_FILE_HEADER)
- _WinAPI_ReadFile($hFile,$PIMAGE_FILE_HEADER,$Size,$nBytes)
- Return $IMAGE_FILE_HEADER
- EndFunc
- Func WRITE_IMAGE_FILE_HEADER($hFile,$MovePos,$IMAGE_FILE_HEADER)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_FILE_HEADER)
- $PIMAGE_FILE_HEADER = DllStructGetPtr($IMAGE_FILE_HEADER)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_FILE_HEADER,$Size,$nBytes)
- EndFunc
- Func READ_IMAGE_OPTIONAL_HEADER($hFile,$MovePos)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_OPTIONAL_HEADER = CRE_IMAGE_OPTIONAL_HEADER()
- $Size = DllStructGetSize($IMAGE_OPTIONAL_HEADER)
- $PIMAGE_OPTIONAL_HEADER = DllStructGetPtr($IMAGE_OPTIONAL_HEADER)
- _WinAPI_ReadFile($hFile,$PIMAGE_OPTIONAL_HEADER,$Size,$nBytes)
- Return $IMAGE_OPTIONAL_HEADER
- EndFunc
- Func WRITE_IMAGE_OPTIONAL_HEADER($hFile,$MovePos,$IMAGE_OPTIONAL_HEADER)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_OPTIONAL_HEADER)
- $PIMAGE_OPTIONAL_HEADER = DllStructGetPtr($IMAGE_OPTIONAL_HEADER)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_OPTIONAL_HEADER,$Size,$nBytes)
- EndFunc
- Func READ_IMAGE_SECTION_HEADER($hFile,$MovePos)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_SECTION_HEADER = CRE_IMAGE_SECTION_HEADER()
- $Size = DllStructGetSize($IMAGE_SECTION_HEADER)
- $PIMAGE_SECTION_HEADER = DllStructGetPtr($IMAGE_SECTION_HEADER)
- _WinAPI_ReadFile($hFile,$PIMAGE_SECTION_HEADER,$Size,$nBytes)
- Return $IMAGE_SECTION_HEADER
- EndFunc
- Func WRITE_IMAGE_SECTION_HEADER($hFile,$MovePos,$IMAGE_SECTION_HEADER)
- Local $nBytes
- if $MovePos <> 0 Then _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_SECTION_HEADER)
- $PIMAGE_SECTION_HEADER = DllStructGetPtr($IMAGE_SECTION_HEADER)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_SECTION_HEADER,$Size,$nBytes)
- EndFunc
- Func READ_IMAGE_RES_DIR($hFile,$StartPos_Of_ResRawData , $OffsetToDirectory)
- Local $nBytes
- $MovePos = $StartPos_Of_ResRawData + $OffsetToDirectory
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_RESOURCE_DIRECTORY = CRE_IMAGE_RES_DIR()
- $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
- $ISize = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY)
- _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DIRECTORY,$ISize,$nBytes)
- Return $IMAGE_RESOURCE_DIRECTORY
- EndFunc
- Func WRITE_IMAGE_RES_DIR($hFile,$MovePos,$IMAGE_RESOURCE_DIRECTORY)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY)
- $PIMAGE_RESOURCE_DIRECTORY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DIRECTORY,$Size,$nBytes)
- EndFunc
- Func READ_IMAGE_RES_ENT($hFile,$StartPos_Of_ResRawData ,$OffsetToDirectory)
- Local $nBytes
- $MovePos = $StartPos_Of_ResRawData + $OffsetToDirectory
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_RESOURCE_DIRECTORY_ENTRY = CRE_IMAGE_RES_ENT()
- $PIMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $ISize = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY_ENTRY)
- _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DIRECTORY_ENTRY,$ISize,$nBytes)
- Return $IMAGE_RESOURCE_DIRECTORY_ENTRY
- EndFunc
- Func WRITE_IMAGE_RES_EN($hFile,$MovePos,$IMAGE_RESOURCE_DIRECTORY_ENTRY)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_RESOURCE_DIRECTORY_ENTRY)
- $PIMAGE_RESOURCE_DIRECTORY_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DIRECTORY_ENTRY)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DIRECTORY_ENTRY,$Size,$nBytes)
- EndFunc
- Func READ_IMAGE_RES_DAT($hFile,$StartPos_Of_ResRawData , $OffsetToDirectory)
- Local $nBytes
- $MovePos = $StartPos_Of_ResRawData + $OffsetToDirectory
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $IMAGE_RESOURCE_DATA_ENTRY = CRE_IMAGE_RES_DAT()
- $PIMAGE_RESOURCE_DATA_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DATA_ENTRY)
- $ISize = DllStructGetSize($IMAGE_RESOURCE_DATA_ENTRY)
- _WinAPI_ReadFile($hFile,$PIMAGE_RESOURCE_DATA_ENTRY,$ISize,$nBytes)
- Return $IMAGE_RESOURCE_DATA_ENTRY
- EndFunc
- Func WRITE_IMAGE_RES_DAT($hFile,$MovePos,$IMAGE_RESOURCE_DATA_ENTRY)
- Local $nBytes
- _WinAPI_SetFilePointer($hFile,$MovePos)
- $Size = DllStructGetSize($IMAGE_RESOURCE_DATA_ENTRY)
- $PIMAGE_RESOURCE_DATA_ENTRY = DllStructGetPtr($IMAGE_RESOURCE_DATA_ENTRY)
- Return _WinAPI_WriteFile($hFile,$PIMAGE_RESOURCE_DATA_ENTRY,$Size,$nBytes)
- EndFunc
- Func OffsetToDirectory($RESOURCE_DWORD_OffsetToData)
- Local $MAXLONG = 0x7fffffff ;C++6 WINNT.H
- Return int(BitAND(int($RESOURCE_DWORD_OffsetToData),int($MAXLONG))) ;;Return OffsetToDirectory
- EndFunc
- Func NameOffset($RESOURCE_DWORD_Name)
- Local $MAXLONG = 0x7fffffff ;C++6 WINNT.H
- Return int(BitAND(int($RESOURCE_DWORD_Name),int($MAXLONG))) ;Return NameOffset
- EndFunc
- Func DataIsDirectory($RESOURCE_DWORD_OffsetToData)
- Local $IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000 ;C++6 WINNT.H
- Return int(BitAND(int($RESOURCE_DWORD_OffsetToData) , int($IMAGE_RESOURCE_DATA_IS_DIRECTORY))) <> 0 ;Return BOOL
- EndFunc
- Func NameIsString($RESOURCE_DWORD_Name)
- Local $IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000 ;C++6 WINNT.H
- Return int(BitAND(int($RESOURCE_DWORD_Name) , int($IMAGE_RESOURCE_NAME_IS_STRING))) <> 0 ;Return BOOL
- EndFunc
- Func IS_DIRECTORY_SECTION($SECTION_VirtualAddress _
- ,$SECTION_SizeOfRawData _
- ,$SECTION_PointerToRawData _
- ,$DIRECTORY_VirtualAddress)
- $SectPos_Start = $SECTION_VirtualAddress ; SECTION Pos Start
- $SectDatSize = $SECTION_SizeOfRawData ; SECTION Pos Size
- $SectPos_End = $SectPos_Start + $SectDatSize ; SECTION Pos End
- $DirData_Pos_Start = $DIRECTORY_VirtualAddress ; DIRECTORY Pos Start
- $PointerToRawData = $SECTION_PointerToRawData ;SECTION PointerToRawData
- if ($SectPos_Start <= $DirData_Pos_Start) And ($DirData_Pos_Start <= $SectPos_End) Then
- Return (($DirData_Pos_Start - $SectPos_Start) + $PointerToRawData) ;Return Start Pos Of DIRECTORY In RawData
- Else
- Return 0 ;Return 0
- EndIf
- EndFunc
- Func GetFirstOffsetToData($TypeEntries)
- Local $MAXLONG = 0x7fffffff
- $FirstOffsetToDirectory = $TypeEntries * 8 + 16
- $FirstOffsetToData = int($MAXLONG) + $FirstOffsetToDirectory + 1
- Return $FirstOffsetToData
- EndFunc
- Func ROUND_UP($number, $alignment)
- Return int(BitAND((($number) + (($alignment) - 1)) , _
- (BitNOT(($alignment) - 1))))
- EndFunc
- Func RtlMoveMemory($sourcePtr,$destPtr,$MovePos)
- DllCall("Kernel32.dll","none","RtlMoveMemory","ptr",$sourcePtr,"ptr",$destPtr,"dword",$MovePos)
- EndFunc
- Func MRtlMoveMemory($Tag_Struct,$Ptr,$MovePos)
- $Struct = DllStructCreate($Tag_Struct)
- $StructPtr = DllStructGetPtr($Struct)
- DllCall("Kernel32.dll","none","RtlMoveMemory","ptr",$StructPtr,"ptr",$Ptr,"dword",$MovePos)
- Return $Struct
- EndFunc
- Func WINAPIOpenFile($lpFileName,$uStyle)
- $Tag_OFSTRUCT = _
- "byte cBytes;" & _
- "byte fFixedDisk;" & _
- "ushort nErrCode;" & _
- "ushort Reserved1;" & _
- "ushort Reserved2;" & _
- "char szPathName[260]"
- $OFSTRUCT = DllStructCreate($Tag_OFSTRUCT)
- $lpReOpenBuff = DllStructGetPtr($OFSTRUCT)
- $HFILE = DllCall("Kernel32.dll","hwnd","OpenFile","str",$lpFileName,"ptr",$lpReOpenBuff,"long",$uStyle)
- if Not @error Then Return $HFILE[0]
- Return 0
- EndFunc
PHP كود المصدر
- #Include "AutoitResHacker.au3"
- #Include <Array.au3>
- $ImageArray = BeginUpdateResource("ComPile_No_UPX.exe","OutFile.exe")
- $Tex = ""
- For $i = 100 To 130
- $Tex &= $i
- $Struct = DllStructCreate("char[' & StringLen($Tex) & ']")
- DllStructGetData($Struct,$Tex)
- $Data_Size = DllStructGetSize($Struct)
- $Data_Ptr = DllStructGetPtr($Struct)
- $ImageArray = UpdateResource($ImageArray,$i,"ResName",$i,$Data_Ptr,$Data_Size)
- Next
- $Tex = ""
- For $i = 130 To 160
- $Tex &= $i
- $Struct = DllStructCreate("char[' & StringLen($Tex) & ']")
- DllStructGetData($Struct,$Tex)
- $Data_Size = DllStructGetSize($Struct)
- $Data_Ptr = DllStructGetPtr($Struct)
- $ImageArray = UpdateResource($ImageArray,"ResType",$i,$i,$Data_Ptr,$Data_Size)
- Next
- $Tex = ""
- For $i = 160 To 190
- $Tex &= $i
- $Struct = DllStructCreate("char[' & StringLen($Tex) & ']")
- DllStructGetData($Struct,$Tex)
- $Data_Size = DllStructGetSize($Struct)
- $Data_Ptr = DllStructGetPtr($Struct)
- $ImageArray = UpdateResource($ImageArray,160,160,$i,$Data_Ptr,$Data_Size)
- Next
- EndUpdateResource($ImageArray)
- $ListArray = ResourceList("OutFile.exe")
- _ArrayDisplay($ListArray,"OutFile.exe")
PHP كود المصدر
- #Include "AutoitResHacker.au3"
- #include <GUIConstant***.au3>
- #include <WindowsConstants.au3>
- #include <ButtonConstants.au3>
- #include <StaticConstants.au3>
- Dim $SS_REALSIZEIMAGE = 0x00000800 , $RT_BITMAP = 2
- FileUpdateResource("ComPile_No_UPX.exe","AutoitImage.PNG","PNG","Autoit",0,"OutFile3.exe")
- $RtArray = LoadImageFromFreeResourc("OutFile3.exe","PNG","Autoit",0)
- $HBITMAP = $RtArray[1][1]
- $hGUI = GUICreate(" My GUI Bitmap", $RtArray[1][4] + 20 , $RtArray[1][5] + 20)
- $Pic1 = GUICtrlCreateLabel("", 10, 10,$RtArray[1][4], $RtArray[1][5],$WS_BORDER + $SS_CENTERIMAGE + $SS_REALSIZEIMAGE)
- STATIC_SETBITMAP($Pic1,$HBITMAP)
- GUISetState()
- While 1
- $msg = GUIGetMsg()
- If $msg = $GUI_EVENT_CLOSE Then ExitLoop
- WEnd
- GUIDelete()
- Exit
- Func LoadImageFromFreeResourc($ExeFile_DllFile , _
- $ResType,$ResName,$ResLang,$GDIPlus_ShutDown = True)
- ; $GDIP_IMAGETYPE_BITMAP - Bitmap types: BMP, PNG, GIF, JPEG, TIFF, ICO, EXIF [Return HBITMAP Handle AND imageobject[Bitmap Handle]]
- ;$GDIP_IMAGETYPE_METAFILE - Metafile types: EMF, WMF [Return HENHMETAFILE Handle (AND\OR) imageobject]
- ;$GDIP_IMAGETYPE_UNKNOWN [Return new object]
- Local $FindResource = FindResourceExW($ExeFile_DllFile,$ResType,$ResName,$ResLang)
- if $FindResource == 0 Then Return -1
- Local $SizeofResource = SizeofResource($FindResource)
- if $SizeofResource == 0 Then Return -2
- Local $LoadResource = LoadResource($FindResource)
- if $LoadResource == 0 Then Return -2
- Local $LockResource = LockResource($LoadResource)
- if $LockResource == 0 Then Return -3
- FindRes_CloseHandle($FindResource)
- Local $uFlags = 0x0002 , $dwBytes = $SizeofResource
- Local $hMemory = DllCall("Kernel32.dll","hwnd","GlobalAlloc","long",$uFlags,"long",$dwBytes)
- if @error Then
- Return -4
- Else
- $hMemory = $hMemory[0]
- if $hMemory = 0 Then Return -4
- EndIf
- Local $hLock = DllCall("Kernel32.dll","ptr","GlobalLock","hwnd",$hMemory)
- if @error Then
- Return -5
- Else
- $hLock = $hLock[0]
- if $hLock = 0 Then Return -5
- EndIf
- Local $Destination = $hLock , $Source = $LockResource, $Length = $SizeofResource
- DllCall("Kernel32.dll","none","RtlMoveMemory","ptr",$Destination,"ptr",$Source,"long",$Length)
- if @error Then
- Return -6
- EndIf
- Local $fDeleteOnRelease = True , $Status , $ppstm , $Error
- Local $Error = DllCall("Ole32.dll","int","CreateStreamOnHGlobal","ptr",$hLock ,"int",$fDeleteOnRelease,"ptr*",0)
- if @error Then
- Return -7
- Else
- if Not ($Error[0] = 0) Then Return -7
- $ppstm = $Error[3]
- EndIf
- Local $gdiplusOpen = DllOpen("gdiplus.dll")
- Local $ImageType = 0 , $ImageWidth = 0 ,$ImageHeight = 0 , $struct_GdiplusStartupInput , $Input , $LPInput , $VOID _
- , $LPVOID_token , $Status , $HBITMAP , $HENHMETAFILE , $GdiPlus_Dll_Hwnd , $GdiPlus_Token
- $struct_GdiplusStartupInput = _
- "int GdiplusVersion;" & _
- "int DebugEventCallback;" & _
- "int SuppressBackgroundThread;" & _
- "int Suppres***ternalCodecs;"
- $Input = DllStructCreate($struct_GdiplusStartupInput)
- DllStructSetData($Input,"GdiplusVersion",1)
- DllStructSetData($Input,"DebugEventCallback",0)
- DllStructSetData($Input,"SuppressBackgroundThread",0)
- DllStructSetData($Input,"Suppres***ternalCodecs",0)
- $LPInput = DllStructGetPtr($Input)
- $VOID = DllStructCreate("int")
- $LPVOID_token = DllStructGetPtr($VOID)
- $Status = DllCall($gdiplusOpen,"int","GdiplusStartup","ptr",$LPVOID_token,"ptr",$LPInput,"ptr",0)
- if @error Then
- Return -8
- Else
- if Not ($Status[0] = 0) Then Return -8
- $LPVOID_token = $Status[1]
- EndIf
- Local $stream = $ppstm , $image = 0
- $Status = DllCall($gdiplusOpen,"int","GdipLoadImageFromStream","ptr",$stream,"int*",$image)
- if @error Then
- Return -9
- Else
- if Not ($Status[0] = 0) Then Return -9
- $image = $Status[2]
- EndIf
- $Status = DllCall($gdiplusOpen,"int","GdipGetImageWidth","hwnd",$image,"int*",0)
- if Not @error Then
- if $Status[0] = 0 Then $ImageWidth = $Status[2]
- EndIf
- $Status = DllCall($gdiplusOpen,"int","GdipGetImageHeight","hwnd",$image,"int*",0)
- if Not @error Then
- if $Status[0] = 0 Then $ImageHeight = $Status[2]
- EndIf
- $Status = DllCall($gdiplusOpen,"int","GdipGetImageType","hwnd",$image,"int*",0)
- if Not @error Then
- Local $Case = $Status[2]
- Select
- Case $Case = 0
- $ImageType = "ImageTypeUnknown"
- Case $Case = 1
- $ImageType = "ImageTypeBitmap"
- $Status = DllCall($gdiplusOpen, "int", "GdipCreateHBITMAPFromBitmap", "hwnd", $image, "int*", 0, "int", 0)
- if Not @error Then
- if ($Status[0] = 0) Then $HBITMAP = $Status[2]
- EndIf
- Case $Case = 2
- $ImageType = "ImageTypeMetafile"
- Local $metafile = $image
- $Status = DllCall($gdiplusOpen,"int","GdipGetHemfFromMetafile","hwnd",$metafile,"int*",0)
- if Not @error Then
- if ($Status[0] = 0) Then $HENHMETAFILE = $Status[2]
- EndIf
- EndSelect
- EndIf
- if $GDIPlus_ShutDown = True Then
- DllCall($gdiplusOpen,"int","GdiplusShutdown","ptr",$LPVOID_token)
- DllClose($gdiplusOpen)
- $GdiPlus_Dll_Hwnd = 0
- $GdiPlus_Token = 0
- Else
- $GdiPlus_Dll_Hwnd = $gdiplusOpen
- $GdiPlus_Token = $LPVOID_token
- EndIf
- Dim $RtArray[2][8]
- $RtArray[0][0] = "imageobject"
- $RtArray[0][1] = "HBITMAP"
- $RtArray[0][2] = "HENHMETAFILE"
- $RtArray[0][3] = "ImageType"
- $RtArray[0][4] = "ImageWidth"
- $RtArray[0][5] = "ImageHeight"
- $RtArray[0][6] = "GdiPlus Dll Hwnd "
- $RtArray[0][7] = "GdiPlus Token"
- $RtArray[1][0] = $image
- $RtArray[1][1] = $HBITMAP
- $RtArray[1][2] = $HENHMETAFILE
- $RtArray[1][3] = $ImageType
- $RtArray[1][4] = $ImageWidth
- $RtArray[1][5] = $ImageHeight
- $RtArray[1][6] = $GdiPlus_Dll_Hwnd
- $RtArray[1][7] = $GdiPlus_Token
- return $RtArray
- EndFunc
- Func FileUpdateResource($ExeFile_DllFile,$FileIn,$ResType,$ResName,$ResLang,$OutFile = "OutFile.exe")
- Local $nBytes ,$tSize ,$DataStruct ,$hFile , $tBuffer
- $hFile = _WinAPI_CreateFile($FileIn, 2,2)
- if Not $hFile Then Return -1
- $tSize = FileGetSize($FileIn) + 1
- $DataStruct = DllStructCreate("char[' & $tSize & ']")
- _WinAPI_ReadFile($hFile, DllStructGetPtr($DataStruct), $tSize, $nBytes)
- if @error Then
- _WinAPI_CloseHandle($hFile)
- return -2
- EndIf
- _WinAPI_CloseHandle($hFile)
- $ImageArray = BeginUpdateResource($ExeFile_DllFile,$OutFile)
- if Not IsArray($ImageArray) Then Return -3
- $Data_Size = DllStructGetSize($DataStruct)
- $Data_Ptr = DllStructGetPtr($DataStruct)
- $ImageArray = UpdateResource($ImageArray,$ResType,$ResName,$ResLang,$Data_Ptr,$Data_Size)
- if Not IsArray($ImageArray) Then Return -4
- Return EndUpdateResource($ImageArray)
- EndFunc
- Func STATIC_SETBITMAP($hWnd,$HandleImage)
- Local $GWL_STYLE = (-16) , $SS_BITMAP = 0x0000000E , $SS_ICON = 0x00000003 ,$STM_SETIMAGE = 0x0172
- If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
- if Not BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $SS_BITMAP) = $SS_BITMAP Then
- _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) + $SS_BITMAP )
- ElseIf BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_STYLE), $SS_ICON) = $SS_ICON Then
- _WinAPI_SetWindowLong($hWnd, $GWL_STYLE, _WinAPI_GetWindowLong($hWnd, $GWL_STYLE) - $SS_ICON)
- EndIf
- Return _SendMessage($hWnd, $STM_SETIMAGE, 0, $HandleImage)
- EndFunc