以下用法已经基本能满足简单的js参数逆向:
package main
import (
"fmt"
"github.com/robertkrimen/otto"
)
func main() {
vm := otto.New()
vm.Run(`
function withParamsFunc(x, K) {
x += '';
for (var N = [], T = 0; T < K.length; T++) N[T % 4] ^= K.charCodeAt(T);
var U = ['EC', 'OK'],
V = [];
V[0] = x >> 24 & 255 ^ U[0].charCodeAt(0);
V[1] = x >> 16 & 255 ^ U[0].charCodeAt(1);
V[2] = x >> 8 & 255 ^ U[1].charCodeAt(0);
V[3] = x & 255 ^ U[1].charCodeAt(1);
U = [];
for (T = 0; T < 8; T++) U[T] = T % 2 == 0 ? N[T >> 1] : V[T >> 1];
N = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
V = '';
for (T = 0; T < U.length; T++) {
V += N[U[T] >> 4 & 15];
V += N[U[T] & 15]
}
return V
}
function generateGid() {
return "xxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e) {
var t = 16 * Math.random() | 0
var n = "x" === e ? t : 3 & t | 8;
return n.toString(16)
}).toUpperCase()
}
var abc = '1'+'2'
`)
value, _ := vm.Call("withParamsFunc", nil, "1313432", "32135")
fmt.Println("withParamsFunc value is:",value)
value, _ = vm.Get("abc")
fmt.Println("abc value is:",value)
vm.Set("abc","xxxxxxxxxxxxx")
value, _ = vm.Get("abc")
fmt.Println("after set abc value is:",value)
value, _ = vm.Call("generateGid", nil)
fmt.Println("generateGid value is:",value)
vm = otto.New()
vm.Set("abcd","abcd value")
value, _ = vm.Run(
"abcd.length",
)
l, _ := value.ToInteger()
fmt.Println("abcd.length value is:",l)
}