Obfuscator streikt bei zu vielen Zeichen...

  • Hallo werte AutoIt Community,

    ich schreibe derzeit ein kleines Tool um mich etwas mit AutoIt etwas auseinanderzusetzen.

    Eigentlich bin ich mit dem was ich erstellt habe auch schon recht zufrieden - jedoch würde ich gern den Code mittels des Obfuscator etwas verschlüsseln (wenn man es denn so nennen kann). Anfangs war dies kein Problem - er hatte seinen Dienst reibungslos gemacht.

    Später baute ich in mein Skript eine SplashImageOn Funktion ein damit ich mir, bevor die eigentliche GUI aufgeht, einfach eine Art Bootlogo (wie man es von vielen Programmen kennt) anzeigt. Da es einige Möglichkeiten gab wie genau mit dem Bild verfahren wird hab ich mich zum Schluß für den Weg entschieden, dass Bild über Binärcode einzufügen.

    Das ganze funktioniert auch wunderbar. Nur jeder der soetwas mal gemacht hat weiß, dass selbst ein kleines Bild mal schnell sehr viele Zeilen an Code füllen kann. Aus meinem Bild sind mal eben 72 Zeilen reiner Binärcode entstanden (was mich beim skripten nicht sonderlich stört).

    Jedoch scheint der Obfuscator mit der länger einer jeweiligen Zeile Probleme zu haben. Ich habe, wie erwähnt, 72 Zeilen. Jede einzelne hat eine Länge des folgenden Beispiels:

    Spoiler anzeigen
    [autoit]

    $data1 &= "0xFFD8FFE112244578696600004D4D002A000000080007011200030000000100010000011A00050000000100000062011B0005000000010000006A012800030000000100020000013100020000001C0000007201320002000000140000008E8769000400000001000000A4000000D0000AFC8000002710000AFC800000271041646F62652050686F746F73686F70204353352057696E646F777300323031313A30323A30392031343A35303A34390000000003A00100030000000100010000A00200040000000100000237A003000400000001000000FD0000000000000006010300030000000100060000011A0005000000010000011E011B0005000000010000012601280003000000010002000002010004000000010000012E0202000400000001000010EE0000000000000048000000010000004800000001FFD8FFED000C41646F62655F434D0001FFEE000E41646F626500648000000001FFDB0084000C08080809080C09090C110B0A0B11150F0C0C0F1518131315131318110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C010D0B0B0D0E0D100E0E10140E0E0E14140E0E0E0E14110C0C0C0C0C11110C0C0C0C0C0C110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CFFC0001108004700A003012200021101031101FFDD0004000AFFC4013F0000010501010101010100000000000000030001020405060708090A0B0100010501010101010100000000000000010002030405060708090A0B1000010401030204020507060805030C33010002110304211231054151611322718132061491A1B14223241552C16233347282D14307259253F0E1F163733516A2B283264493546445C2A3743617D255E265F2B384C3D375E3F3462794A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F637475767778797A7B7C7D7E7F711000202010204040304050607070605350100021103213112044151617122130532819114A1B14223C152D1F0332462E1728292435315637334F1250616A2B283072635C2D2449354A317644555367465E2F2B384C3D375E3F34694A485B495C4D4E4F4A5B5C5D5E5F55666768696A6B6C6D6E6F62737475767778797A7B7C7FFDA000C03010002110311003F00F3FA5930AF57588955685A1409D1382166D25CE0D68973886B5A39249DAD1FE72365E05B8777A578024B832C690EADFB5C6B79A6D6FB1FB2C6FA7637F9CAACF65AAD74935D5D670ACB06E6536FAE5BFBDE835F96C67F6ECA18C54712ACF654F732E0E0483754E707B2DB0807F9AB439AEBB6FF0084D8CF657FCE2708DA09A5FD20537A01573D5035AF73BECDB87F36C6B5D07C7DDEAB7FF334F4F552F3B1E716AEE6CDA1C207F26DB1E952AD31AAB1C9088302F7B77329796FEF91B5BFF6E59B2BFF00A4AB59D51D6D4C7635EF659C594D3B59A8FA4FFD1358FF0041E998F1B8BECA8BDD66AEDEE71786687D9FCE786F7ED4E010D83854B007E4E663E3B0E80B4BF21C7FAADC265D57FE0E99CEE8957032F35C3423F4586CF0F67FCA76D9FF0081ACDC9BFD3B880E22B23D8D77B46D24C1687FBF621B6DF51D12DB4413B40970FF003136C6CA75DB5F46B9C1B55F938AF3DAFA997B3FF62311F4DDEEFF00C2097D8377F317E364CF02BB431FFF006C668C4BFF00F03590ECAA0BB9826403BB43FD6649DA9ACB6A76DDCF6B801F409047F5794AC2A9D3BB16DA74BAA7D51FBED207F9C7DAAB96B0F041F821E0D9638B28C5BAD6BA080CC72EDC7977F374FD245C8EB0F803757690209BD95D8EFE56F3B3D4FF00A496956A606B0A2E604ECEA54B86D3562EF3C39CD7B47FD0B98D6FF6D43F69496FA74E3B5C741B6BF5093F9BB5B73B23FEA12B0A4F4F4EC9BF16DCC6340C7A58E7EF718DE18582D6E3B7E95FE8FA9BEFD9FA3A7FC23D562C0AF747CB7DFD629195639FF6A63F0EC2F325ACBEBB71B6B7E8B195EEB7F9B54E997D4D279204FDC885217B211BA2B63AE74EFF00C3747FE7DAD27B3445E90D8EB5D3FF00F0DE3FFE7DAD0290FF00FFD0E0E81C2BF5EE1C68A951D968D2D046BCA70425C7B28AF369B324B9B44B996BD860B058C7D1EAFF005697D9EABFF7EB62CA345F5BC5990E6D6E6EEA9FDDA0B7F44E66D12B4ACAC1690553C9AED14372CCED717636FE65D536B71709FA2FF43231D9FD8F53E9A70282EE7D4DEB79E3AFE3D197903230F29DB1F53ABADD5876D7318EAEBDBB68755B1BFCCB58BA8FAC9F590748A313ECBD331B33ED6E7B2A6DED60731EC31B995575FB98F6FEF58CFF00BE2E27EAA3AEAFAEE139A4DC3D5125825DA35EEDB07FF562DDFAE355B8D83876E6B9D597E5E583680D7901CEB5F8BE9EAD7FBBD47EDFFD19E9A900F4DAD275A747A675AE8FF5AB2EDE9BD57A4538D9D5D24D644107D33FA46E3DF5329C8A6E67D2FD1DB62E43EB3FD5FB7A575A76332D764D36D62EC5B6D2412C935BDB73E5BBADC770F49CE5D17D4EC37D573BAADE0E360D15DC1A6E9A8D82DDBEA38D4DDB736BA5ADF51F7FE8F1FF0047FA1FF83C1FADDF589FD673EBA30897626197369B390FB1FF00CE5AD2EF7FA7B7D9B3FEB967F3C84AABBA83B5FE2D5F6577750C6C8FD2515FA760ADE1AE01C1C1AF353ADDDFC9DFF437B3FD22CCFAF97FADF597258EB0554E3D74B2BAABF635AD7346459FCD6CDCFF0051EE56BEA3E3E4DF4F5765325EDA6A66E027DCE71B36B0B7F39D556F59FF005EADA6CEBB73AB63EBB7D0A06435C46DDC1BFE099F49B4FA5E9FFD73E8244546FC557AD3D77F8BDB1D93F576E373AC78C4B9E04B74F70F6D35BEC73AC77BC7AB6FF2ED42CFFF0019"

    [/autoit]

    Möchte ich nun den Code verschlüsseln streikt der Obfuscator. Mache ich das ganze ohne das Binärbild funktionert das ganze einwandfrei. Wie kann man das Skript nun halbwegs verschlüsseln wobei es dem Obfuscator ist wie lang mein Skript ist?

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Ich habe das gleiche Problem und wäre für eine Lösung ebenfalls sehr dankbar.

  • Dann splitte den Binärcode auf und setze es als array.
    Es kann durchaussein das der Obfuscator ab einer gewissen zeienlänge mekert.
    Ich kann mich mal erinnern irgendwo sowas gelesen zu haben, aber nicht hauen wenns nicht stimmt es ist eine wage erinnerung ^^

  • Mach deine Zeilen einfach etwas kürzer. Es gibt zwei Möglichkeiten:

    [autoit]

    $bData = "0x0123456789ABCDEF..."
    $bData &= "0123456789ABCDEF..."
    $bData &= "0123456789ABCDEF..."
    ...
    $bData = Binary($bData)

    [/autoit][autoit]

    $bData = Binary("0x0123456789ABCDEF..." & _
    "0123456789ABCDEF..." & _
    "0123456789ABCDEF..." & _
    ...
    "0123456789ABCDEF..." )

    [/autoit]
  • Ja aber die Frage ist doch, wie lang jede Zeile sein darf?
    Lässt sich das beantworten?

  • Ich glaube die Länge des Strings darf höchstens 2048 Zeichen lang sein.

    Hier der Code, den ich benutze, um den Binärstring zu erzeugen:

    Spoiler anzeigen
    [autoit]


    ; ============================================================================================================================
    ; Purpose : Converts any file to HEX binary string
    ; Author : Ward / UEZ
    ; ============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Local $VarName = StringStripWS(InputBox("Convert to Binary String", "Select a name for the variable." & @CRLF & @CRLF & "$ will automatically added to the beginning of the variable!:", "BinaryString"), 3)
    If $VarName = "" Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    Local $FileName = FileOpenDialog("Open a file", @ScriptDir, "DLL file (*.*)")
    If $FileName = "" Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    Local $Handle = FileOpen($FileName, 16)
    Local $BinaryString = FileRead($Handle)
    FileClose($Handle)

    [/autoit] [autoit][/autoit] [autoit]

    Local $LineLen = 1024
    Local $DllString = String($BinaryString)

    [/autoit] [autoit][/autoit] [autoit]

    Local $Script = "Func " & $VarName & "()" & @CRLF & @TAB & "Local _" & @CRLF & @TAB & "$" & $VarName & " = '" & StringLeft($DllString, $LineLen) & "'" & @CRLF
    $DllString = StringTrimLeft($DllString, $LineLen)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While StringLen($DllString) > $LineLen
    $Script &= " $" & $VarName & " &= '" & StringLeft($DllString, $LineLen) & "'" & @CRLF
    $DllString = StringTrimLeft($DllString, $LineLen)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    If StringLen($DllString) <> 0 Then $Script &= " $" & $VarName & " &= '" & $DllString & "'" & @CRLF
    $Script &= @TAB & "Return Binary($" & $VarName & ")" & @CRLF & "EndFunc"
    ClipPut($Script)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(64, "Convert to Binary String", "The result is in the clipboard, you can paste it to your script.")

    [/autoit]

    Das Resultat ist eine Funktion mit dem String und es wird in den Zwischenspeicher kopiert.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Ich überlege gerade, ob es nicht generell besser ist, diese Daten separat in einer dat-Datei, bin-Datei oder dll-Datei zu speichern um die exe-Datei zu entlasten !


    Da bin ich mit Dir der gleichen Meinung.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl