Add operator randomizer for xor_shuffle obfuscator

pull/90/head
Pagran 5 years ago
parent 5b17f66855
commit b52e55e574

@ -18,8 +18,13 @@ func (x xorShuffle) obfuscate(data []byte) *ast.BlockStmt {
genRandBytes(key)
fullData := make([]byte, len(data)+len(key))
operators := make([]token.Token, len(fullData))
for i := range operators {
operators[i] = genRandOperator()
}
for i, b := range key {
fullData[i], fullData[i+len(data)] = data[i]^b, b
fullData[i], fullData[i+len(data)] = evalOperator(operators[i], data[i], b), b
}
shuffledIdxs := mathrand.Perm(len(fullData))
@ -31,11 +36,11 @@ func (x xorShuffle) obfuscate(data []byte) *ast.BlockStmt {
args := []ast.Expr{ah.Ident("data")}
for i := range data {
args = append(args, &ast.BinaryExpr{
X: ah.IndexExpr("fullData", ah.IntLit(shuffledIdxs[i])),
Op: token.XOR,
Y: ah.IndexExpr("fullData", ah.IntLit(shuffledIdxs[len(data)+i])),
})
args = append(args, getReversedOperator(
operators[i],
ah.IndexExpr("fullData", ah.IntLit(shuffledIdxs[i])),
ah.IndexExpr("fullData", ah.IntLit(shuffledIdxs[len(data)+i]))),
)
}
return ah.BlockStmt(

Loading…
Cancel
Save