很难达到你的要求的,VB好像是获取不到硬盘的物理序列号的,只能获取到某一个分区的序列号不过可以调用其它的程序写的获取硬盘物理序列号的dll来获取,CPU的序列号我用的是wmiVB本来对底层方面就不是很好
引用api获得硬盘序列号
Private Declare Function MymachineC Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Sub Form_Load()
Dim AA, 硬盘序列号, Maxlen, Sysflag As Long: Dim VolName, FsysName As String
AA = MymachineC("c:\", VolName, 256, 硬盘序列号, Maxlen, Sysflag, FsysName, 256)
msgbox "C硬盘序列号-机器码啦-(16制): " & Hex(硬盘序列号)
End Sub
破解基本知识
一、机器码
ultraedit打开,编辑exe文件时你会看到
许许多多的由0,1,2,34,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码
就是机器码
修改程序时必须通过修改机器码来修改exe文件
二、需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmp a,b比较a与b
mov a,b 把b的值送给a
ret返回主程序
nop无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je或jz若相等则跳(机器码74或OF84)
jne或jnz若不相等则跳(机器码75或OF85)
jmp无条件跳(机器码EB)
jb若小于则跳
ja若大于则跳
jg若大于则跳
jge若大于等于则跳
jl若小于则跳
jle若小于等于则跳
pop出栈
push压栈
三、常见修改(机器码)
74=>7574=>9074=>EB
75=>7475=>90 75=>EB
jnz->nop
75->90(相应的机器码修改)
jnz-> jmp
75->EB(相应的机器码修改)
jnz-> jz
75->74(正常)OF 85 -> OF 84(特殊情况下,有时,相应的机器码修改)
四、两种不同情况的不同修改方法
1修改为jmp
je(inejzjnz) =>jmp相应的机器码EB(出错信息向上找到的第一个跳转))jmp的作用是绝对跳,无条件跳,
从而跳过下面的出错信息
x0000000033x出错信息,例如:注册码不对,sorry,未注册版不能"Function Not Avaible in Demo"或
"Command Not Avaible”或 "Can't save in Shareware/Demo"等(我们希望把它跳过,不让它出现)
xxXXXXXXXXXxx正确路线所在
⒉修改为nop
je(jnejzjnz)=>nop相应的机器码90(正确信息向上找到的第一个跳转)nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处
XXXXXXXxxXXx正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
xXXXXXXXXXXX出错信息(我们希望不要跳到这里,不让它出现)
这条是破解无敌口诀,希望大家想学会破解的呢都把他背下来,破解其实并不难,关键要背一些基本的知识。
—条(跳)就死,九筒(90)就胡(对应上面的2修改为nop)
—条(跳)就胡,一饼((EB)伺候(对应上面的1修改为jmp)
妻死(74)便妻无(75)
{
// TODO: Add extra validation here
CString str1;
char buff[1024];
typedef int (WINAPI ICEPUB_MACHINEGETINFO)(int typeFlag,char strInfo);
ICEPUB_MACHINEGETINFO icePub_machineGetInfo = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDlldll");
if(hDLLDrv)
{
icePub_machineGetInfo = (ICEPUB_MACHINEGETINFO )GetProcAddress(hDLLDrv, "icePub_machineGetInfo");
}
icePub_machineGetInfo(1,buff);
str1=buff;//mac
icePub_machineGetInfo(2,buff);
str1=str1+buff;//cpu
icePub_machineGetInfo(3,buff);
str1=str1+buff;//hard
icePub_machineGetInfo(4,buff);
str1=str1+buff;//memery
icePub_machineGetInfo(5,buff);
str1=str1+buff;//biosdate
AfxMessageBox(str1);
}
>
'引用api获得硬盘序列号
Private Declare Function MymachineC Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Sub Form_Load()
Dim AA, 硬盘序列号, Maxlen, Sysflag As Long: Dim VolName, FsysName As String
AA = MymachineC("c:\", VolName, 256, 硬盘序列号, Maxlen, Sysflag, FsysName, 256)
msgbox "C硬盘序列号-机器码啦-(16制): " & Hex(硬盘序列号)
End Sub
C语言代码编译成的是机器码,通常不能在不同指令系统的机器上运行。
我遇到过同样的机器,同样的机器码,同样的 *** 作系统,也就是原来在本机编好的若干程序,突然运行不了了(出错),必须重新编译后才能运行。因为微软动态链接库里的子程序号码“更新”了。
如果编译成半成品机器码,或者类似obj,到运行的机器上再由附加的解释器解释(或编译器链接),则可以运行。这就是所谓的“跨平台”“移植”“嵌入”。
16位平台下,unsigned a=0;,a-1在机器中就是16个1。在机器中根本就不存在什么有符号无符号,都是这么算的,只是在输出的时候才按人们的要求以有符号数输出还是以无符号数输出!比如:
同一个a按不同的要求输出是不同的数,机内都是1111111111111111。
以上就是关于VB获取电脑机器码全部的内容,包括:VB获取电脑机器码、怎么解机器码、求编程经过机器码获得注册码的完整方案 用Matlab/C等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)