VB获取电脑机器码

VB获取电脑机器码,第1张

很难达到你的要求的,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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9341391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存