hex in string umwandeln



  • ich habe mal gehört, dass sich so erzeugte strings (0x8C, ...) nicht so einfach im fertigen Programmcode finden lassen - was den Vorteil hat, dass der Anfänger-Cracker schon daran verzweifeln kann, die Stelle im Programm zu finden, an der der Fehler XYZ ausgegeben wird... Und vor allem, dass Passwörter (zu Datenbanken o.ä.) nicht gefunden werden können, wenn man das programm mit nem Texteditor angeguckt... korrigiert mich, wenn ich mich täusche

    bb



  • unskilled schrieb:

    ich habe mal gehört, dass sich so erzeugte strings (0x8C, ...) nicht so einfach im fertigen Programmcode finden lassen - was den Vorteil hat, dass der Anfänger-Cracker schon daran verzweifeln kann, die Stelle im Programm zu finden, an der der Fehler XYZ ausgegeben wird... Und vor allem, dass Passwörter (zu Datenbanken o.ä.) nicht gefunden werden können, wenn man das programm mit nem Texteditor angeguckt... korrigiert mich, wenn ich mich täusche

    bb

    Also wenn Passwörter so hardgecodet werden hast du ein anderes Problem.. Vor allem wird das dann nicht mit einem Texteditor angeschaut, wohl eher mit einem Hex Editor..



  • unskilled schrieb:

    ich habe mal gehört, dass sich so erzeugte strings (0x8C, ...) nicht so einfach im fertigen Programmcode finden lassen - was den Vorteil hat, dass der Anfänger-Cracker schon daran verzweifeln kann, die Stelle im Programm zu finden, an der der Fehler XYZ ausgegeben wird... Und vor allem, dass Passwörter (zu Datenbanken o.ä.) nicht gefunden werden können, wenn man das programm mit nem Texteditor angeguckt... korrigiert mich, wenn ich mich täusche

    bb

    Im fertig kompilierten Programm macht es keinen Unterschied ob du

    char s[] = "Ein Passwort";
    cout << s;
    

    oder

    char s[] = {0x62, 0x..., ... }
    cout << s;
    

    benutzt. Die ASCII Zeichen werden in beiden Fällen auf die selbe Art und Weise im Programm abgespeichert.



  • templäd schrieb:

    char test1[] = {0x62, 0x63, 0};
       std::cout << test1 << std::endl;
    

    Das klappt wunderbar, vielen Dank!

    Dravere schrieb:

    Aber ich denke die Frage ist durchaus berechtigt -> Wofür???

    Unskilled hat es Wunderbar erklärt.

    ip schrieb:

    Die ASCII Zeichen werden in beiden Fällen auf die selbe Art und Weise im Programm abgespeichert.

    Also, wenn ich mein Prog mit einem HEX-Editor öffne, wird die Methode von templäd NICHT angezeit. Zumindest kann ich den String nicht finden.

    Gibt es denn eine elegantere Lösung?



  • ab und an weiß ich halt doch mal was ^^

    naja: es gibt viel bessere Lösungen ^^
    z.Bsp. das Passwort in ne andere Datei legen - natürlich verschlüsselt...

    Allerdings hast du so auch wieder ein Problem:
    Wenn der Client es entschlüsseln kann, dann kann es auch der Cracker, der sich deinen Client anguckt... Also bleibt dir wohl nur eine Verbindung zu einem Server aufzubauen, der die Querys/... selbst macht - und du somit das Pwd nicht mehr im Client brauchst - eine andere Lsg. gibts imho nicht...

    bb



  • ip schrieb:

    Im fertig kompilierten Programm macht es keinen Unterschied ob du

    char s[] = "Ein Passwort";
    cout << s;
    

    oder

    char s[] = {0x62, 0x..., ... }
    cout << s;
    

    benutzt. Die ASCII Zeichen werden in beiden Fällen auf die selbe Art und Weise im Programm abgespeichert.

    Hauptsache, ich stell iwelche behauptungen auf, aber hab 0 Ahnung...

    Quelltext:

    #include <iostream>
    
    int main()
    {
    	char A[] = "Mein leicht zu findender String";
    	char B[] = {'M', 'e', 'i', 'n', ' ', 'a', 'n', 'd', 'e', 'r', 'e', 'r', ' ', 'S', 't', 'r', 'i', 'n', 'g', '\0'};
    
    	std::cout << A << "\r\n" << B;
    }
    

    der Programm-Code in notepad nach dem Compilieren mit VS,
    Optionen:

    /O2 /Oi /GL /D "_MBCS" /FD /EHsc /MD /Gy /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt
    
    MZ       ÿÿ  ¸       @                                   ð   º ´	Í!¸LÍ!This program cannot be run in DOS mode.
    
    $       𼕐ÞÝûÃÞÝûÃÞÝûÃÀnÃßÝûÃÀxÃÊÝûÃÀÃÜÝûÃÀhÃÛÝûÃù€ÃÜÝûÃÞÝúÃâÝûÃÀqÃßÝûÃÀjÃßÝûÃRichÞÝûà                        PE  L pÂ.I        à 	           m           @                      `     õÚ   @                           #  P    @  °                   P  ”  ð                              H!  @               Ð                           .text   -                          `.rdata  <	       
                     @  @.data   Œ   0                    @  À.rsrc   °   @                    @  @.reloc  ü   P      "              @  B                                                                                                                                                                                                                                                                                                                                                U‹ìƒäøƒì8¡ 0@ 3ĉD$4VW¹   ¾$!@ |$ó¥±n°rˆD$ˆD$ˆD$D$PQhD!@ ²eQˆL$ˆL$ˆL$)L$,ˆT$ˆT$ ˆT$"‹T @ QRÆD$ MÆD$"iÆD$$ ÆD$%aÆD$'dÆD$, ÆD$-SÆD$.tÆD$0iÆD$2gÆD$3 è\  ƒÄPèS  ƒÄPèJ  ‹L$DƒÄ_^3Ì3Àèô  ‹å]ÃÌÌÌÌjÿhØ@ d¡    PW¡ 0@ 3ÄPD$d£    ‹|$‰7‹‹H‹L1(…ÉtÿH @ ÇD$    ‹‹Bƃx u‹@,…Àt‹Èÿ< @ ‹‹Qƒ|2 ”ÀˆG‹Ç‹L$d‰
        Y_ƒÄ ÌÌÌÌÌÌÌÌÌÌÌÌÌjÿhØ@ d¡    PV¡ 0@ 3ÄPD$d£    ‹t$ÇD$    ÿX @ „Àu‹ÿL @ ÇD$ÿÿÿÿ‹‹‹Q‹D(…Àt‹ÈÿD @ ‹L$d‰
        Y^ƒÄ ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹ ‹‹Q‹D(…Àt‹Èÿ%D @ ÃÌÌÌÌÌÌÌÌU‹ìjÿh@ d¡    PƒìSVW¡ 0@ 3ÅPEôd£    ‰eð‹u‹E3Û‰]ìP¤$    Š@„Éuù+‹ø‹‹H‹D1;Ã~;Ç~+Nj؍UàRègþÿÿÇEü    €}ä u	ÇEì   ëyÆEü‹‹H‹D1%À  ƒø@t4…Û~*‹‹BŠL00Æ‹@(ˆMè‹UèR‹Èÿ@ @ ƒøÿ…–   ƒMìƒ}ì u‹‹H‹U‹L1(WRÿP @ ;Çt~ÇEì   ‹‹@Æ3ɉH‰Mü‹Mì‹j Q‹JÎÿ8 @ ÇEü   ÿX @ „Àu	‹MàÿL @ ÇEüÿÿÿÿ‹Eà‹‹Q‹L(…ÉtÿD @ ‹Æ‹Môd‰
        Y_^[‹å]ÃKé:ÿÿÿd$ …Û~…‹‹HŠT101‹@(ˆUè‹MèQ‹Èÿ@ @ ƒøÿu	ƒMìéYÿÿÿKëÍ‹E‹‹JjjÈÿ8 @ ÇEü    ¸´@ Ëué<ÿÿÿ;
     0@ uóÃé¬  h¶@ è¤  ¡h3@ Ç$40@ ÿ5d3@ £40@ h$0@ h(0@ h 0@ ÿ¼ @ ƒÄ£00@ …À}jèº  YÃjh "@ è*  3Û‰]üd¡   ‹p‰]ä¿|3@ SVWÿ @ ;Ãt;Æu3öF‰uäëhè  ÿ  @ ëÚ3öF¡x3@ ;Æu
    jè]  Yë;¡x3@ …Àu,‰5x3@ hè @ hÜ @ è²  YY…ÀtÇEüþÿÿÿ¸ÿ   éÝ   ‰5<0@ ¡x3@ ;ÆuhØ @ hÐ @ èw  YYÇx3@    9]äuSWÿ0 @ 9ˆ3@ thˆ3@ èŽ  Y…Àt
    SjSÿˆ3@ ¡$0@ ‹
    ¨ @ ‰ÿ5$0@ ÿ5(0@ ÿ5 0@ èÛúÿÿƒÄ£80@ 9,0@ u7Pÿ¬ @ ‹Eì‹‹	‰MàPQè  YYËeè‹Eà£80@ 3Û9,0@ uPÿ´ @ 9<0@ uÿ¸ @ ÇEüþÿÿÿ¡80@ è  øMZ  f9  @ t3ÀëM¡< @ €  @ 8PE  ué·Hù  tù  uÕƒ¸„   vÌ3É9ˆø   ëƒxtv¼3É9ˆè   •Á‹Áj£,0@ ÿd @ jÿÿ` @ YY£€3@ £„3@ ÿ @ ‹
    p3@ ‰ÿ” @ ‹
    l3@ ‰¡˜ @ ‹ £t3@ èW  è·  ƒ=0@  uhõ@ ÿÄ @ Yèr  ƒ=0@ ÿu	jÿÿœ @ Y3ÀÃè†  éŸýÿÿ‹ÿU‹ìì(  £H1@ ‰
    D1@ ‰@1@ ‰<1@ ‰581@ ‰=41@ fŒ`1@ fŒ
    T1@ fŒ01@ fŒ,1@ fŒ%(1@ fŒ-$1@ œX1@ ‹E £L1@ ‹E£P1@ E£\1@ ‹…àüÿÿǘ0@   ¡P1@ £L0@ Ç@0@ 	 ÀÇD0@    ¡ 0@ ‰…Øüÿÿ¡0@ ‰…Üüÿÿÿ @ £0@ jèJ  Yj ÿ @ h!@ ÿ @ ƒ=0@  ujè&  Yh	 Àÿ @ Pÿ @ ÉËÿU‹ì‹E‹ 8csmàu*ƒxu$‹@= “t=!“t="“t= @™uèÛ  3À] h}@ ÿ @ 3ÀÃÌÿ%À @ jh@"@ èl  ÿ5„3@ ‹5€ @ ÿÖY‰Eäƒøÿuÿuÿ| @ Yëgjèœ  Yƒeü ÿ5„3@ ÿÖ‰Eäÿ5€3@ ÿÖYY‰EàEàPEäPÿu‹5` @ ÿÖYPè_  ‰EÜÿuäÿÖ£„3@ ÿuàÿփģ€3@ ÇEüþÿÿÿè	   ‹EÜè"  Ãjè#  YËÿU‹ìÿuèNÿÿÿ÷ØÀ÷ØYH]ËÿV¸"@ ¾"@ W‹ø;Æs‹…ÀtÿЃÇ;þrñ_^ËÿV¸"@ ¾"@ W‹ø;Æs‹…ÀtÿЃÇ;þrñ_^Ãÿ%° @ ÌÌÌÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ì‹M¸MZ  f9t3À]ËA<Á8PE  uï3Ò¹  f9H”‹Â]ÃÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ì‹E‹H<È·ASV·q3ÒWD…öv‹}‹H;ùr	‹XÙ;ûr
    BƒÀ(;Örè3À_^[]ÃÌÌÌÌÌÌÌÌÌÌÌÌ‹ÿU‹ìjþh`"@ h¥@ d¡    PƒìSVW¡ 0@ 1Eø3ÅPEðd£    ‰eèÇEü    h  @ è*ÿÿÿƒÄ…ÀtU‹E-  @ Ph  @ èPÿÿÿƒÄ…Àt;‹@$Áè÷ЃàÇEüþÿÿÿ‹Mðd‰
        Y_^[‹å]ËEì‹‹3Ò=  À”‹ÂËeèÇEüþÿÿÿ3À‹Mðd‰
        Y_^[‹å]ÃÌÿ%¤ @ ÿ%  @ ÌÌh¥@ dÿ5    ‹D$‰l$l$+àSVW¡ 0@ 1Eü3ÅP‰eèÿuø‹EüÇEüþÿÿÿ‰EøEðd£    ËMðd‰
        Y__^[‹å]QËÿU‹ìÿuÿuÿuÿuh¼@ h 0@ èç   ƒÄ]ËÿVh   h   3öVèÙ   ƒÄ…Àt
    VVVVVè   ƒÄ^Ã3ÀËÿU‹ìƒì¡ 0@ ƒeø ƒeü SW¿Næ@»»  ÿÿ;Çt
    …Ãt	÷У0@ ë`VEøPÿ, @ ‹uü3uøÿ( @ 3ðÿ$ @ 3ðÿ  @ 3ðEðPÿ @ ‹Eô3Eð3ð;÷u¾Oæ@»ë…óu‹ÆÁàð‰5 0@ ÷Ö‰50@ ^_[ÉÃÿ%h @ ÿ%l @ ÿ%p @ ÿ%t @ ÿ%x @ ÿ%„ @ ÿ%ˆ @ ÿ%Œ @ ÿ%È @ ÌÌÌÌÌÌÌÌÌÌÌÌ‹Eéöÿÿ‹T$Bü‹Jø3ÈèÓ÷ÿÿ¸„"@ éËÿÿÿÌÌÌÌÌÌÌÌÌÌÌÌ̍EàPèWõÿÿÍEàéÎõÿÿ‹T$B‹JÜ3Èè™÷ÿÿ¸ì"@ é‘ÿÿÿ                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   (  (  2(  F(  Z(  v(  ”(  ¨(  Â(  Ò(  è(  þ(  ö'      &  Ò%  ’%  P%  %  Ò$  Ž$  0$  l$      $'  6'  H'  ^'  ~'  ˆ'  –'  ž'  ¨'  º'  Ô'  æ'  '  '  ö&  Ì&  ¾&  ²&  ¦&  ž&  &  ˆ&  ~&  n&  `&  â&  &)          Ë@         Œ@ ¿@             pÂ.I       c   !    @0@ ˜0@ bad allocation  Mein leicht zu findender String 
      H                                                            0@  "@    RSDS&­^@9”ÃA   c:\Users\Tommy\Documents\Visual Studio 2008\Projects\test\Release\test.pdb              ¥  Ø                        þÿÿÿ    Ðÿÿÿ    þÿÿÿ<@ P@     þÿÿÿ    Ìÿÿÿ    þÿÿÿ    p@     þÿÿÿ    Øÿÿÿ    þÿÿÿ@ @ ÿÿÿÿÐ@ "“   |"@                        ÿÿÿÿ @                 ÿÿÿÿ
    @ @           “@             È"@ "“   ¨"@    Ø"@                ˜#          T&  8   À#          r'  `   `#          )                          (  (  2(  F(  Z(  v(  ”(  ¨(  Â(  Ò(  è(  þ(  ö'      &  Ò%  ’%  P%  %  Ò$  Ž$  0$  l$      $'  6'  H'  ^'  ~'  ˆ'  –'  ž'  ¨'  º'  Ô'  æ'  '  '  ö&  Ì&  ¾&  ²&  ¦&  ž&  &  ˆ&  ~&  n&  `&  â&  &)      ‚?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A  ä?uncaught_exception@std@@YA_NXZ v?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHPBDH@Z  |?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEXXZ  W?_Lock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ  Ð?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ  s?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEHD@Z !?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ D?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QAEXH_N@Z  MSVCP90.dll _amsg_exit  Ÿ __getmainargs ,_cexit  |_exit f _XcptFilter Ìexit    __initenv _initterm _initterm_e <_configthreadlocale ã __setusermatherr  _adjust_fdiv  Ë __p__commode  Ï __p__fmode  j_encode_pointer à __set_app_type  K_crt_debugger_hook  C ?terminate@@YAXXZ MSVCR90.dll æ_unlock – __dllonexit v_lock _onexit `_decode_pointer s_except_handler4_common _invoke_watson  ?_controlfp_s  ½InterlockedExchange !Sleep ºInterlockedCompareExchange  -TerminateProcess  ©GetCurrentProcess >UnhandledExceptionFilter  SetUnhandledExceptionFilter ÑIsDebuggerPresent TQueryPerformanceCounter fGetTickCount  ­GetCurrentThreadId  ªGetCurrentProcessId OGetSystemTimeAsFileTime KERNEL32.dll  s __CxxFrameHandler3                                                                                                                                                                                                      Næ@»±¿Dÿÿÿÿÿÿÿÿþÿÿÿ   !@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        €                 0  €              	  H   X@  V  ä      <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
          </requestedPrivileges>
        </security>
      </trustInfo>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
        </dependentAssembly>
      </dependency>
    </assembly>PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDING   X  
    00=0b0Ó0à01*1c1p11›1º1ó122³2Ú233!3>3~3£3¯3¾3Ì3Ö3Ý3ã3è3í3ò3÷3ý34444=4X4b4u44„4‰4«4°4¹4¾4Ë4Ü4â4é4ý455555)5/585W5_5h5n5v5‚5”5Ÿ5¥5î5ô5ü566666"6)606@6H6N6Z6e6ƒ6‰66•6›6¡6¨6¯6¶6½6Ä6Ë6Ò6Ú6â6ê6ö6ÿ67
    777(74797I7N7T7Z7p7w7À7Æ7Ð7×7â7è7ü78848J8W8”8™8º8¿8Þ8ˆ99Ÿ9½9Ñ9×9@:F:M:j:·:¼:;$;1;=;E;M;Y;};…;;–;œ;¢;¨;®;´;º;À;ê;$<      0   Ô0à0ä011„1ˆ14282X2t2x2€2Œ2¬2Ä2Ô2è2ô2ü2 0     0
    

    Siehe da - in Zeile 21 steht der String genau so drin... Hab gerad keinen Hex-Editor da, sonst hätte ich auch mal geguckt, wie schwer es denn nun wirklich ist, den anders erzeugten String zu suchen - aber wie schon oben beschrieben - es ist alles andere als unmöglich ^^

    bb

    edit: hatte nen '\0' vergessen...



  • Das hat gar nichts mit dem zu tun, was ip gesagt hat.

    Nur weil Notepad dort "zufällig" das richtige ausgibt, heisst das nicht, dass es anderst gespeichert wird.
    Binär wird beides genau gleich behandelt. Und das wollte er damit sagen. Und wer aus dem Grund, dass man irgendwas in einem Texteditor finden kann meint seine strings in Hex zu schreiben, der hat definiv einen an der Waffel..
    Entweder man verschlüsselt das gerade anständig, oder man lässt es bleiben. Jeden, den es interessieren könnte, was in deinem Programm abläuft hat einen Hexeditor installiert und wird den auch eher öffen, als Notepad..



  • drakon schrieb:

    Binär wird beides genau gleich behandelt. Und das wollte er damit sagen.

    Nicht zwangsläufig. Ich habe schon Compiler erlebt, die bei A einen String aus dem Datenbereich auf den Stack kopieren (dann sieht man den String im Datenbereich natürlich als Bytefolge), bei B aber für jedes einzelne Byte eine Move-Anweisung generieren.

    Und wer aus dem Grund, dass man irgendwas in einem Texteditor finden kann meint seine strings in Hex zu schreiben, der hat definiv einen an der Waffel..

    Diese Ansicht teile ich dennoch uneingeschränkt.



  • LordJaxom schrieb:

    drakon schrieb:

    Binär wird beides genau gleich behandelt. Und das wollte er damit sagen.

    Nicht zwangsläufig. Ich habe schon Compiler erlebt, die bei A einen String aus dem Datenbereich auf den Stack kopieren (dann sieht man den String im Datenbereich natürlich als Bytefolge), bei B aber für jedes einzelne Byte eine Move-Anweisung generieren.

    Hmm. Interessant. Aber ja, ich habe sowieso vergessen zu sagen, dass es nicht das geringste mit C++ zu tun hat. Das ganze ist, wie du richtig sagst Implementierungsspezifisch.



  • drakon schrieb:

    LordJaxom schrieb:

    drakon schrieb:

    Binär wird beides genau gleich behandelt. Und das wollte er damit sagen.

    Nicht zwangsläufig. Ich habe schon Compiler erlebt, die bei A einen String aus dem Datenbereich auf den Stack kopieren (dann sieht man den String im Datenbereich natürlich als Bytefolge), bei B aber für jedes einzelne Byte eine Move-Anweisung generieren.

    Hmm. Interessant. Aber ja, ich habe sowieso vergessen zu sagen, dass es nicht das geringste mit C++ zu tun hat. Das ganze ist, wie du richtig sagst Implementierungsspezifisch.

    Das habe ich auch niemals behauptet - ansonsten trifft das, was LordJaxom sagt für die Mehrheit der Compiler zu (ich hab zumindest noch keinen gesehen, der es anders macht - aber das muss ja nichts heißen ^^)...

    bb...


Anmelden zum Antworten