CARVIEW |
Select Language
HTTP/2 302
date: Mon, 21 Jul 2025 14:37:02 GMT
content-type: text/html; charset=utf-8
content-length: 0
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/953331272/cc89260c-4781-49d5-a043-c841a82a8fbe?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=releaseassetproduction%2F20250721%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250721T143702Z&X-Amz-Expires=1800&X-Amz-Signature=a1bdd7bdd1d5a3abd6736744659494278295dc93528f8f582a3ccd24d7bdc39f&X-Amz-SignedHeaders=host&response-content-disposition=attachment%3B%20filename%3Dkey_obfuscate_cli.lua&response-content-type=application%2Foctet-stream
cache-control: no-cache
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
x-github-request-id: A36A:134C64:200D2D9:2836274:687E508D
HTTP/2 200
content-type: application/octet-stream
last-modified: Sun, 23 Mar 2025 21:45:27 GMT
etag: "0x8DD6A540645AFDC"
server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 50228e3c-401e-0049-424c-faa3be000000
x-ms-version: 2025-05-05
x-ms-creation-time: Sun, 23 Mar 2025 21:45:27 GMT
x-ms-blob-content-md5: 9nRgneT63ZPtRXKfczS7Yg==
x-ms-lease-status: unlocked
x-ms-lease-state: available
x-ms-blob-type: BlockBlob
content-disposition: attachment; filename=key_obfuscate_cli.lua
x-ms-server-encrypted: true
via: 1.1 varnish, 1.1 varnish
fastly-restarts: 1
accept-ranges: bytes
age: 0
date: Mon, 21 Jul 2025 14:37:03 GMT
x-served-by: cache-iad-kjyo7100071-IAD, cache-bom4736-BOM
x-cache: MISS, MISS
x-cache-hits: 0, 0
x-timer: S1753108622.377938,VS0,VE217
content-length: 37256
function PrivateDarwing_parse_to_bytes(seq)
local buffer = {}
for i = 1, #seq do
buffer[#buffer + 1] = string.char(seq[i])
end
return buffer
end
PRIVATE_DARWIN_cli_SO_INCLUDED = {}
private_darwin_sha03bb74ec6e0c02cb1703b320bbd30942158017a09364f6b507582ad54a9ea12c = table.concat(PrivateDarwing_parse_to_bytes({85,115,97,103,101,58,32,75,101,121,79,98,102,117,115,99,97,116,101,32,91,102,108,97,103,115,93,10,32,32,32,32,45,101,44,32,32,45,45,101,110,116,114,121,32,60,116,101,120,116,62,32,32,32,32,32,32,32,32,32,32,32,32,79,98,102,117,115,99,97,116,101,115,32,116,104,101,32,103,105,118,101,110,32,116,101,120,116,10,32,32,32,32,45,101,102,44,32,45,45,101,110,116,114,121,95,102,105,108,101,32,60,112,97,116,104,62,32,32,32,32,32,32,32,82,101,97,100,115,32,116,104,101,32,116,101,120,116,32,116,111,32,101,110,99,114,121,112,116,32,102,114,111,109,32,97,32,102,105,108,101,10,32,32,32,32,45,112,110,44,32,45,45,112,114,111,106,101,99,116,95,110,97,109,101,32,60,110,97,109,101,62,32,32,32,32,32,68,101,102,105,110,101,115,32,116,104,101,32,112,114,111,106,101,99,116,32,110,97,109,101,10,32,32,32,32,45,111,44,32,32,45,45,111,117,116,112,117,116,32,60,112,97,116,104,62,32,32,32,32,32,32,32,32,32,32,32,83,101,116,115,32,116,104,101,32,111,117,116,112,117,116,32,104,101,97,100,101,114,32,102,105,108,101,32,40,100,101,102,97,117,108,116,58,32,60,112,114,111,106,101,99,116,95,110,97,109,101,62,46,104,41,10,32,32,32,32,45,115,44,32,32,45,45,115,101,101,100,32,60,110,117,109,98,101,114,62,32,32,32,32,32,32,32,32,32,32,32,83,112,101,99,105,102,105,101,115,32,116,104,101,32,114,97,110,100,111,109,32,115,101,101,100,32,40,100,101,102,97,117,108,116,58,32,49,48,48,48,41,10,32,32,32,32,45,100,44,32,32,45,45,100,101,98,117,103,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,69,110,97,98,108,101,115,32,100,101,98,117,103,32,109,111,100,101,10,10,65,100,100,105,116,105,111,110,97,108,32,102,108,97,103,115,58,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,102,97,107,101,95,98,121,116,101,95,115,101,116,32,60,112,114,111,98,62,32,32,32,32,32,80,114,111,98,97,98,105,108,105,116,121,32,111,102,32,105,110,115,101,114,116,105,110,103,32,102,97,107,101,32,98,121,116,101,115,32,40,100,101,102,97,117,108,116,58,32,48,46,51,51,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,99,114,101,97,116,101,95,97,95,105,110,116,101,103,101,114,32,60,112,114,111,98,62,32,32,80,114,111,98,97,98,105,108,105,116,121,32,111,102,32,103,101,110,101,114,97,116,105,110,103,32,105,110,116,101,103,101,114,32,105,110,115,116,114,117,99,116,105,111,110,115,32,40,100,101,102,97,117,108,116,58,32,48,46,51,51,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,99,114,101,97,116,101,95,97,95,102,111,114,32,60,112,114,111,98,62,32,32,32,32,32,32,80,114,111,98,97,98,105,108,105,116,121,32,111,102,32,103,101,110,101,114,97,116,105,110,103,32,70,79,82,32,108,111,111,112,115,32,40,100,101,102,97,117,108,116,58,32,48,46,51,51,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,99,114,101,97,116,101,95,97,95,105,102,32,60,112,114,111,98,62,32,32,32,32,32,32,32,80,114,111,98,97,98,105,108,105,116,121,32,111,102,32,103,101,110,101,114,97,116,105,110,103,32,73,70,32,115,116,97,116,101,109,101,110,116,115,32,40,100,101,102,97,117,108,116,58,32,48,46,51,51,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,114,101,97,108,95,98,121,116,101,95,115,101,116,32,60,112,114,111,98,62,32,32,32,32,32,80,114,111,98,97,98,105,108,105,116,121,32,111,102,32,105,110,115,101,114,116,105,110,103,32,114,101,97,108,32,98,121,116,101,115,32,40,100,101,102,97,117,108,116,58,32,48,46,53,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,109,97,120,95,115,99,111,112,101,115,32,60,110,117,109,98,101,114,62,32,32,32,32,32,32,77,97,120,105,109,117,109,32,115,99,111,112,101,32,98,108,111,99,107,115,32,116,111,32,103,101,110,101,114,97,116,101,32,40,100,101,102,97,117,108,116,58,32,51,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,99,108,111,115,101,95,115,99,111,112,101,115,32,60,112,114,111,98,62,32,32,32,32,32,32,80,114,111,98,97,98,105,108,105,116,121,32,116,111,32,99,108,111,115,101,32,115,99,111,112,101,115,32,40,100,101,102,97,117,108,116,58,32,48,46,54,54,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,109,97,120,95,111,112,101,114,97,116,105,111,110,115,95,112,101,114,95,108,105,110,101,32,60,110,117,109,62,32,77,97,120,32,111,112,101,114,97,116,105,111,110,115,32,112,101,114,32,108,105,110,101,32,40,100,101,102,97,117,108,116,58,32,54,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,109,105,110,95,111,112,101,114,97,116,105,111,110,115,95,112,101,114,95,108,105,110,101,32,60,110,117,109,62,32,77,105,110,32,111,112,101,114,97,116,105,111,110,115,32,112,101,114,32,108,105,110,101,32,40,100,101,102,97,117,108,116,58,32,50,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,99,114,101,97,116,101,95,97,95,105,110,116,101,103,101,114,95,97,102,116,101,114,49,48,32,60,112,114,111,98,62,32,67,104,97,110,99,101,32,116,111,32,99,114,101,97,116,101,32,105,110,116,101,103,101,114,32,105,110,115,116,114,117,99,116,105,111,110,115,32,97,102,116,101,114,32,49,48,32,40,100,101,102,97,117,108,116,58,32,48,46,49,48,41,10,32,32,32,32,32,32,32,32,32,32,32,32,45,45,99,114,101,97,116,101,95,97,95,105,110,116,101,103,101,114,95,97,102,116,101,114,53,48,32,60,112,114,111,98,62,32,67,104,97,110,99,101,32,116,111,32,99,114,101,97,116,101,32,105,110,116,101,103,101,114,32,105,110,115,116,114,117,99,116,105,111,110,115,32,97,102,116,101,114,32,53,48,32,40,100,101,102,97,117,108,116,58,32,48,46,48,53,41,10,10,69,120,97,109,112,108,101,115,58,10,32,32,32,32,75,101,121,79,98,102,117,115,99,97,116,101,32,45,45,101,110,116,114,121,32,34,109,121,32,115,101,99,114,101,116,34,32,45,45,115,101,101,100,32,49,50,51,52,32,45,45,112,114,111,106,101,99,116,95,110,97,109,101,32,34,109,121,95,112,114,111,106,101,99,116,34,32,45,45,111,117,116,112,117,116,32,34,109,121,95,111,117,116,46,104,34,10,32,32,32,32,75,101,121,79,98,102,117,115,99,97,116,101,32,45,45,101,110,116,114,121,95,102,105,108,101,32,115,101,99,114,101,116,115,46,116,120,116,32,45,45,112,114,111,106,101,99,116,95,110,97,109,101,32,34,112,114,111,106,101,99,116,50,34,32,45,45,100,101,98,117,103,}))
help = private_darwin_sha03bb74ec6e0c02cb1703b320bbd30942158017a09364f6b507582ad54a9ea12c;
key_obfuscate = function()
function PrivateDarwing_parse_to_bytes(seq)
local buffer = {}
for i = 1, #seq do
buffer[#buffer + 1] = string.char(seq[i])
end
return buffer
end
PRIVATE_DARWIN_key_obfuscate_SO_INCLUDED = {}
private_key_obfuscate = {}
public_key_obfuscate = {}
private_key_obfuscate.create_for = function(props,randonizer,procedural_props,project_name,code, already_existed_integers,bytes_to_save,total_scope)
local var_name = project_name.."_scope_"..total_scope
local predictibble = private_key_obfuscate.make_predicible_operation(randonizer,procedural_props,project_name, already_existed_integers,bytes_to_save)
code.append(private_key_obfuscate.create_padding(total_scope).."for(int "..var_name.." = "..predictibble.code.."; "..var_name.." < "..(predictibble.eval+1) .."; "..var_name.."++){\\\n")
end
private_key_obfuscate.create_if = function(props,randonizer,procedural_props,project_name,code, already_existed_integers,bytes_to_save,total_scope)
local predictibble = private_key_obfuscate.make_predicible_operation(randonizer,procedural_props,project_name, already_existed_integers,bytes_to_save)
local comparation = randonizer.choice({"==","<",">","<=",">=","~="})
local dif = 0
if comparation == "<"then
dif = 1
end
if comparation == ">"then
dif = -1
end
if comparation == "~="then
dif = 2
end
code.append(private_key_obfuscate.create_padding(total_scope))
code.append("if(")
code.append(predictibble.code)
code.append(" ")
code.append(comparation)
code.append(" ")
code.append(predictibble.eval+dif)
code.append("){\\\n")
end
private_key_obfuscate.create_integer = function(props,randonizer,procedural_props,project_name,code, already_existed_integers,bytes_to_save,total_scope)
local index = #already_existed_integers + 1
local name = project_name.."_integer_"..index
code.append(private_key_obfuscate.create_padding(total_scope).."int "..name.." = ")
local predictibble = private_key_obfuscate.make_predicible_operation(randonizer,procedural_props,project_name, already_existed_integers,bytes_to_save)
code.append(predictibble.code)
code.append(";")
code.append("/*create:")
code.append(predictibble.eval)
code.append("*/")
code.append("\\\n")
--code.append(predictibble.evalated_str)
already_existed_integers[index] = predictibble.eval
if props.debug then
code.append("\tif("..predictibble.eval.." != "..name.."){")
code.append('printf("expected %d and was %d at var ('..name..')\\n",'..predictibble.eval..','..name..');')
code.append("}\\\n")
end
--code.append('printf("expected %d and was %d \\n",'..predictibble.eval..','..name..');')
--code.append("\\\n")
end
private_key_obfuscate.fake_byte_set = function(props,randonizer,procedural_props,project_name,code, already_existed_integers,bytes_to_save,total_scope)
local chosen_byte = private_key_obfuscate.get_randon_not_ajusted_byte(randonizer,bytes_to_save)
if not chosen_byte then
return
end
code.append(private_key_obfuscate.create_padding(total_scope).."key["..chosen_byte.index.."] = ")
predictibble = private_key_obfuscate.make_predicible_operation(randonizer,procedural_props,project_name, already_existed_integers,bytes_to_save)
local fake_value = randonizer.generate_num(1,230)
chosen_byte.ajusted = false
chosen_byte.current_value = fake_value
code.append(predictibble.code)
if predictibble.eval > 0 then
code.append(" - ")
code.append(predictibble.eval -fake_value)
end
if predictibble.eval <= 0 then
code.append(" + ")
code.append(fake_value - predictibble.eval)
end
code.append(";")
code.append("/*fake:")
code.append(chosen_byte.byte)
code.append("*/")
code.append("\\\n")
if props.debug then
code.append("\tif("..chosen_byte.byte.." != key["..chosen_byte.index.."]){")
code.append('printf("expected %d and was %d at key['..chosen_byte.index..']\\n",'..chosen_byte.byte..',key['..chosen_byte.index..']);')
code.append("}\\\n")
end
end
private_key_obfuscate.integer_set = function(props,randonizer,procedural_props,project_name,code, already_existed_integers,bytes_to_save,total_scope)
if #already_existed_integers == 0 then
return
end
local index = 1
if #already_existed_integers > 1 then
index = randonizer.generate_num(1,#already_existed_integers)
end
local chosen_index_str =""..index
local formmated_index = ""
for j=1,#chosen_index_str do
local current_char =private_key_obfuscate.sub(chosen_index_str,j,j)
if current_char == "." then
break
end
formmated_index = formmated_index.. current_char
end
local name = project_name.."_integer_"..formmated_index
code.append(private_key_obfuscate.create_padding(total_scope)..name.." = ")
local predictibble = private_key_obfuscate.make_predicible_operation(randonizer,procedural_props,project_name, already_existed_integers,bytes_to_save)
code.append(predictibble.code)
code.append(";")
code.append("/*set:")
code.append(predictibble.eval)
code.append("*/")
code.append("\\\n")
--code.append(predictibble.evalated_str)
already_existed_integers[index] = predictibble.eval
if props.debug then
code.append("\tif("..predictibble.eval.." != "..name.."){")
code.append('printf("expected %d and was %d at var ('..name..')\\n",'..predictibble.eval..','..name..');')
code.append("}\\\n")
end
--code.append('printf("expected %d and was %d \\n",'..predictibble.eval..','..name..');')
--code.append("\\\n")
end
private_key_obfuscate.real_byte_sec = function(props,randonizer,procedural_props,project_name,code, already_existed_integers,bytes_to_save,total_scope)
local chosen_byte = private_key_obfuscate.get_randon_not_ajusted_byte(randonizer,bytes_to_save)
code.append(private_key_obfuscate.create_padding(total_scope).."key["..chosen_byte.index.."] = ")
predictibble = private_key_obfuscate.make_predicible_operation(randonizer,procedural_props,project_name, already_existed_integers,bytes_to_save)
code.append(predictibble.code)
if predictibble.eval > 0 then
code.append(" - ")
code.append(predictibble.eval -chosen_byte.byte)
end
if predictibble.eval <= 0 then
code.append(" + ")
code.append(chosen_byte.byte - predictibble.eval)
end
code.append(";")
code.append("/*set:")
code.append(chosen_byte.byte)
code.append("*/")
code.append("\\\n")
if props.debug then
code.append("\tif("..chosen_byte.byte.." != key["..chosen_byte.index.."]){")
code.append('printf("expected %d and was %d at key['..chosen_byte.index..']\\n",'..chosen_byte.byte..',key['..chosen_byte.index..']);')
code.append("}\\\n")
end
chosen_byte.ajusted = true
chosen_byte.current_value = chosen_byte.byte
end
private_key_obfuscate.create_bytes_to_save =function(key,starter_num)
local bytes_to_save = {}
for i=1,#key do
local byte_converted = private_key_obfuscate.byte(private_key_obfuscate.sub(key,i,i))
if byte_converted < 0 then
print("Error: byte_converted < 0")
end
bytes_to_save[i] = {
byte = byte_converted,
index = i-1,--these its required because its a c array
ajusted = false,
current_value= starter_num
}
end
return bytes_to_save
end
private_key_obfuscate.terminated= function(bytes_to_save)
for i=1,#bytes_to_save do
if bytes_to_save[i].ajusted == false then
return false
end
end
return true
end
private_key_obfuscate.get_randon_byte = function(randonizer,bytes_to_save)
local index = randonizer.generate_num(1,#bytes_to_save)
return bytes_to_save[index]
end
private_key_obfuscate.get_randon_not_ajusted_byte = function(randonizer,bytes_to_save)
local total_not_ajusted = {}
for i=1,#bytes_to_save do
if bytes_to_save[i].ajusted == false then
total_not_ajusted[#total_not_ajusted + 1] = bytes_to_save[i]
end
end
if #total_not_ajusted == 0 then
return nil
end
if #total_not_ajusted == 1 then
return total_not_ajusted[1]
end
local index = randonizer.generate_num(1,#total_not_ajusted)
return total_not_ajusted[index]
end
private_key_obfuscate.newCodeFormater = function()
local added = {}
local self_obj = {}
self_obj.append = function(code)
added[#added + 1] = code
end
self_obj.get_code = function()
return private_key_obfuscate.concat(added)
end
return self_obj
end
if string then
private_key_obfuscate.sub = string.sub
private_key_obfuscate.byte = string.byte
end
if table then
private_key_obfuscate.concat = table.concat
end
if pairs then
private_key_obfuscate.pairs = pairs
end
if load then
private_key_obfuscate.load = load
end
private_key_obfuscate.create_padding = function(size)
local padding = "\t"
for i=1,size do
padding = padding.."\t"
end
return padding
end
private_key_obfuscate.parse_to_int_str = function(num)
local int_str = ""..num
local formmated = ""
for i=1,#int_str do
local current_char = private_key_obfuscate.sub(int_str,i,i)
if current_char == "." then
break
end
formmated = formmated..current_char
end
return formmated
end
private_key_obfuscate.make_predicible_operation = function(randonizer,procedural_props,project_name, already_existed_integers,bytes_to_save)
local total_operations = randonizer.generate_num(
procedural_props.min_operations_per_line,
procedural_props.max_operations_per_line
)
local evalated_str = "return "
local code = "("
for i=1,total_operations do
local operation_item = randonizer.choice({"byte","integer","random"})
if operation_item == "byte" then
local chosen_byte = private_key_obfuscate.get_randon_byte(randonizer,bytes_to_save)
code = code.." ".."key["..chosen_byte.index.."]"
evalated_str = evalated_str.." "..private_key_obfuscate.parse_to_int_str(chosen_byte.current_value)
elseif operation_item == "integer" and #already_existed_integers > 0 then
local chosen_index =1
if #already_existed_integers > 1 then
chosen_index = randonizer.generate_num(1,#already_existed_integers)
end
local formmated_index = private_key_obfuscate.parse_to_int_str (chosen_index)
local name = project_name.."_integer_"..formmated_index
local value = already_existed_integers[chosen_index]
code = code.." "..name
evalated_str = evalated_str.." "..private_key_obfuscate.parse_to_int_str(value)
else
local randon_int = randonizer.generate_num(1000,100000)
code = code.." "..randon_int
evalated_str = evalated_str.." "..private_key_obfuscate.parse_to_int_str(randon_int)
end
local operation = randonizer.choice({"+","-","*"})
if i < total_operations then
code = code .." "..operation
evalated_str = evalated_str.." "..operation
end
end
code = code..")"
--print("evalated_str",evalated_str)
return {code = code,eval = private_key_obfuscate.load(evalated_str)()}
end
public_key_obfuscate.create_procedural_generation = function(props)
local randonizer = private_key_obfuscate.newRandonizer(props.seed)
local starter_num = randonizer.generate_num(1,100)
local bytes_to_save = private_key_obfuscate.create_bytes_to_save(props.key,starter_num)
local code =private_key_obfuscate.newCodeFormater()
local procedural_props = private_key_obfuscate.create_procedural_props(props)
code.append("#ifndef "..props.name .. "_get_key_h\n")
code.append("#define "..props.name .. "_get_key_h\n")
code.append("#define "..props.name.."key_size "..#bytes_to_save.."\n")
code.append("#define "..props.name.."_get_key(key) \\\n")
code.append("\tfor(int i=0;i<"..#bytes_to_save..";i++){")
code.append("key[i] = "..starter_num..";}\\\n")
--set 0 to end
code.append("\tkey["..#bytes_to_save.."] = 0;\\\n")
local created_integers = {}
local total_scopes = 0
while true do
if private_key_obfuscate.terminated(bytes_to_save) then
break
end
if total_scopes < procedural_props.max_scopes then
local create_for = randonizer.generate_num(1,100)
if create_for <= procedural_props.create_a_for * 100 then
private_key_obfuscate.create_for(props,randonizer,procedural_props,props.name,code,created_integers,bytes_to_save,total_scopes)
total_scopes = total_scopes + 1
end
local create_if = randonizer.generate_num(1,100)
if create_if <= procedural_props.create_a_if * 100 then
private_key_obfuscate.create_if(props,randonizer,procedural_props,props.name,code,created_integers,bytes_to_save,total_scopes)
total_scopes = total_scopes + 1
end
end
local create_integer_choice = randonizer.generate_num(1,100)
local create_integer_probability = procedural_props.create_a_integer
if #created_integers >10 then
create_integer_probability = procedural_props.create_a_integer_after10
end
if #created_integers >50 then
create_integer_probability = procedural_props.create_a_integer_after50
end
--these stop the creation of integers
if #created_integers >100 or total_scopes > 0 then
create_integer_probability = -1
end
if create_integer_choice <= create_integer_probability * 100 then
private_key_obfuscate.create_integer(props,randonizer,procedural_props,props.name,code,created_integers,bytes_to_save,total_scopes)
end
local set_real_byte = randonizer.generate_num(1,100)
if set_real_byte <= procedural_props.real_byte_set * 100 then
private_key_obfuscate.real_byte_sec(props,randonizer,procedural_props,props.name,code,created_integers,bytes_to_save,total_scopes)
end
local set_fake_byte = randonizer.generate_num(1,100)
if set_fake_byte <= procedural_props.fake_byte_set * 100 then
private_key_obfuscate.fake_byte_set(props,randonizer,procedural_props,props.name,code,created_integers,bytes_to_save,total_scopes)
end
if total_scopes > 0 then
local close_scope = randonizer.generate_num(1,100)
if close_scope <= procedural_props.close_scopes * 100 then
total_scopes = total_scopes - 1
code.append(private_key_obfuscate.create_padding(total_scopes).."}\\\n")
end
end
local set_integer = randonizer.generate_num(1,100)
if set_integer <= procedural_props.integer_set * 100 then
private_key_obfuscate.integer_set(props,randonizer,procedural_props,props.name,code,created_integers,bytes_to_save,total_scopes)
end
end
-- close all scopes
for i=1,total_scopes do
code.append("\t}\\\n")
end
code.append("\n#endif\n")
return code.get_code()
end
private_key_obfuscate.create_procedural_props = function(user_props)
local defaut_props = {
fake_byte_set = 0.5, --chance to set a unset byte a fake value
create_a_integer = 0.33, --chance of create a interger swap value
create_a_integer_after10 = 0.10,
create_a_integer_after50 = 0.05,
make_a_usless_operation = 0.33,
max_operations_per_line = 6,
min_operations_per_line = 2,
create_a_for =0.33,
create_a_if = 0.33,
max_scopes = 3,
close_scopes = 0.66,
integer_set = 0.33,
fake_byte_set = 0.33,
real_byte_set = 0.5,
}
if not user_props then
return defaut_props
end
for key,value in pairs(defaut_props) do
if user_props[key] then
defaut_props[key] = user_props[key]
end
end
return defaut_props
end
private_key_obfuscate.flor = function(value)
return value - (value % 1)
end
private_key_obfuscate.ajust = function(value,min,max)
while value > max or value < min do
if(value > max) then
value = value / 3.9
end
if(value < min) then
value = value * 3.5
end
end
return private_key_obfuscate.flor(value)
end
private_key_obfuscate.rand_generate = function(value,seed)
local TOTAL_LOOPS = 20
local MIN_LIMIT = 1000
local MAX_LIMIT = 100000
local result = value
for i=1,TOTAL_LOOPS do
result = result * (seed / i + seed)
result = result * result
result = private_key_obfuscate.ajust(result,MIN_LIMIT,MAX_LIMIT)
end
return private_key_obfuscate.ajust(result,MIN_LIMIT,MAX_LIMIT)
end
private_key_obfuscate.newRandonizer = function(seed)
local self_obj = {}
local seed = seed
local increment = 10
self_obj.generate_num = function(min,max)
if min == max then
return min
end
increment = increment + 10
local num = private_key_obfuscate.rand_generate(increment,seed)
return private_key_obfuscate.ajust(num,min,max)
end
self_obj.choice = function(itens)
if #itens == 0 then
return nil
end
if #itens == 1 then
return itens[1]
end
local index = self_obj.generate_num(1,#itens)
return itens[index]
end
return self_obj
end
return public_key_obfuscate
end
key_obfuscate = key_obfuscate()
argv = function()
private_luargv = {}
luargv = {}
private_lua_argv_string_functions = {}
-- file: src/luargv/base_flags.lua
luargv.get_flag_size = function(flags)
if luargv.type(flags) == "string" then
flags = { flags }
end
local total_found = 0
local args_size = luargv.get_total_args_size()
local capturing_flags = false
for i = 1, args_size do
local current = luargv.get_arg_by_index_not_adding_to_used(i)
local possible_flag = private_luargv.get_formmated_flag_if_its_a_flag(current)
if possible_flag then
if private_luargv.is_inside(flags, possible_flag) then
capturing_flags = true
else
capturing_flags = false
end
end
if capturing_flags and not possible_flag then
total_found = total_found + 1
end
end
return total_found
end
luargv.get_flag_arg_by_index = function(flags, index, default)
if luargv.type(flags) == "string" then
flags = { flags }
end
local total_found = 0
local args_size = luargv.get_total_args_size()
local capturing_flags = false
local possible_flag_index = nil
for i = 1, args_size do
local current = luargv.get_arg_by_index_not_adding_to_used(i)
local possible_flag = private_luargv.get_formmated_flag_if_its_a_flag(current)
if possible_flag then
if private_luargv.is_inside(flags, possible_flag) then
possible_flag_index = i
capturing_flags = true
else
capturing_flags = false
end
end
if capturing_flags and not possible_flag then
total_found = total_found + 1
if total_found == index then
if possible_flag_index then
luargv.add_used_args_by_index(possible_flag_index)
end
luargv.add_used_args_by_index(i)
return current
end
end
end
return default
end
luargv.flags_exist = function(flags)
local args_size = luargv.get_total_args_size()
for i = 1, args_size do
local current = luargv.get_arg_by_index_not_adding_to_used(i)
local possible_flag = private_luargv.get_formmated_flag_if_its_a_flag(current)
if possible_flag then
if private_luargv.is_inside(flags, possible_flag) then
return true
end
end
end
return false
end
-- file: src/luargv/basic.lua
luargv.one_of_args_exist = function(args_list)
if luargv.type(args_list) == "string" then
args_list = { args_list }
end
for i = 1, #args_list do
local arg_value = args_list[i]
local size = luargv.get_total_args_size()
for i = 1, size do
local current = luargv.get_arg_by_index_not_adding_to_used(i)
if current == arg_value then
luargv.add_used_args_by_index(i)
return true
end
end
return false
end
end
luargv.get_total_args_size = function()
local count = 0
for i = -3, 1000000 do
local current = luargv.argslist[i]
if current then
count = count + 1
end
if i > 0 and current == nil then
return count
end
end
return 0
end
luargv.get_arg_by_index_not_adding_to_used = function(index)
local decrementer = 0
for i = 0, 1000000 do
local converted_i = i * -1
if luargv.argslist[converted_i] == nil then
break
end
decrementer = decrementer + 1
end
return luargv.argslist[index - decrementer]
end
luargv.get_arg_by_index = function(index)
luargv.add_used_args_by_index(index)
return luargv.get_arg_by_index_not_adding_to_used(index)
end
-- file: src/luargv/compact_flag.lua
luargv.get_compact_flags = function(flags, index, default)
local converted_flags = flags
if luargv.type(flags) == "string" then
---@type string
flags = flags
flags = { flags }
end
local total = 0
for i = 1, #flags do
local flag_name = flags[i]
local flag_size = luargv.get_str_size(flag_name)
local args_size = luargv.get_total_args_size()
for i = 1, args_size do
local current = luargv.get_arg_by_index_not_adding_to_used(i)
if private_luargv.starts_with(current, flag_name) then
total = total + 1
if total == index then
local current_size = luargv.get_str_size(current)
local formmated = luargv.substr_func(current, flag_size + 1, current_size)
luargv.add_used_args_by_index(i)
return formmated
end
end
end
end
return default
end
luargv.get_compact_flags_size = function(flags)
local converted_flags = flags
if luargv.type(flags) == "string" then
flags = { flags }
end
local total = 0
for i = 1, #flags do
local flag_name = flags[i]
local flag_size = luargv.get_str_size(flag_name)
local args_size = luargv.get_total_args_size()
for i = 1, args_size do
local current = luargv.get_arg_by_index_not_adding_to_used(i)
if private_luargv.starts_with(current, flag_name) then
total = total + 1
end
end
end
return total
end
-- file: src/luargv/constructor.lua
luargv.argslist = arg
luargv.flag_identifiers = { "-", "--" }
luargv.used_args = {}
if string then
luargv.substr_func = string.sub
luargv.get_str_size = string.len
end
luargv.type = type
if not luargv.get_str_size then
luargv.get_str_size = function(str)
return #str
end
end
-- file: src/luargv/used_flags.lua
luargv.add_used_args_by_index = function(index)
if index > luargv.get_total_args_size() then
return
end
if not private_luargv.is_inside(luargv.used_args, index) then
luargv.used_args[#luargv.used_args + 1] = index
end
end
luargv.get_total_unused_args = function()
return luargv.get_total_args_size() - #luargv.used_args
end
luargv.get_unsed_arg_by_index = function(index)
local total = 0
local total_flags = luargv.get_total_args_size()
for i = 1, total_flags do
if not private_luargv.is_inside(luargv.used_args, i) then
total = total + 1
if total == index then
return luargv.get_arg_by_index_not_adding_to_used(i)
end
end
end
return nil
end
luargv.get_next_unused_index = function()
local total_flags = luargv.get_total_args_size()
for i = 1, total_flags do
if not private_luargv.is_inside(luargv.used_args, i) then
return i
end
end
return nil
end
luargv.get_next_unused = function()
local i = luargv.get_next_unused_index()
if i then
return luargv.get_arg_by_index(i)
end
end
-- file: src/private_luargv/algo.lua
private_luargv.starts_with = function(str, target)
local target_size = luargv.get_str_size(target)
local divided = luargv.substr_func(str, 1, target_size)
if divided == target then
return true
end
return false
end
private_luargv.get_array_size = function(array)
local i = 1
local count = 0
while array[i] do
count = count + 1
i = i + 1
end
return count
end
private_luargv.is_inside = function(array, item)
local size = private_luargv.get_array_size(array)
for i = 1, size do
if array[i] == item then
return true
end
end
return false
end
-- file: src/private_luargv/formmated_flags.lua
private_luargv.get_formmated_flag_if_its_a_flag = function(current_arg)
local total_flags = private_luargv.get_array_size(luargv.flag_identifiers)
local chose_flag_size = 0
for i = 1, total_flags do
local current_flag = luargv.flag_identifiers[i]
if private_luargv.starts_with(current_arg, current_flag) then
local current_flag_size = luargv.get_str_size(current_flag)
if current_flag_size >= chose_flag_size then
chose_flag_size = current_flag_size
end
end
end
-- means its a flag
if chose_flag_size > 0 then
local args_size = luargv.get_str_size(current_arg)
return luargv.substr_func(current_arg, chose_flag_size + 1, args_size)
end
return nil
end
-- file: src/types.lua
---@class Argv
---@field get_flag_size fun(flags:string[]|string):number
---@field get_flag_arg_by_index fun(flags:string[]|string,index:number,default:string | nil):string|nil
---@field flags_exist fun(flags:string[]):boolean
---@field one_of_args_exist fun(arg:string[] | string):boolean
---@field get_total_args_size fun():number
---@field get_arg_by_index_not_adding_to_used fun(index:number):string
---@field get_arg_by_index fun(index:number):string | nil
---@field get_compact_flags fun(flags:string[]|string,index,default:string | nil):string|nil
---@field get_compact_flags_size fun(flags:string[]|string):number
---@field used_args number[]
---@field type fun(value:any):string
---@field argslist string[]
---@field substr_func fun(str:string,start:number,endnum:number):string
---@field get_str_size fun(str:string):number
---@field flag_identifiers string[]
---@field add_used_args_by_index fun(used_flag:number)
---@field get_total_unused_args fun():number
---@field get_unsed_arg_by_index fun(index:number):string|nil
---@field get_next_unused_index fun():number|nil
---@field get_next_unused fun():string|nil
---@class PrivateArgv
---@field starts_with fun(str:string,target:string):boolean
---@field get_array_size fun(array:table):number
---@field is_inside fun(array:table,item:any):boolean
---@field get_formmated_flag_if_its_a_flag fun(current_arg:string):string |nil
---@type PrivateArgv
private_luargv = private_luargv
---@type Argv
luargv = luargv
---@type PrivateArgv
private_luargv = private_luargv
---@type Argv
luargv = luargv
return luargv
end
argv = argv()
function main()
local content = argv.get_flag_arg_by_index({"entry", "e"},1)
local help_flag = argv.flags_exist({"help", "h"})
if help_flag then
print(help)
return
end
if not content then
entry_file = argv.get_flag_arg_by_index({ "entry_file", "ef"},1)
if not entry_file then
print("No entry flag or entry file")
return
end
content = io.open(entry_file,"r")
if not content then
print("unable to open file"..entry_file)
return
end
content = content:read("a")
end
local project_name = argv.get_flag_arg_by_index({"project_name", "pn"},1)
if not project_name then
print("No project name")
return
end
local output = argv.get_flag_arg_by_index({"output", "o"},1,project_name..".h")
local seed = argv.get_flag_arg_by_index({"seed", "s"},1,1000)
--convert seed to number
seed = tonumber(seed)
if not seed then
print("Seed is not a number")
return
end
local debug = argv.get_flag_arg_by_index({"debug", "d"},1,false)
props ={
key =content,
name = project_name,
seed = seed,
debug = debug,
fake_byte_set = 0.5, --chance to set a unset byte a fake value
create_a_integer = 0.33, --chance of create a interger swap value
create_a_integer_after10 = 0.10, --chance of create a interger swap value
create_a_integer_after50 = 0.05, --chance of create a interger swap value
max_operations_per_line = 6, -- max aritmetic operations per line
min_operations_per_line = 2, -- min aritmetic operations per line
create_a_for =0.33, -- chance to create a for loop
create_a_if = 0.33, -- chance to create a if statement
max_scopes = 3, -- max scopes to create
close_scopes = 0.66, -- chance to close a scope
integer_set = 0.33, -- chance to set a integer with a random value
fake_byte_set = 0.33, -- chance to set a unset byte a fake value
real_byte_set = 0.5 -- chance to set a unset byte a real value
}
--iterate over the props and verify if a flag is provided
for k,v in pairs(props) do
local flag = argv.get_flag_arg_by_index({k},1)
if flag then
if type(v) == "number" then
flag = tonumber(flag)
end
props[k] = flag
end
end
code = key_obfuscate.create_procedural_generation (props)
io.open(output,"w"):write(code):close()
end
main()