Thảo luận - cmd - Giả lập sinh UUID y như thật | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We need money to operate the site, and almost all of it comes from our online advertising.

If possible, please support us by clicking on the advertisements.

Please add vn-z.vn to your ad blocking whitelist or disable your adblocking software.

×

Thảo luận cmd - Giả lập sinh UUID y như thật

malemkhoang

Rìu Chiến
imager_1_14225_700.jpg

UUID là gì?
UUID là viết tắt của Universally Unique IDentifier, hiểu nôm na là một định danh duy nhất trong toàn vũ trụ (universal cơ mà) =)). UUID dùng trong CSDL lớn, có nhiều server, nhiều client cùng lúc truy cập trên toàn thế giới, khả năng bảo mật cao.

Tôi hiểu đơn giản như vậy thôi, không dám múa rìu qua mắt thợ.
Đôi khi tôi cần cái mã này, nằm ngoài CSDL, nhẫu nhiên. Một số ngôn ngữ lập trình đều có ví dụ tạo UUID, nhất là ngôn ngữ kịch bản (script). Tuy nhiên, các ngôn ngữ lập trình đó không cần thiết đối với tôi. Song, từ đó tôi cũng hiểu được cách tạo ra mã UUID. CMD là ngôn ngữ kịch bản mà tôi đã nghĩ đến để thực hiện ý tưởng này. Dĩ nhiên là nó có mức độ hết sức đơn giản. Nhưng tôi chỉ cần có vậy.​

Cấu trúc chuỗi UUID:
Một UUID có thể xuất hiện như sau: f81d4fae-7dec-11d0-a765-00a0c91e6bf6 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). Chuỗi này gồm 5 chuỗi con, ghép lại với nhau bằng dấu trừ ("-"), với số lượng ký tự trong mỗi chuỗi con là: 8-4-4-4-12.

Tôi sử dụng cấu trúc chuỗi UUID này với bộ ký tự là: 0123456789abcdefABCDEF.
Tôi có Code cmd để sinh ra chuỗi UUID dạng trên như sau:​

Mã:
@echo off

Rem Code tạo UUID giả (pseudo-UUID)
Rem mẫu UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8, 4, 4, 4, 12)
Rem cú pháp: genUUID.cmd hoặc genUUID.cmd > file (để lưu lại kết quả ra tệp)

setlocal enabledelayedexpansion & :: lệnh bắt buộc
:: dùng chú thích tren dòng lệnh phải cẩn thận!!!
Rem không phải dòng lệnh nào cũng chú thích được
:: Hiệu ứng phụ hậu quả khôn lường.
set count=0

Rem lập mảng (pseudo-array) chứa mã thường dùng cho UUID
for %%a in (0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F) do (
    set ran_!count!=%%~a
    set /a count+=1
)
Rem biến dùng làm chỉ số mảng kết quả
set dem=0
set /a y="%random% %% count" & :: dùng làm chỉ số ngẫu nhiên của mảng chứa mã UUID

call :gen

:kq
echo %u0%%u1%%u2%%u3%%u4%%u5%%u6%%u7%%u8%%u9%%u10%%u11%%u12%%u13%%u14%%u15%%u16%%u17%%u18%%u19%%u20%%u21%%u22%%u23%%u24%%u25%%u26%%u27%%u28%%u29%%u30%%u31%%u32%%u33%%u34%%u35%

:gen
Rem vòng lặp sinh UUID
for %%i in (8,4,4,4,12) do (
    for /L %%j in (1,1,%%i) do (
        call set u!dem!=%%ran_!y!%%
        call :bien
        set /a dem+=1
    )
    if %%j NEQ %%i (
        call set u!dem!=-
        set /a dem+=1
    )
)

:bien
Rem Thủ tục (routin) phát sinh chỉ số ngẫu nhiên của mảng chứa mã UUID
set r=%random%
set /a y="%r% %% count"

Trong đoạn code trên, tôi đã có một vài chú thích. Song cũng giải thích thêm một số lệnh.
1. Setlocal EnableDelayedExpansion:
Phải sử dụng Delayed Expansion, nghĩa là đặt Setlocal EnableDelayedExpansion ở đầu tệp lệnh cmd, khi đó đặt các biến chỉ mục trong ký hiệu phần trăm và đặt các phần tử mảng trong dấu chấm than thì lệnh mới có hiện lực.​
Ví dụ: đoạn code đưa ra MH giá trị của biết elem[2]
Mã:
set elem[1]=First element
set elem[2]=Second one
set elem[3]=The third one
set i=2
echo !elem[%i%]

Để nhận giá trị của một phần tử khi chỉ mục thay đổi bên trong FOR / IF, hãy đặt phần tử đó bằng các ký hiệu phần trăm kép và đặt trước lệnh bằng call.​
Ví dụ: để di chuyển một dải các phần tử mảng sang bên trái bốn vị trí:
Mã:
for /L %%i in (%start%,1,%end%) do (
   set /A j=%%i + 4
   call set elem[%%i]=%%elem[!j!]%%
)

Một cách khác để đạt được quy trình trước đó là sử dụng lệnh FOR bổ sung để thay đổi phần mở rộng bị trì hoãn của chỉ mục bằng một tham số có thể thay thế tương đương và sau đó sử dụng phần mở rộng bị trì hoãn cho phần tử mảng. Phương thức này chạy nhanh hơn CALL trước đó.​
Ví dụ:
Mã:
for /L %%i in (%start%,1,%end%) do (
   set /A j=%%i + 4
   for %%j in (!j!) do set elem[%%i]=!elem[%%j]!
)

Lệnh này tôi giải thích ngắn gọn. Chi tiết, mời xem thêm tại:
windows - Mảng, danh sách được liên kết và các cấu trúc dữ liệu khác trong tập lệnh cmd.exe (batch)

2. Mảng (mảng giả) trong CMD:
Không giống như PowerShell, hỗ trợ đầy đủ các mảng. Không có hỗ trợ tích hợp cho các biến mảng trong CMD. Tuy nhiên, có thể sử dụng một loạt các biến riêng biệt, được đặt tên có số thứ tự tuần tự để đại diện cho mảng.​
Ví dụ:
Mã:
Set elem[1]=First element
Set elem[2]=Second one
Set elem[3]=The third one

Ví dụ về xây dựng và sau đó đọc một mảng giá trị:
Mã:
Set _folder=c:\pictures
Set _count=1

:: Store each filename in a pseudo-array named like "_pic[0], _pic[1]..."
For /r "%_folder%" %%A in (*.jpg) do (
   Set _pic[!_count!]=%%~A
   Set /a _count+=1
)
Set /a _count-=1
Echo The number of files is %_count%

Echo:
Echo Now enumerating the array:
For /L %%G in (1,1,%_count%) Do (
Echo Array item _pic[%%G] is !_pic[%%G]!
)

Chi tiết, mời xem thêm tại:
Mảng (mảng giả) - Windows CMD

Lưu ý:
Sử dụng random là yêu cầu nhất thiết để tạo mã UUID. Biến hệ thống %random% trong CMD nhận giá trị ngẫu nhiên trong khoảng từ 0 đến 32767. Nó bị mất hiệu ứng trong vòng lặp nếu sử dụng trực tiếp trong vòng lặp.​

Kết luận:
Việc sử dụng, Setlocal EnableDelayedExpansion, mảng (dù là giả lập) và những kỹ thuật khác trong code này có thể mang lại kiến thức và kỹ năng sử dụng các lệnh CMD cho mọi người. Trình độ của tôi về các lệnh CMD thì cũng có hạn thôi. Khi xây dựng code này tôi phải vừa làm vừa đọc tài liệu tham khảo trên Internet, thử đi thử lại nhiều lần mới có kết quả. Chắc chắn code này chưa thể đạt mức độ tối ưu. Song, hy vọng được sử ủng hộ của các bạn.​
 

malemkhoang

Rìu Chiến
Mình đã đọc rất chăm chú và....................à Ko Hiểu Gì Hết Trơn Trọi Á.........................á !{flame}
Mình cũng hổng hiểu gì luôn á. Có điều, mình cần sử dụng UUID đúng mẫu, thật hay giả cũng được. Chẳng hạn phần mềm làm eBook nó đòi UUID để xác lập bản quyền. Song, nó lại không kiểm chứng xem UUID đó là thật hay là giả... Nếu dùng online thì không tiện, các ngôn ngữ lập trình khác thì phải có môi trường của nó (javascript chẳng hạn, mặc dù nó chỉ cần 6 dòng lệnh), trong khi mình có ngay để dùng với các lệnh CMD tuyệt diệu.​
 

Hamano Kaito

Moderator
Mình cũng hổng hiểu gì luôn á. Có điều, mình cần sử dụng UUID đúng mẫu, thật hay giả cũng được. Chẳng hạn phần mềm làm eBook nó đòi UUID để xác lập bản quyền. Song, nó lại không kiểm chứng xem UUID đó là thật hay là giả... Nếu dùng online thì không tiện, các ngôn ngữ lập trình khác thì phải có môi trường của nó (javascript chẳng hạn, mặc dù nó chỉ cần 6 dòng lệnh), trong khi mình có ngay để dùng với các lệnh CMD tuyệt diệu.​
Trong Win cũng có trường UUID này. Nó được tạo random mỗi khi cài lại Win (sạch)
Cũng từ đó các hãng phần mềm dùng cái này để track và block trial (days) hết hạn
Và mình đã lợi dụng cái này để reset trial. Ahahaha{bye}
 

malemkhoang

Rìu Chiến
A
Trong Win cũng có trường UUID này. Nó được tạo random mỗi khi cài lại Win (sạch)
Cũng từ đó các hãng phần mềm dùng cái này để track và block trial (days) hết hạn
Và mình đã lợi dụng cái này để reset trial. Ahahaha{bye}
Ah... vậy thì mình dùng UUID để hack VBA của anh Mai... kkk
 

dammage

Rìu Chiến
hồi xưa có học về cái batch script này mà lâu quá quên hết trơn, thằng c# script thì khó ưa, thằng này thì hại óc nên hồi đó tui hay xài visual basic script
 

Hamano Kaito

Moderator
A

Ah... vậy thì mình dùng UUID để hack VBA của anh Mai... kkk
UUID thường được các apps của MIC hay dùng. (Apps của Mic tức là Apps Store ấy)
Họ lấy cái dãy số đó để tạo lịch sử cho mỗi phiên. Nếu mã đó thay đổi thì phiên sẽ bị reset sạch hết
Trước mình có thấy mấy sếp hack trial thảo luận về vấn đề này
 

Hamano Kaito

Moderator
có cách nào fake processid không bác ? fake trong máy ảo cũng được
Nó là ID nào thế bạn? PID hả bạn? Hay là ID phần cứng?
 

vinh9911176

Búa Đá
Mã:
[Dynamic, Provider("CIMWin32"), UUID("{8502C4BB-5FBB-11D2-AAC1-006008C78BC7}"), AMENDMENT]
class Win32_Processor : CIM_Processor
{
  uint16   AddressWidth;
  uint16   Architecture;
  string   AssetTag;
  uint16   Availability;
  string   Caption;
  uint32   Characteristics;
  uint32   ConfigManagerErrorCode;
  boolean  ConfigManagerUserConfig;
  uint16   CpuStatus;
  string   CreationClassName;
  uint32   CurrentClockSpeed;
  uint16   CurrentVoltage;
  uint16   DataWidth;
  string   Description;
  string   DeviceID;
  boolean  ErrorCleared;
  string   ErrorDescription;
  uint32   ExtClock;
  uint16   Family;
  datetime InstallDate;
  uint32   L2CacheSize;
  uint32   L2CacheSpeed;
  uint32   L3CacheSize;
  uint32   L3CacheSpeed;
  uint32   LastErrorCode;
  uint16   Level;
  uint16   LoadPercentage;
  string   Manufacturer;
  uint32   MaxClockSpeed;
  string   Name;
  uint32   NumberOfCores;
  uint32   NumberOfEnabledCore;
  uint32   NumberOfLogicalProcessors;
  string   OtherFamilyDescription;
  string   PartNumber;
  string   PNPDeviceID;
  uint16   PowerManagementCapabilities[];
  boolean  PowerManagementSupported;
  string   ProcessorId;
  uint16   ProcessorType;
  uint16   Revision;
  string   Role;
  boolean  SecondLevelAddressTranslationExtensions;
  string   SerialNumber;
  string   SocketDesignation;
  string   Status;
  uint16   StatusInfo;
  string   Stepping;
  string   SystemCreationClassName;
  string   SystemName;
  uint32   ThreadCount;
  string   UniqueId;
  uint16   UpgradeMethod;
  string   Version;
  boolean  VirtualizationFirmwareEnabled;
  boolean  VMMonitorModeExtensions;
  uint32   VoltageCaps;
};

Trong Win32_Processor gọi ProcessorId là ra
 

baoenzo

Búa Đá Đôi
Hóng một số bài viết khác của bác. Nếu convert được c++ hay c# cho dễ đọc thì hay quá <3
 

Hamano Kaito

Moderator
id của cpu bác
ID (Số Seri) phần cứng rất khó để thay đổi được bạn. Mặc định họ sẽ khóa nó lại để cho bạn ko cang thiệp vào
Nó cũng là số "định danh" cho từng con CPU . Từ đó mới có cái gọi là "Hàng Chính Hãng"
---
Còn về UUID thì CPU có đấy. Nhưng thay cũng ko có tác dụng mấy, vì Số Seri là quan trọng nhất rồi
UUID thường nằm trong REGISTRY
 

dammage

Rìu Chiến
id của cpu bác
windows có lưu thông tin của processor trong registry đó bạn, trong win7 thì nó nằm tại
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

Untitled.jpg


cái này là hệ điều hành lưu sẵn để tiện ích hóa thôi, muốn fake cao hơn nữa chắc phải can thiệp vô driver của processor quá
 

Hamano Kaito

Moderator
windows có lưu thông tin của processor trong registry đó bạn, trong win7 thì nó nằm tại
HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

Untitled.jpg


cái này là hệ điều hành lưu sẵn để tiện ích hóa thôi, muốn fake cao hơn nữa chắc phải can thiệp vô driver của processor quá
Trước mình cũng thử thay đổi dãy số trong đó luôn đấy sếp (trong registry). Nhưng sau khi reset lại máy ảo thì nó tự load lại và khi load giống như là cài Win luôn, khá thú vị
--
Driver là trình điều khiển. Nếu mod driver sẽ sai chữ ký dẫn đến driver bị chính OS block do sai chữ ký
Driver sai chữ ký sẽ rất khó để chạy đúng quy trình. Mà theo mình thấy mod driver cũng ko có tác dụng thay đổi mã seri
Mã seri này được gán cứng trong con chip của CPU luôn rồi. Muốn thì phải mod lại chip (tức là edit sụm ấy)
Giống harddisk muốn thay đổi seri thì phải edit sụm bằng hex
 

vinh9911176

Búa Đá
thì thay đổi dạng ảo như của chủ topic
bật cmd lên và thay đổi được, nhiêu đó là đủ {big_smile}
 

dammage

Rìu Chiến
Trước mình cũng thử thay đổi dãy số trong đó luôn đấy sếp (trong registry). Nhưng sau khi reset lại máy ảo thì nó tự load lại và khi load giống như là cài Win luôn, khá thú vị
--
Driver là trình điều khiển. Nếu mod driver sẽ sai chữ ký dẫn đến driver bị chính OS block do sai chữ ký
Driver sai chữ ký sẽ rất khó để chạy đúng quy trình. Mà theo mình thấy mod driver cũng ko có tác dụng thay đổi mã seri
Mã seri này được gán cứng trong con chip của CPU luôn rồi. Muốn thì phải mod lại chip (tức là edit sụm ấy)
Giống harddisk muốn thay đổi seri thì phải edit sụm bằng hex
chắc mỗi lần windows khởi động thì nó đọc lại mấy thông tin phần cứng đó bạn

tui nghĩ cái này không phải virus, mục đích chính là fake id thì cứ tạo 1 hẵn driver mới rồi đăng kí với hệ thống thôi, hồi xưa từng cài card mạng ảo để lấy mac address c-r-k cái chương trình maya nữa, mấy phần mềm như virtual cd hay virtual drive cũng vậy luôn, ý tưởng là vậy chứ tui cũng chưa đủ trình đụng chạm tới driver nữa
fV2jNq8.gif


giống như nhóm máu thì không thể thay đổi nhưng kết quả xét nghiệm thì có thể fake vậy đó bạn, đọc thông tin từ đâu thì fake ở đó (nếu được) chứ thay đổi hẳn thông tin gốc thì chắc chắn không được rồi, như đọc từ registry thì sửa cái 1 như ở trên vậy đó
fV2jNq8.gif
, còn những thằng như cpuinfo thì chắc có cách lấy chính xác hơn nên khó fake hơn
 


Top