|
|
@ -4,7 +4,6 @@ import (
|
|
|
|
"go/ast"
|
|
|
|
"go/ast"
|
|
|
|
"go/token"
|
|
|
|
"go/token"
|
|
|
|
"math"
|
|
|
|
"math"
|
|
|
|
"strconv"
|
|
|
|
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type swap struct{}
|
|
|
|
type swap struct{}
|
|
|
@ -34,7 +33,7 @@ func positionsToSlice(data []int) *ast.CompositeLit {
|
|
|
|
Elts: []ast.Expr{},
|
|
|
|
Elts: []ast.Expr{},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for _, data := range data {
|
|
|
|
for _, data := range data {
|
|
|
|
arr.Elts = append(arr.Elts, intLiteral(strconv.Itoa(data)))
|
|
|
|
arr.Elts = append(arr.Elts, intLiteral(data))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return arr
|
|
|
|
return arr
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -78,17 +77,17 @@ func (x swap) obfuscate(data []byte) *ast.BlockStmt {
|
|
|
|
Init: &ast.AssignStmt{
|
|
|
|
Init: &ast.AssignStmt{
|
|
|
|
Lhs: []ast.Expr{ident("i")},
|
|
|
|
Lhs: []ast.Expr{ident("i")},
|
|
|
|
Tok: token.DEFINE,
|
|
|
|
Tok: token.DEFINE,
|
|
|
|
Rhs: []ast.Expr{intLiteral("0")},
|
|
|
|
Rhs: []ast.Expr{intLiteral(0)},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Cond: &ast.BinaryExpr{
|
|
|
|
Cond: &ast.BinaryExpr{
|
|
|
|
X: ident("i"),
|
|
|
|
X: ident("i"),
|
|
|
|
Op: token.LSS,
|
|
|
|
Op: token.LSS,
|
|
|
|
Y: intLiteral(strconv.Itoa(len(positions))),
|
|
|
|
Y: intLiteral(len(positions)),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Post: &ast.AssignStmt{
|
|
|
|
Post: &ast.AssignStmt{
|
|
|
|
Lhs: []ast.Expr{ident("i")},
|
|
|
|
Lhs: []ast.Expr{ident("i")},
|
|
|
|
Tok: token.ADD_ASSIGN,
|
|
|
|
Tok: token.ADD_ASSIGN,
|
|
|
|
Rhs: []ast.Expr{intLiteral("2")},
|
|
|
|
Rhs: []ast.Expr{intLiteral(2)},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Body: &ast.BlockStmt{
|
|
|
|
Body: &ast.BlockStmt{
|
|
|
|
List: []ast.Stmt{
|
|
|
|
List: []ast.Stmt{
|
|
|
@ -106,12 +105,12 @@ func (x swap) obfuscate(data []byte) *ast.BlockStmt {
|
|
|
|
Y: indexExpr("positions", &ast.BinaryExpr{
|
|
|
|
Y: indexExpr("positions", &ast.BinaryExpr{
|
|
|
|
X: ident("i"),
|
|
|
|
X: ident("i"),
|
|
|
|
Op: token.ADD,
|
|
|
|
Op: token.ADD,
|
|
|
|
Y: intLiteral("1"),
|
|
|
|
Y: intLiteral(1),
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
}),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Op: token.ADD,
|
|
|
|
Op: token.ADD,
|
|
|
|
Y: intLiteral(strconv.Itoa(int(shiftKey))),
|
|
|
|
Y: intLiteral(int(shiftKey)),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
@ -121,7 +120,7 @@ func (x swap) obfuscate(data []byte) *ast.BlockStmt {
|
|
|
|
indexExpr("data", indexExpr("positions", &ast.BinaryExpr{
|
|
|
|
indexExpr("data", indexExpr("positions", &ast.BinaryExpr{
|
|
|
|
X: ident("i"),
|
|
|
|
X: ident("i"),
|
|
|
|
Op: token.ADD,
|
|
|
|
Op: token.ADD,
|
|
|
|
Y: intLiteral("1"),
|
|
|
|
Y: intLiteral(1),
|
|
|
|
})),
|
|
|
|
})),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Tok: token.ASSIGN,
|
|
|
|
Tok: token.ASSIGN,
|
|
|
@ -130,7 +129,7 @@ func (x swap) obfuscate(data []byte) *ast.BlockStmt {
|
|
|
|
X: indexExpr("data", indexExpr("positions", &ast.BinaryExpr{
|
|
|
|
X: indexExpr("data", indexExpr("positions", &ast.BinaryExpr{
|
|
|
|
X: ident("i"),
|
|
|
|
X: ident("i"),
|
|
|
|
Op: token.ADD,
|
|
|
|
Op: token.ADD,
|
|
|
|
Y: intLiteral("1"),
|
|
|
|
Y: intLiteral(1),
|
|
|
|
})),
|
|
|
|
})),
|
|
|
|
Op: token.XOR,
|
|
|
|
Op: token.XOR,
|
|
|
|
Y: ident("localKey"),
|
|
|
|
Y: ident("localKey"),
|
|
|
|