X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=ImplantFile.hs;h=fd57fadc456023ef5e78eee0b018098b12cada39;hp=1d7d43d8ce21f51666bb53b3b4652d94f37de063;hb=70bf5bd248aa426ca4e410b3fb9a0529354aedaf;hpb=dc74878dd76a8ba6ff99c7ee0a480e6b942ce2db diff --git a/ImplantFile.hs b/ImplantFile.hs index 1d7d43d..fd57fad 100644 --- a/ImplantFile.hs +++ b/ImplantFile.hs @@ -1,9 +1,11 @@ -import Codec.Binary.Base64 import Codec.Compression.GZip import Control.Monad import Data.Bits +import qualified Data.ByteString as BS +import qualified Data.ByteString.Base64 as B64 +import qualified Data.ByteString.Char8 as C8 import qualified Data.ByteString.Lazy as Lazy (ByteString) -import qualified Data.ByteString.Lazy as L hiding (ByteString) +import qualified Data.ByteString.Lazy as LS hiding (ByteString) import Data.Char import Data.Int import Data.Maybe @@ -108,22 +110,22 @@ generateHaskellSource opts srcFile let compParams = defaultCompressParams { compressLevel = bestCompression } gzippedData = compressWith compParams input - originalLen = L.length input - gzippedLen = L.length gzippedData + originalLen = LS.length input + gzippedLen = LS.length gzippedData useGZip = originalLen > gzippedLen - rawB64 = encode $ L.unpack input - gzippedB64 = encode $ L.unpack gzippedData + rawB64 = B64.encode $ BS.concat $ LS.toChunks input + gzippedB64 = B64.encode $ BS.concat $ LS.toChunks gzippedData header <- mkHeader srcFile originalLen gzippedLen useGZip mimeType eTag lastMod let hsModule = HsModule undefined (Module modName) (Just exports) imports decls exports = [HsEVar (UnQual (HsIdent symName))] - imports = [ HsImportDecl undefined (Module "Codec.Binary.Base64") - False Nothing Nothing + imports = [ HsImportDecl undefined (Module "Data.ByteString.Base64") + True (Just (Module "B64")) Nothing + , HsImportDecl undefined (Module "Data.ByteString.Char8") + True (Just (Module "C8")) Nothing , HsImportDecl undefined (Module "Data.ByteString.Lazy") - True (Just (Module "L")) Nothing - , HsImportDecl undefined (Module "Data.Maybe") - False Nothing Nothing + True (Just (Module "LS")) Nothing , HsImportDecl undefined (Module "Data.Time") False Nothing Nothing , HsImportDecl undefined (Module "Network.HTTP.Lucu") @@ -295,37 +297,35 @@ generateHaskellSource opts srcFile declGZippedData = [ HsTypeSig undefined [HsIdent "gzippedData"] (HsQualType [] - (HsTyCon (Qual (Module "L") (HsIdent "ByteString")))) + (HsTyCon (Qual (Module "LS") (HsIdent "ByteString")))) , HsFunBind [HsMatch undefined (HsIdent "gzippedData") [] (HsUnGuardedRhs defGZippedData) []] ] defGZippedData :: HsExp defGZippedData - = HsApp (HsVar (Qual (Module "L") (HsIdent "pack"))) - (HsParen - (HsApp (HsVar (UnQual (HsIdent "fromJust"))) - (HsParen - (HsApp (HsVar (UnQual (HsIdent "decode"))) - (HsLit (HsString gzippedB64)))))) + = HsApp (HsVar (Qual (Module "LS") (HsIdent "fromChunks"))) + (HsList [HsApp (HsVar (Qual (Module "B64") (HsIdent "decodeLenient"))) + (HsParen + (HsApp (HsVar (Qual (Module "C8") (HsIdent "pack"))) + (HsLit (HsString $ C8.unpack gzippedB64))))]) declRawData :: [HsDecl] declRawData = [ HsTypeSig undefined [HsIdent "rawData"] (HsQualType [] - (HsTyCon (Qual (Module "L") (HsIdent "ByteString")))) + (HsTyCon (Qual (Module "LS") (HsIdent "ByteString")))) , HsFunBind [HsMatch undefined (HsIdent "rawData") [] (HsUnGuardedRhs defRawData) []] ] defRawData :: HsExp defRawData - = HsApp (HsVar (Qual (Module "L") (HsIdent "pack"))) - (HsParen - (HsApp (HsVar (UnQual (HsIdent "fromJust"))) - (HsParen - (HsApp (HsVar (UnQual (HsIdent "decode"))) - (HsLit (HsString rawB64)))))) + = HsApp (HsVar (Qual (Module "LS") (HsIdent "fromChunks"))) + (HsList [HsApp (HsVar (Qual (Module "B64") (HsIdent "decodeLenient"))) + (HsParen + (HsApp (HsVar (Qual (Module "C8") (HsIdent "pack"))) + (HsLit (HsString $ C8.unpack rawB64))))]) hPutStrLn output header hPutStrLn output (prettyPrint hsModule) @@ -435,8 +435,8 @@ getETag opts input openInput :: FilePath -> IO Lazy.ByteString -openInput "-" = L.getContents -openInput fpath = L.readFile fpath +openInput "-" = LS.getContents +openInput fpath = LS.readFile fpath openOutput :: [CmdOpt] -> IO Handle @@ -466,9 +466,9 @@ openOutput opts Last Modified: 2007-11-05 13:53:42.231882 JST -} module Foo.Bar.Baz (baz) where - import Codec.Binary.Base64 - import qualified Data.ByteString.Lazy as L - import Data.Maybe + import qualified Data.ByteString.Base64 as B64 + import qualified Data.ByteString.Char8 as C8 + import qualified Data.ByteString.Lazy as LS import Data.Time import Network.HTTP.Lucu @@ -495,8 +495,8 @@ openOutput opts contentType :: MIMEType contentType = read "image/png" - rawData :: L.ByteString - rawData = L.pack (fromJust (decode "IyEvdXNyL2Jpbi9lbnYgcnVuZ2hjCgppbXBvcnQgRGlzdHJ...")) + rawData :: LS.ByteString + rawData = LS.fromChunks [B64.decodeLenient (C8.pack "IyEvdXNyL2Jpbi9lbnYgcnVuZ2hjCgppbXBvcnQgRGlzdHJ...")] ------------------------------------------------------------------------------ 壓縮される場合は次のやうに變はる: @@ -527,7 +527,7 @@ openOutput opts } -- rawData の代はりに gzippedData - gzippedData :: L.ByteString - gzippedData = L.pack (fromJust (decode "Otb/+DniOlRgAAAAYAAAAGAAAAB/6QOmToAEIGAAAAB...")) + gzippedData :: LS.ByteString + gzippedData = LS.fromChunks [B64.decodeLenient (C8.pack "Otb/+DniOlRgAAAAYAAAAGAAAAB/6QOmToAEIGAAAAB...")] ------------------------------------------------------------------------------ -}