1

Тема: AHK: результаты работы скрипта и exe файла отличаются

Всем привет!
Есть такой код (создание идентификатора компьютера по разным системным переменным, взято  с англоязычного форума AHK http://www.autohotkey.com/board/topic/5 … rotection/)

    SWP_Initialize()
    Fingerprint := SWP_GetPcFingerprint()
    IfExist, %A_ScriptDir%\activation.txt
        FileDelete, %A_ScriptDir%\activation.txt
    FileAppend, Activation info: %Fingerprint%`n, %A_ScriptDir%\activation.txt
    Run, %A_ScriptDir%\activation.txt
return

SWP_Initialize( mk0=0x11111111, mk1=0x22222222, mk2=0x33333333, mk3=0x44444444, ml0=0x12345678, ml1=0x12345678, mm0=0x87654321, mm1=0x87654321 ) 
    {
                Global
            k0 := mk0        ; 128-bit secret key (example)
            k1 := mk1
            k2 := mk2
            k3 := mk3

            l0 := ml0        ; 64- bit 2nd secret key (example)
            l1 := ml1
            m0 := mm0    ; 64- bit 3rd secret key (example)
            m1 := mm1
    }

SWP_GetPcFingerprint() 
    {
        PCdata = %COMPUTERNAME%%HOMEPATH%%USERNAME%%PROCESSOR_ARCHITECTURE%%PROCESSOR_IDENTIFIER%
        PCdata = %PCdata%%PROCESSOR_LEVEL%%PROCESSOR_REVISION%%A_OSType%%A_OSVersion%%Language%
        Fingerprint := XCBC(Hex(PCdata,StrLen(PCdata)), 0,0, 0,0,0,0, 1,1, 2,2)
        Return Fingerprint
    }

TEA(ByRef y,ByRef z, k0,k1,k2,k3)
    {       ; need  SetFormat Integer, D
        s = 0
        d = 0x9E3779B9
        Loop 32       ; could be reduced to 8 for speed
            {
                   k := "k" . s & 3 ; indexing the key
                   y := 0xFFFFFFFF & (y + ((z << 4 ^ z >> 5) + z  ^  s + %k%))
                   s := 0xFFFFFFFF & (s + d)  ; simulate 32 bit operations
                   k := "k" . s >> 11 & 3
                   z := 0xFFFFFFFF & (z + ((y << 4 ^ y >> 5) + y  ^  s + %k%))
            }
    }

XCBC(x, u,v, k0,k1,k2,k3, l0,l1, m0,m1)
    {
        Loop % Ceil(StrLen(x)/16)-1   ; full length intermediate message blocks
           XCBCstep(u, v, x, k0,k1,k2,k3)
        
        If (StrLen(x) = 16) ; full length last message block
            {
               u := u ^ l0  ; l-key modifies last state
               v := v ^ l1
               XCBCstep(u, v, x, k0,k1,k2,k3)
            }
                else
                     {        ; padded last message block
                           u := u ^ m0  ; m-key modifies last state
                           v := v ^ m1
                           x = %x%100000000000000
                           XCBCstep(u, v, x, k0,k1,k2,k3)
                    }
        return Hex8(u) . Hex8(v)       ; 16 hex digits returned
    }

XCBCstep(ByRef u, ByRef v, ByRef x, k0,k1,k2,k3)
    {
        StringLeft  p, x, 8 ; Msg blocks
        StringMid   q, x, 9, 8
        StringTrimLeft x, x, 16
        p = 0x%p%
        q = 0x%q%
        u := u ^ p
        v := v ^ q
        TEA(u,v,k0,k1,k2,k3)
    }

Hex8(i)   ; 32-bit integer -> 8 hex digits
    {
        format = %A_FormatInteger%   ; save original integer format
        SetFormat Integer, Hex
        i += 0x100000000    ; convert to hex, set MS bit
        StringTrimLeft i, i, 3   ; remove leading 0x1
        SetFormat Integer, %format%  ; restore original format
        return i
    }
    
Hex(ByRef b, n=0)  ; n bytes data -> stream of 2-digit hex
    {       ; n = 0: all (SetCapacity can be larger than used!)
        format = %A_FormatInteger%   ; save original integer format
        SetFormat Integer, Hex   ; for converting bytes to hex
        
        m := VarSetCapacity(b)
        If (n < 1 or n > m)
            n := m
        Loop %n%
            {
                x := 256 + *(&b+A_Index-1)    ; get byte in hex, set 17th bit
                StringTrimLeft x, x, 3    ; remove 0x1
                h = %h%%x%
            }
        SetFormat Integer, %format%  ; restore original format
        return h
    }

На выходе получаем некое число, например, 9B7F948DACACCC27 являющееся уникальным идентификатором. На основе этого скрипта на своем компьютере скомпилировал exe файл, чтобы можно было оперативно получать фингерпринты других компьютеров.
Теперь проблема, на которую наткнулся: копирую на нужный компьюьтер exe и ahk. Запускаю. И результаты работы двух файлов различаются, хотя это один и тот же скрипт! Почему? Везде установлены Win7x64, AHK v1.1.16.04

2

Re: AHK: результаты работы скрипта и exe файла отличаются

Скрипт выполняется интерпретатором той же разрядности (32/64), с каким скомпилирован экзешник?

3

Re: AHK: результаты работы скрипта и exe файла отличаются

YMP, в яблочко! Оказалось что на моем компьютере стояла x64 версия, а на остальных x32! Спасибо большое, сегодня вторую половину дня просто весь мозг вынес этим вопросом.

4

Re: AHK: результаты работы скрипта и exe файла отличаются

создание идентификатора компьютера по разным системным переменным

по системным переменным или по железу?
Мне такая нужна для проверки обновлений скриптов, если по сис.переменным, то они меняются.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

5 (изменено: emmetoya, 2015-02-05 15:13:24)

Re: AHK: результаты работы скрипта и exe файла отличаются

В этой версии считываются

 %COMPUTERNAME%%HOMEPATH%%USERNAME%%PROCESSOR_ARCHITECTURE%%PROCESSOR_IDENTIFIER%
%PCdata%%PROCESSOR_LEVEL%%PROCESSOR_REVISION%%A_OSType%%A_OSVersion%%Language%

и на их основе генерится идентификатор компьютера. Можете по ссылке выше перейти на англоязычную ветку, там 21 страница обсуждения.
Если нужно, могу выложить скрипты на создание идентификатора, генерации по нему лицензии и проверки правильности лицензии по идентификатору компьютера.

6 (изменено: Indomito, 2015-02-13 02:04:59)

Re: AHK: результаты работы скрипта и exe файла отличаются

Да, я уже понял прочитав исходник - сорри что не отписался.

По сути, можно кое что добавить, но это уже дело личное, т.е. моё.

Спасибо за ответ и за идею, я сам собирался написать для себя, ну а тут готовый вариант.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

7

Re: AHK: результаты работы скрипта и exe файла отличаются

Не за что, тут скорее спасибо Laszlo Hars за скрипт)

8

Re: AHK: результаты работы скрипта и exe файла отличаются

Коллеги, напоминаю, что ни скобка, ни смайлик точку в конце предложения не заменяют.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: Indomito, 2015-02-13 04:01:25)

Re: AHK: результаты работы скрипта и exe файла отличаются

teadrinker пишет:

Коллеги, напоминаю, что ни скобка, ни смайлик точку в конце предложения не заменяют.

Поправил.
Тебе надо было ранее линк мне дать на Лукоморье - я бы так не прокалывался.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

10

Re: AHK: результаты работы скрипта и exe файла отличаются

И предложение  начинается с заглавной буквы.

11 (изменено: Indomito, 2015-02-13 04:00:59)

Re: AHK: результаты работы скрипта и exe файла отличаются

Это концовка цитаты, я на 100% не знаю как точно писать, хотя думаю что с большой, т.к. точка то есть.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download