ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Уникальные номера для определенного "компа"
  #1  
Старый 01.03.2009, 15:24
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию Уникальные номера для определенного "компа"

Как можно попроще получить любое произвольное число?Но что бы оно было уникальным для каждого компьютера на котором будет выполнятся такой код.
 
Ответить с цитированием

  #2  
Старый 01.03.2009, 15:41
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

1) получить бренд-индекс процессора (cpuid функции с 0x80000002 по 0x80000004)

2) получить серийный номер винта (http://forum.codenet.ru/archive/index.php/t-9911.html)

сложить 2 строки, взять от них хеш и получите уникальное число
 
Ответить с цитированием

  #3  
Старый 02.03.2009, 01:16
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Цитата:
Сообщение от 0x0c0de  
1) получить бренд-индекс процессора (cpuid функции с 0x80000002 по 0x80000004)

2) получить серийный номер винта (http://forum.codenet.ru/archive/index.php/t-9911.html)

сложить 2 строки, взять от них хеш и получите уникальное число
Я просил попроще а не на как минимум 150 строчек кода Мне не принципиально что число может менятся.Мне главное что бы возможность его повторения максимально стремилась к нулю.
Вот нашол код получения мака сетевой
Код:
//----------------------
typedef DWORD (CALLBACK* GetadAptInfo)(PIP_ADAPTER_INFO, PULONG);
 HINSTANCE iphlpapi;
 iphlpapi=LoadLibrary("iphlpapi.dll");
 if (!iphlpapi)
    {
     ShowMessage( "Error of upload iphlpapi.dll!");
     Abort();
    }
 GetadAptInfo GetAdaptersInfo;
 GetAdaptersInfo = ( GetadAptInfo)
 GetProcAddress( iphlpapi, "GetAdaptersInfo");
 ULONG adapter_info_size = 0;
 PIP_ADAPTER_INFO pip_a_i = NULL;
 GetAdaptersInfo( pip_a_i, &adapter_info_size );
 pip_a_i = (PIP_ADAPTER_INFO)
                      malloc( sizeof(char) * adapter_info_size);
    if ( GetAdaptersInfo( pip_a_i, &adapter_info_size ))
       {
        ShowMessage("Error in GetAdaptersInfo!");
        free(pip_a_i);
        Abort();
       }
    while (pip_a_i)
          {
           Memo1->Lines->Add("Adapter's CLSID: " + (String)pip_a_i->AdapterName);
           Memo1->Lines->Add ("Name; " + (String)pip_a_i->Desc_ription);
           Memo1->Lines->Text =  Memo1->Lines->Text + "MAC address: ";
           for (int i = 0; i < pip_a_i->AddressLength; i++)
               {
                 Memo1->Lines->Text =  Memo1->Lines->Text + ((unsigned char)pip_a_i->Address[i]) + ".";
               }
           Memo1->Lines->Add("");
           pip_a_i = pip_a_i->Next;
          }
    free(pip_a_i);
    FreeLibrary(iphlpapi);
Но есть одна проблемка У меня он почему то выводит информацию только по виртуальным сетевухам vmware А реальной физической почему то невидет
 
Ответить с цитированием

  #4  
Старый 02.03.2009, 01:19
ToniKapuchon
Участник форума
Регистрация: 26.02.2006
Сообщений: 209
Провел на форуме:
2418438

Репутация: 93
По умолчанию

Цитата:
Сообщение от _nic  
Я просил попроще а не на как минимум 150 строчек кода Мне не принципиально что число может менятся.Мне главное что бы возможность его повторения максимально стремилась к нулю.
Вот нашол код получения мака сетевой
Код:
//----------------------
typedef DWORD (CALLBACK* GetadAptInfo)(PIP_ADAPTER_INFO, PULONG);
 HINSTANCE iphlpapi;
 iphlpapi=LoadLibrary("iphlpapi.dll");
 if (!iphlpapi)
    {
     ShowMessage( "Error of upload iphlpapi.dll!");
     Abort();
    }
 GetadAptInfo GetAdaptersInfo;
 GetAdaptersInfo = ( GetadAptInfo)
 GetProcAddress( iphlpapi, "GetAdaptersInfo");
 ULONG adapter_info_size = 0;
 PIP_ADAPTER_INFO pip_a_i = NULL;
 GetAdaptersInfo( pip_a_i, &adapter_info_size );
 pip_a_i = (PIP_ADAPTER_INFO)
                      malloc( sizeof(char) * adapter_info_size);
    if ( GetAdaptersInfo( pip_a_i, &adapter_info_size ))
       {
        ShowMessage("Error in GetAdaptersInfo!");
        free(pip_a_i);
        Abort();
       }
    while (pip_a_i)
          {
           Memo1->Lines->Add("Adapter's CLSID: " + (String)pip_a_i->AdapterName);
           Memo1->Lines->Add ("Name; " + (String)pip_a_i->Desc_ription);
           Memo1->Lines->Text =  Memo1->Lines->Text + "MAC address: ";
           for (int i = 0; i < pip_a_i->AddressLength; i++)
               {
                 Memo1->Lines->Text =  Memo1->Lines->Text + ((unsigned char)pip_a_i->Address[i]) + ".";
               }
           Memo1->Lines->Add("");
           pip_a_i = pip_a_i->Next;
          }
    free(pip_a_i);
    FreeLibrary(iphlpapi);
Но есть одна проблемка У меня он почему то выводит информацию только по виртуальным сетевухам vmware А реальной физической почему то невидет
там не 150 строчек получиться, а максимум 10)) да и ваще если ты умеешь кодить, то как то глупо задавать такие вопросы!
 
Ответить с цитированием

  #5  
Старый 02.03.2009, 01:35
cremator (c)
Постоянный
Регистрация: 20.06.2008
Сообщений: 323
Провел на форуме:
1240829

Репутация: 165
Отправить сообщение для cremator (c) с помощью ICQ
По умолчанию

а (cpuid функции с 0x80000002 по 0x80000004) что значат? и как их заюзать? лучше на дельфи
 
Ответить с цитированием

  #6  
Старый 02.03.2009, 02:28
stasoft
Новичок
Регистрация: 03.02.2009
Сообщений: 15
Провел на форуме:
93182

Репутация: 21
По умолчанию

Ищите в варезниках вот такую штуку и будет вам щастье.
 
Ответить с цитированием

  #7  
Старый 02.03.2009, 07:09
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

Цитата:
Сообщение от cremator (c)  
а (cpuid функции с 0x80000002 по 0x80000004) что значат? и как их заюзать? лучше на дельфи

Чтобы получить строку бренд-индекс, надо последовательно вызывать команду cpuid со значениями в eax = 0x80000002 , 0x80000003,0x80000004 . В результате в регистрах eax, ebx, ecx, edx именно в таком порядке вы будете получать по 16 байт [4x4] строки. И того, для хранения самого индекса вам потребуется строка длиной 48 ascii символов и завершающий 0 и того 49 символов (как видно это как раз максимально возможное значение).

В сорцах моего amd-cpu-info эта функция есть

Код:
VOID WINAPI GetBrandStr(PCHAR szBrand)
{
 for(DWORD arg = 0x80000002,i=0;arg<=0x80000004;arg++,i+=15)
 {
                _asm
                {
                        mov edi,szBrand
                
                        mov eax,arg
                        
                        cpuid
                        
                        mov esi,i
                        
                        mov dword ptr [edi+esi],eax
                        
                        mov dword ptr [edi+3+esi],ebx
                    
                        mov dword ptr [edi+7+esi],ecx
                        
                        mov dword ptr [edi+11+esi],edx
                }


                
 }
}
Пример вызова


Код:
CHAR cBrandInd[49];

RtlZeroMemory(&cBrandInd,49);

GetBrandStr(cBrandInd);

MessageBoxA(0,cBrandInd,"Processor",0);
Как пример

"AMDAthlon(tm) 64 X Dual Core Processr 5200+"

2ТС как мне кажется, это довольно простой способ - все, что связано с cpuid. У этой команды еще имеется большое количество различных функций с помощью которых можно узнать возможности конкретного процессора. Правда, если не использовать с другими параметрами оборорудования, то не особо случайно получиться, да вы и сами понимаете

желаю удачи

Последний раз редактировалось 0x0c0de; 02.03.2009 в 09:09..
 
Ответить с цитированием

  #8  
Старый 02.03.2009, 10:24
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

по мне проще сгенерить ID через rdtsc и сохранить в реестре.
Хотя способ с номером тома системного диска - тож очень хорош.
 
Ответить с цитированием

  #9  
Старый 02.03.2009, 14:29
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Цитата:
Сообщение от 0x0c0de  
Чтобы получить строку бренд-индекс, надо последовательно вызывать команду cpuid со значениями в eax = 0x80000002 , 0x80000003,0x80000004 . В результате в регистрах eax, ebx, ecx, edx именно в таком порядке вы будете получать по 16 байт [4x4] строки. И того, для хранения самого индекса вам потребуется строка длиной 48 ascii символов и завершающий 0 и того 49 символов (как видно это как раз максимально возможное значение).

В сорцах моего amd-cpu-info эта функция есть

Код:
VOID WINAPI GetBrandStr(PCHAR szBrand)
{
 for(DWORD arg = 0x80000002,i=0;arg<=0x80000004;arg++,i+=15)
 {
                _asm
                {
                        mov edi,szBrand
                
                        mov eax,arg
                        
                        cpuid
                        
                        mov esi,i
                        
                        mov dword ptr [edi+esi],eax
                        
                        mov dword ptr [edi+3+esi],ebx
                    
                        mov dword ptr [edi+7+esi],ecx
                        
                        mov dword ptr [edi+11+esi],edx
                }


                
 }
}
Пример вызова


Код:
CHAR cBrandInd[49];

RtlZeroMemory(&cBrandInd,49);

GetBrandStr(cBrandInd);

MessageBoxA(0,cBrandInd,"Processor",0);
Как пример

"AMDAthlon(tm) 64 X Dual Core Processr 5200+"

2ТС как мне кажется, это довольно простой способ - все, что связано с cpuid. У этой команды еще имеется большое количество различных функций с помощью которых можно узнать возможности конкретного процессора. Правда, если не использовать с другими параметрами оборорудования, то не особо случайно получиться, да вы и сами понимаете

желаю удачи
Я читал что такое способ не работает на старых процессорах типа пентиум 3 или атлон ХР
 
Ответить с цитированием

  #10  
Старый 02.03.2009, 15:57
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

>>Я читал что такое способ не работает на старых процессорах типа пентиум 3 или атлон ХР

Нет проблемы добавить небольшую проверку. Если функция cpuid 80000000h вернет в eax значение <80000004h, то вывод строки бренд-индекса не поддерживается. И тогда можно сделать по старинке - вывод идентификатора с помощью функции 0.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шпаргалки для сертификатов по Битрикс Liar PHP, PERL, MySQL, JavaScript 7 30.05.2009 10:13
Начальный практикум в Code Igniter Kuzya Авторские статьи 9 20.02.2009 23:12
Сбор литературы для начинающего и опытного ассемблерщика -m0rgan- PHP, PERL, MySQL, JavaScript 2 02.12.2008 23:23
О законе. _-[A.M.D]HiM@S-_ Статьи 28 01.11.2007 12:25
Коды silveran Сотовый фрикинг 4 18.10.2005 14:37



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ