Golang otto JS解释器简单使用

该博客展示了如何使用Otto库在Go中执行JavaScript代码,包括调用函数`withParamsFunc`进行参数逆向处理,生成全局唯一标识符`generateGid`,以及设置和获取变量值。此外,还演示了通过Otto运行JavaScript表达式获取字符串长度。
摘要由CSDN通过智能技术生成

以下用法已经基本能满足简单的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'

		`)
	// 使用vm.Call(函数名,nil,传递的参数,如果后面有多个参数,用逗号隔开就可以了)
	// 函数调用
	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)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值