Skip to content

Commit 82f273d

Browse files
committed
Add Numbers to Expressions Step
1 parent 83bdefa commit 82f273d

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
-- This Script is Part of the Prometheus Obfuscator by Levno_710
2+
--
3+
-- NumbersToExpressions.lua
4+
--
5+
-- This Script provides an Obfuscation Step, that converts Number Literals to expressions
6+
unpack = unpack or table.unpack;
7+
8+
local Step = require("prometheus.step");
9+
local Ast = require("prometheus.ast");
10+
local Scope = require("prometheus.scope");
11+
local visitast = require("prometheus.visitast");
12+
local util = require("prometheus.util")
13+
14+
local AstKind = Ast.AstKind;
15+
16+
local NumbersToExpressions = Step:extend();
17+
NumbersToExpressions.Description = "This Step Converts number Literals to Expressions";
18+
NumbersToExpressions.Name = "Numbers To Expressions";
19+
20+
NumbersToExpressions.SettingsDescriptor = {
21+
Treshold = {
22+
type = "number",
23+
default = 1,
24+
min = 0,
25+
max = 1,
26+
},
27+
InternalTreshold = {
28+
type = "number",
29+
default = 0.2,
30+
min = 0,
31+
max = 0.8,
32+
}
33+
}
34+
35+
function NumbersToExpressions:init(settings)
36+
self.ExpressionGenerators = {
37+
function(val, depth) -- Addition
38+
local val2 = math.random(-2^20, 2^20);
39+
local diff = val - val2;
40+
if tonumber(tostring(diff)) + tonumber(tostring(val2)) ~= val then
41+
return false;
42+
end
43+
return Ast.AddExpression(self:CreateNumberExpression(val2, depth), self:CreateNumberExpression(diff, depth), false);
44+
end,
45+
function(val, depth) -- Subtraction
46+
local val2 = math.random(-2^20, 2^20);
47+
local diff = val + val2;
48+
if tonumber(tostring(diff)) - tonumber(tostring(val2)) ~= val then
49+
return false;
50+
end
51+
return Ast.SubExpression(self:CreateNumberExpression(diff, depth), self:CreateNumberExpression(val2, depth), false);
52+
end
53+
}
54+
end
55+
56+
function NumbersToExpressions:CreateNumberExpression(val, depth)
57+
if depth > 0 and math.random() >= self.InternalTreshold or depth > 15 then
58+
return Ast.NumberExpression(val)
59+
end
60+
61+
local generators = util.shuffle({unpack(self.ExpressionGenerators)});
62+
for i, generator in ipairs(generators) do
63+
local node = generator(val, depth + 1);
64+
if node then
65+
return node;
66+
end
67+
end
68+
69+
return Ast.NumberExpression(val)
70+
end
71+
72+
function NumbersToExpressions:apply(ast)
73+
visitast(ast, nil, function(node, data)
74+
if node.kind == AstKind.NumberExpression then
75+
if math.random() <= self.Treshold then
76+
return self:CreateNumberExpression(node.value, 0);
77+
end
78+
end
79+
end)
80+
end
81+
82+
return NumbersToExpressions;

0 commit comments

Comments
 (0)