Announcement

Collapse

Forum Guidelines

This forum is for finished source code that is working properly. If you have questions about this or any other source code, please post it in one of the Discussion Forums, not here.
See more
See less

Text Obfuscation

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Text Obfuscation

    Code:
                               
    ' From
    ' http://www.powerbasic.com/support/forums/Forum6/HTML/001173.html       
                          
    #COMPILE EXE  "Scramb.exe"
                                                                          
    #INCLUDE "WIN32API.INC"  
    
                    
    
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
    SUB time_stamp_count(tick AS QUAD) ' CPU Clock count    Charles E V Pegge
    
      '---------------------------'
      '                           ' approx because it is not a serialised instruction
      '                           ' it may execute before or after other instructions
      '                           ' in the pipeline.
      ! mov ebx,tick              ' var address where count is to be stored.
      ! db  &h0f,&h31             ' RDTSC read time-stamp counter into edx:eax hi lo.
      ! mov [ebx],eax             ' save low order 4 bytes.
      ! mov [ebx+4],edx           ' save high order 4 bytes.
      '---------------------------'
    
    END SUB
                 
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
    SUB JohnG( sFile AS STRING, sPass AS STRING ) ' 8 chr password. If less, pad out to 8 with any chr$ of choice 
    
       LOCAL soph, m2, m3, i, k AS LONG
       LOCAL m1 AS DWORD
       LOCAL qaPtr AS DWORD PTR
       LOCAL qaPtr2, pLong AS LONG PTR
       LOCAL qAns AS QUAD                 
    
        soph    = &h7C69CA85        ' prime const. we need
        m1      = CVDWD(LEFT$ (sPass, 4)) AND &h7fffffff  'to make sure password is small enough to fit algorithm
        m2      = CVDWD(RIGHT$(sPass, 4)) AND &h3fffffff  'to make sure password is small enough to fit algorithm
        qaPtr   = VARPTR(qAns)      ' qAns 1st half ptr
        qaPtr2  = qaPtr + 4         '  "   2nd   "   "
    
        pLong = STRPTR(sFile)        ' record string ptr
        FOR i = 1 TO LEN(sFile) \ 4  ' up to 3 chrs not encoded unless record len is multiple of 4
          qAns   = m1 * soph + m2     
          m1     = @qaPtr           ' save for next loop
          m2     = @qaPtr2          ' save for next loop
          m3     = m1               ' convert m1 to a LONG
          @pLong = @pLong XOR m3    ' encode/decode 4 bytes of string
          INCR pLong
        NEXT
    
    END SUB
    
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
    SUB ASMROT13( sFile AS STRING ) 
     
    ' asmROT13 encryption/decryption - no extended ANSI here (a-z, A-Z only).
    ' Repeat action to encrypt/decrypt
                  
      IF LEN(sFile) = 0 THEN EXIT SUB
      #REGISTER NONE
    
      LOCAL ln AS LONG
      ln = LEN(sFile)             ' get string's len into ln
    
      ! cmp ln, 0              ; does the string have a length?
      ! je Exit13Loop          ; exit if zero
    
      ! mov eax, sFile            ; eax = pointer to string handle
      ! mov eax, [eax]         ; eax = pointer to string data
    
      Bgn13Loop:
         ! mov edx, [eax]      ; move current char into edx
         ! cmp ln, 0           ; exit when ln = zero
         ! jne Continue13Loop
            ! jmp Exit13Loop   ; jump out on end of string
    
      Continue13Loop:
         ! cmp dl, 65          ; CASE 65 TO 90
         ! jb NoRot            ;    if dl < 65  then get next character
         ! cmp dl, 90
         ! jbe Rot13Upper      ;    if dl <= 90
         ! cmp dl, 97          ; CASE 97 TO 122
         ! jb NoRot            ;    if dl < 97  then next character
         ! cmp dl, 122
         ! jbe Rot13Lower      ;    if dl <= 122
         ! jmp NoRot           ; CASE ELSE - get next character
    
      Rot13Lower:
         ! add dl, 13          ; Rotate 13 steps forward
         ! cmp dl, 122
         ! ja AdjChar          ; if dl became > 122
         ! mov [eax], dl       ; else write changed char back into sFile
         ! jmp NoRot
    
      Rot13Upper:
         ! add dl, 13          ; Rotate 13 steps forward
         ! cmp dl, 90
         ! ja AdjChar          ; if dl became > 90
         ! mov [eax], dl       ; else write changed char back into sFile
         ! jmp NoRot
    
      AdjChar:
         ! sub dl, 26
         ! mov [eax], dl       ; else write changed char back into sFile
         ! jmp NoRot
    
      NoRot:
         ! inc eax
         ! dec ln              ; decrease the ln (length) counter
         ! jmp bgn13Loop
    
      Exit13Loop:
    
    END SUB
                       
    
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
    SUB Scramble( sFile AS STRING ) 
    
      REGISTER i AS LONG  
      LOCAL lStrPtr AS BYTE PTR  
    
        lStrPtr = STRPTR(sFile)
        FOR i = 0 TO LEN(sFile)-1
          @lStrPtr[i] = @lStrPtr[i] XOR (i AND 6) + 1
        NEXT    
    
    END SUB   
            
             
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤' 
    SUB ASMScramble( sFile AS STRING ) 
    
      LOCAL ln AS LONG
      ln = LEN(sFile)             ' get string's len into ln
    
      ! cmp ln, 0              ; does the string have a length?
      ! je ExitScLoop          ; exit if zero
    
      ! mov eax, sFile            ; eax = pointer to string handle
      ! mov eax, [eax]         ; eax = pointer to string data
    
      BgnScLoop:
         ! mov edx, [eax]      ; move current char into edx
         ! cmp ln, 0           ; exit when ln = zero
         ! jne ContinueScLoop
            ! jmp ExitScLoop   ; jump out on end of string
    
      ContinueScLoop:
         ! XOR dl, 2           ; xor dl with 2 (or 1, 3, whatever..)
         ! mov [eax], dl       ; write changed char back into sFile
         ! inc eax             ; get next character
         ! dec ln              ; decrease the ln (length) counter
         ! jmp bgnScLoop
    
      ExitScLoop: 
    
    END SUB
                       
    
    
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤' 
    SUB ScrampleAll( sFile AS STRING ) ' Scrambles all Chars 
               
      REGISTER i AS LONG
               
      LOCAL nBlks, nBytes, FileLen AS LONG
      LOCAL pLong AS LONG POINTER
                       
    
        pLong   = STRPTR(sFile) 
        FileLen = LEN(sFile)
        nBlks   = FileLen\4 ' Integer Division
        nBytes  = FileLen MOD 4 '
    
        FOR i = 1 TO nBlks
          @pLong = - @pLong                
          INCR pLong
        NEXT i 
                 
        IF nBytes THEN ' Some trailing Bytes 
          LOCAL pByte AS BYTE POINTER 
          pByte = pLong
          FOR i = 1 TO nBytes
            @pByte = [email protected]  
            INCR pByte
          NEXT
        END IF 
    
    END SUB 
    
             
    
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤' 
    SUB Scrample( sFile AS STRING ) ' up to 3 trailing chars may be unscrambled
               
      REGISTER i AS LONG
               
      LOCAL pLong AS LONG PTR
                       
        pLong = STRPTR(sFile) 
        FOR i = 1 TO LEN(sFile)\4 ' Integer Division please
          @pLong = - @pLong                
          INCR pLong
        NEXT i 
      
    END SUB 
            
    
    
    
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'   
    FUNCTION PBMAIN() AS LONG   
    
      LOCAL sKey, sFile, sCipher, t, sText AS STRING 
      LOCAL FileLen,  i, hFile, PadLen, RetVal, nLoops AS LONG
     
      LOCAL cBeg, cEnd AS QUAD 
    
                        
    
        sText = "Low voltage cutoff should not be of great concern to the average user." ' Default
                             
    
    '    hFile = FREEFILE ' Save the Declarations
    '    OPEN "1MBBinary.exe" FOR BINARY SHARED AS hFile 
    '      IF ERR THEN MSGBOX "Problem opening file to be encrypted",48,"File Error"+STR$(ERRCLEAR)
    '      GET$ #hFile, LOF(hFile), sFile
    '    CLOSE hFile '
    
    
        t = t + "Input File length :" + STR$(LEN(sText)) + $CRLF 
        t = t + LEFT$(sText,80) + $CRLF + $CRLF    ' COMMENT OUT FOR BINARY FILE **************
                  
        nLoops = 999
    
                             
    '   --------------------------------------
        sFile = sText
        time_stamp_count(cBeg) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks         
          FOR i = 1 TO nLoops
            CALL JohnG(sFile, "as34fd3A") ' byte array to string  
          NEXT
        time_stamp_count(cEnd) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks
        t = t + "JohnG Avg Clks="+STR$( (cEnd-cBeg)\nLoops ) + $CRLF    
        t = t + "Cipher length :" + STR$(LEN(sFile)) + $CRLF
       t = t + ">>" + LEFT$(sFile, 80) + "<<" + $CRLF + $CRLF
    
    
    '   --------------------------------------
        sFile = sText
        time_stamp_count(cBeg) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks         
          FOR i = 1 TO nLoops
            CALL ASMROT13(sFile) ' byte array to string  
          NEXT
        time_stamp_count(cEnd) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks
        t = t + "SMROT13 Avg Clks="+STR$( (cEnd-cBeg)\nLoops ) + $CRLF    
        t = t + "Cipher length :" + STR$(LEN(sFile)) + $CRLF
       t = t + ">>" + LEFT$(sFile, 80) + "<<" + $CRLF + $CRLF
    
    
    '   -------------------------------------- 
        sFile = sText
        time_stamp_count(cBeg) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks         
          FOR i = 1 TO nLoops
            CALL Scramble(sFile) ' byte array to string  
          NEXT
        time_stamp_count(cEnd) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks
        t = t + "Scramble Avg Clks="+STR$( (cEnd-cBeg)\nLoops ) + $CRLF    
        t = t + "Cipher length :" + STR$(LEN(sFile)) + $CRLF
       t = t + ">>" + LEFT$(sFile, 80) + "<<" + $CRLF + $CRLF 
    
                  
    
    '   -------------------------------------- 
        sFile = sText
        time_stamp_count(cBeg) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks         
          FOR i = 1 TO nLoops
            CALL ASMScramble(sFile) ' byte array to string  
          NEXT
        time_stamp_count(cEnd) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks
        t = t + "ASMScramble Avg Clks="+STR$( (cEnd-cBeg)\nLoops ) + $CRLF    
        t = t + "Cipher length :" + STR$(LEN(sFile)) + $CRLF
       t = t + ">>" + LEFT$(sFile, 80) + "<<" + $CRLF + $CRLF
    
    
    
    '   -------------------------------------- 
        sFile = sText     
        time_stamp_count(cBeg) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks         
          FOR i = 1 TO nLoops
            CALL ScrampleAll(sFile) ' byte array to string  
          NEXT
        time_stamp_count(cEnd) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks
        t = t + "ScrampleAll Avg Clks="+STR$( (cEnd-cBeg)\nLoops ) + $CRLF    
        t = t + "Cipher length :" + STR$(LEN(sFile)) + $CRLF
       t = t + ">>" + LEFT$(sFile, 80) + "<<" + $CRLF + $CRLF
    
    
    
    '   -------------------------------------- 
        sFile = sText     
        time_stamp_count(cBeg) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks         
          FOR i = 1 TO nLoops
            CALL Scrample(sFile) ' byte array to string  
          NEXT
        time_stamp_count(cEnd) ' measuring cpu clock cycles. The overhead just for making this call is about 25 clocks
        t = t + "Scrample Avg Clks="+STR$( (cEnd-cBeg)\nLoops ) + $CRLF    
        t = t + "Cipher length :" + STR$(LEN(sFile)) + $CRLF
       t = t + ">>" + LEFT$(sFile, 80) + "<<" + $CRLF + $CRLF
    
    
                 
    
        MSGBOX t,64,"Text Scramble" 
    
    END FUNCTION 
    '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
    Last edited by Mike Trader; 9 Oct 2007, 11:57 AM.
Working...
X