首页 > 代码库 > 庖丁解牛破解与注册机编写
庖丁解牛破解与注册机编写
注册原理:
1. 机器码生成原理:
根据函数得到dwSerial,然后与一个常数0x51627384异或,结果的十六进制表示就是机器码。
LPTSTR pVolumeNameBuffer = new TCHAR[256]; LPTSTR pFileSystemNameBuffer = new TCHAR[256]; //GetVolumeInformation "C:\", Vname, 255, Serial, 0, 0, FSName, 255 DWORD dwSerial = 0; BOOL bSuc = GetVolumeInformationA("c:\\", pVolumeNameBuffer, 256, &dwSerial, NULL, NULL, pFileSystemNameBuffer, 256); DWORD dwMac = dwSerial ^ 0x51627384;
2. 注册码生成原理;
无图无真相,先上图
注册码生成方法:
1. 先将机器码平方,算出一个数,将这个数转换成十进制表示(应该是20位左右的一个数字),记为key1
2. 根据CALL 00403F58从key1中提取出一个八位的数字.记为key2。
3.将key2与dwSerial异或一下,转换成十进制数,记为key3.
4.从key3中取八位数字就是最终的机器码。
代码与程序与注册代码与OD的udd文件下载地址:http://download.csdn.net/detail/xiaocaiju/7514911
关键代码:
00469ADF . E8 30A4F9FF call 00403F14
00469AE4 . 50 push eax ; |VolumeNameBuffer
00469AE5 . 68 CCA64600 push 0046A6CC ; |c:\
00469AEA . E8 BDCEF9FF call <jmp.&kernel32.GetVolumeInformat>; \(initial cpu selection)
00469AEF . A1 D8284700 mov eax, dword ptr [4728D8]
00469AF4 . 35 84736251 xor eax, 51627384
00469AF9 . 33D2 xor edx, edx
00469AFB . 8945 D0 mov dword ptr [ebp-30], eax
00469AFE . 8955 D4 mov dword ptr [ebp-2C], edx
00469B01 . FF75 D4 push dword ptr [ebp-2C]
00469B04 . FF75 D0 push dword ptr [ebp-30]
00469B07 . 8D95 64FEFFFF lea edx, dword ptr [ebp-19C]
00469B0D . B8 08000000 mov eax, 8
00469B12 . E8 F1EAF9FF call 00408608 ; 十六进制转换成字符串,生成机器码
00469B17 . 8B95 64FEFFFF mov edx, dword ptr [ebp-19C]
00469B1D . B8 D0284700 mov eax, 004728D0
00469B22 . E8 FD9FF9FF call 00403B24
00469B27 . FF75 D4 push dword ptr [ebp-2C] ; 0
00469B2A . FF75 D0 push dword ptr [ebp-30] ; 压入机器码
00469B2D . 8B45 D0 mov eax, dword ptr [ebp-30] ; eax = [ebp-30],d1769acc
00469B30 . 8B55 D4 mov edx, dword ptr [ebp-2C] ; edx = 0
00469B33 . E8 C0C7F9FF call 004062F8 ; a^2+b^2;机器码平方
00469B38 . 52 push edx ; 平方的高八位
00469B39 . 50 push eax ; 平方的低八位
00469B3A . 8D45 DC lea eax, dword ptr [ebp-24]
00469B3D . E8 92EAF9FF call 004085D4 ; 生成一大坨数据,转换成十进制
00469B42 . 8D85 60FEFFFF lea eax, dword ptr [ebp-1A0]
00469B48 . 50 push eax
00469B49 . 8B45 DC mov eax, dword ptr [ebp-24]
00469B4C . E8 FFA1F9FF call <GetLength> ; 20位的数据
00469B51 . 8BD0 mov edx, eax
00469B53 . 83EA 08 sub edx, 8 ; edx = 20-8 = 12
00469B56 . B9 08000000 mov ecx, 8 ; ecx = 8,取的位数
00469B5B . 8B45 DC mov eax, dword ptr [ebp-24] ; eax = 数字串
00469B5E . E8 F5A3F9FF call 00403F58 ; 从生成的数据中取了八位,62011121
00469B63 . 8B85 60FEFFFF mov eax, dword ptr [ebp-1A0]
00469B69 . E8 16EBF9FF call 00408684 ; 十进制转换成十六进制
00469B6E . 8945 D0 mov dword ptr [ebp-30], eax ; [ebp-30]=3B236F1
00469B71 . 8955 D4 mov dword ptr [ebp-2C], edx
00469B74 . A1 D8284700 mov eax, dword ptr [4728D8] ; eax = 0x8014e948
00469B79 . 33D2 xor edx, edx
00469B7B . 3345 D0 xor eax, dword ptr [ebp-30] ; eax 就是注册码
00469B7E . 3355 D4 xor edx, dword ptr [ebp-2C]
00469B81 . 8945 D0 mov dword ptr [ebp-30], eax
00469B84 . 8955 D4 mov dword ptr [ebp-2C], edx
00469B87 . 8D45 DC lea eax, dword ptr [ebp-24]
00469B8A . 50 push eax ; eax = pDisk
00469B8B . FF75 D4 push dword ptr [ebp-2C]
00469B8E . FF75 D0 push dword ptr [ebp-30]
00469B91 . 8D85 5CFEFFFF lea eax, dword ptr [ebp-1A4]
00469B97 . E8 38EAF9FF call 004085D4 ; 转成十进制