получение проца

Tema05

Известный
Автор темы
1,474
439
Версия MoonLoader
.026-beta
Вставил в скрипт функцию получение проца и вот такой краш
Lua:
local qwords = ffi.typeof("uint64_t[?]")
local cpuid_EAX_EDX = ffi.cast("__cdecl uint64_t (*)(uint32_t)", "\x53\x0F\xA2\x5B\xC3")
local cpuid_EBX_ECX = ffi.cast("__cdecl uint64_t (*)(uint32_t)", "\x53\x0F\xA2\x91\x92\x93\x5B\xC3")
local function cpuid(n)
local arr = ffi.cast(ffi.typeof("uint32_t *"), qwords(2, cpuid_EAX_EDX(n), cpuid_EBX_ECX(n)))--841
return ffi.string(arr, 4), ffi.string(arr + 2, 4), ffi.string(arr + 3, 4), ffi.string(arr + 1, 4)
end
local s1 = ""
for n = 0x80000002, 0x80000004 do
  local eax, ebx, ecx, edx = cpuid(n)--846
  s1 = s1 .. eax .. ebx .. ecx .. edx
end
s1 = s1:gsub("^%s+", ""):gsub("%z+$", "")
local eax, ebx, ecx, edx = cpuid(0)
local s2 = ebx .. edx .. ecx
s2 = s2:gsub("^%s+", ""):gsub("%z+$", "")
 
Решение
Описание: Функция из сообщения:

Могла крашить у некоторых человек, функция, которая от меня, в теории должна не крашить за счёт получения информации напрямую из реестра и гораздо короче:
Lua:
function getProcessorName()
    local handle = io.popen('reg.exe QUERY HKLM\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0 /v ProcessorNameString')
    local result = handle:read("*a")
    local processor_name = result:match('REG_SZ%s+(.+)'):gsub('%s+$', '')
    handle:close()
    return processor_name
end
Пример использования:
Lua:
print(getProcessorName())
-- Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz





Описание: Получение серийного ключа самого жёсткого диска (не логического)
Lua:
function...

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,201
говно:
function getProcessorName_code(n)
    local ffi = require("ffi")
    local qwords = ffi.typeof("uint64_t[?]")
    local dwords = ffi.typeof("uint32_t *")
    local cpuid_EAX_EDX = ffi.cast("__cdecl uint64_t (*)(uint32_t)", "\x53\x0F\xA2\x5B\xC3")
    local cpuid_EBX_ECX = ffi.cast("__cdecl uint64_t (*)(uint32_t)", "\x53\x0F\xA2\x91\x92\x93\x5B\xC3")
  
    local arr = ffi.cast(dwords, qwords(2, cpuid_EAX_EDX(n), cpuid_EBX_ECX(n)))
    return ffi.string(arr, 4), ffi.string(arr + 2, 4), ffi.string(arr + 3, 4), ffi.string(arr + 1, 4)
end
 
function getProcessorName()
    local s1 = ""
    for n = 0x80000002, 0x80000004 do
        local eax, ebx, ecx, edx = getProcessorName_code(n)
        s1 = s1..eax..ebx..ecx..edx
    end
    s1 = s1:gsub("^%s+", ""):gsub("%z+$", "")
   print(s1) -- пишет какой у тя проц
    return s1
end
 

Tema05

Известный
Автор темы
1,474
439
говно:
function getProcessorName_code(n)
    local ffi = require("ffi")
    local qwords = ffi.typeof("uint64_t[?]")
    local dwords = ffi.typeof("uint32_t *")
    local cpuid_EAX_EDX = ffi.cast("__cdecl uint64_t (*)(uint32_t)", "\x53\x0F\xA2\x5B\xC3")
    local cpuid_EBX_ECX = ffi.cast("__cdecl uint64_t (*)(uint32_t)", "\x53\x0F\xA2\x91\x92\x93\x5B\xC3")
 
    local arr = ffi.cast(dwords, qwords(2, cpuid_EAX_EDX(n), cpuid_EBX_ECX(n)))
    return ffi.string(arr, 4), ffi.string(arr + 2, 4), ffi.string(arr + 3, 4), ffi.string(arr + 1, 4)
end

function getProcessorName()
    local s1 = ""
    for n = 0x80000002, 0x80000004 do
        local eax, ebx, ecx, edx = getProcessorName_code(n)
        s1 = s1..eax..ebx..ecx..edx
    end
    s1 = s1:gsub("^%s+", ""):gsub("%z+$", "")
   print(s1) -- пишет какой у тя проц
    return s1
end
Ну и как тогда?
 

sᴀxᴏɴ

саксофон
Всефорумный модератор
791
853
Описание: Функция из сообщения:

Могла крашить у некоторых человек, функция, которая от меня, в теории должна не крашить за счёт получения информации напрямую из реестра и гораздо короче:
Lua:
function getProcessorName()
    local handle = io.popen('reg.exe QUERY HKLM\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0 /v ProcessorNameString')
    local result = handle:read("*a")
    local processor_name = result:match('REG_SZ%s+(.+)'):gsub('%s+$', '')
    handle:close()
    return processor_name
end
Пример использования:
Lua:
print(getProcessorName())
-- Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz





Описание: Получение серийного ключа самого жёсткого диска (не логического)
Lua:
function getHarddiskSerial()
    local handle = io.popen('wmic diskdrive get serialnumber')
    local result = handle:read("*a")
    local serial = result:match('SerialNumber%s+(%d+)')
    handle:close()
    return serial
end
Пример использования:
Lua:
print(getHarddiskSerial())
-- 31297901273561723 (цифры рандомно ввёл, у вас же данные у каждого пользователя должны быть статические (не будут меняться, но у каждого должны быть индивидуальные цифры), и да, он такой же длинный.
 
  • Влюблен
Реакции: Yans