forked from entropia/tip-toi-reveng
-
Notifications
You must be signed in to change notification settings - Fork 0
/
findoggpos.hs
34 lines (30 loc) · 871 Bytes
/
findoggpos.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import qualified Data.ByteString as B
import System.Environment
import System.Exit
import Data.Binary.Get
import Data.Word
import Text.Printf
import Data.Bits
import Data.List
import Data.Char
import Data.Ord
magic :: B.ByteString
magic = B.pack $ map (fromIntegral . ord) "OggS"
main = do
args <- getArgs
file <- case args of
[file] -> return file
_ -> do
prg <- getProgName
putStrLn $ "Usage: " ++ prg ++ " <file.gme>"
exitFailure
bytes <- B.readFile file
let (x,pos) = maximumBy (comparing (length . snd)) [
(x', B.findSubstrings xmagic bytes) |
--x <- [0..255 :: Word8],
x' <- [0xAD, 0x3B],
let xmagic = B.map (xor x') magic
]
printf "XOR: %02X\n" x
putStrLn "Fundstellen:"
mapM_ (printf "%08X\n") pos