能力值:
( LV9,RANK:490 )
9 楼
我所谓的消息断点+内存断点 其过程为:
程序运行后,ALT+W 在Button 按钮上设消息断点,LBUTTONUP。输入用户名,注册码后点击确定会被断下。
此时 ALT+M 在程序代码段设内存访问断点,F9,程序就会被断在关键处。
之所以没有把序列号产生源码贴上来,其一是因为我分析的程序代码较长,再加上我的源码也较长,整个破文篇幅过长会影响大家心情,同时又易造成鼠标滚轮损坏.其二是因为我的汇编真的马马虎虎,能写出来就费了我很大的功夫,其中肯定会有不简洁或令大侠们雅然失笑之处,所以也不太敢贴出.但有人提议贴出,同时也本着交流有益的想法,现厚着脸皮贴出,有令高手发笑之处,还请不吝指教. D13g proc ;;;;;;;;;;;;;;;;esi为参数
;;;;;;;;;;此函数功能为 将esi指向的数字字符串转换成13位有效数字格式,是整数的话取整。注:esi带前导空格
movzx edx,byte ptr [esi+15]
mov byte ptr [esi+15],0
.if edx>34h && edx<40h
movzx edx,byte ptr [esi+14]
.if edx==2eh
movzx edx,byte ptr [esi+13]
inc edx
mov byte ptr [esi+13],dl
.else
inc edx
mov byte ptr [esi+14],dl
.endif
mov ecx,14
.while ecx>0
movzx edx,byte ptr [esi+ecx]
.if edx==3ah
movzx edx,byte ptr [esi+ecx-1]
.if edx==2eh
movzx edx,byte ptr [esi+ecx-2]
inc edx
mov byte ptr [esi+ecx-2],dl
.elseif edx==20h
mov byte ptr [esi+ecx],30h
mov byte ptr [esi+ecx-1],31h
.else
inc edx
mov byte ptr [esi+ecx-1],dl
.endif
mov byte ptr [esi+ecx],30h
dec ecx
.elseif edx==2eh
dec ecx
.continue
.else
.break
.endif
.endw
.elseif edx==30h
mov ecx,14
.while ecx>0
movzx edx,byte ptr [esi+ecx]
.if edx==2eh
mov byte ptr [esi+ecx],0
dec ecx
.continue
.elseif edx==30h
dec ecx
.continue
.else
.break
.endif
.endw
.endif ret
D13g endp
GenKey proc uses edi, lpUserName:DWORD,nU:DWORD,lpMashine:DWORD,nM:DWORD,hDlg:DWORD
;生成序列号函数,参数分别为:指向用户名的指针,用户名字符数,指向机器码指针,机器码字符数
;此函数中只用到了 lpUserName 和 nU
local szBuffer[600]:BYTE , BufferW:DWORD
local Jqm[32]:BYTE ;;;存放机器码 string
local LofJqmS[6]:Byte ;;;机器码长度 string
local LofJqmN:DWORD ;;;机器码长度
local TempS[16]:Byte ;;;中间变量
local LofUserS[32]:Byte ;;;用户名长度 string
local nUaddLofJqmNS[4]:Byte ;;;用户名长度+机器码长度 string
local LofSn:DWORD ;;;注册码长度
local LofSnS:DWORD ;;;注册码长度 string
local Name1:DWORD ;;;用户名第1位
local Name2:DWORD ;;;用户名第2位
local Name3:DWORD ;;;用户名第3位
local Name1S:DWORD ;;;用户名第1位D String
local Name2S:DWORD ;;;用户名第2位D String
local Name3S:DWORD ;;;用户名第3位D String
local CName1:DWORD ;;;用户名第1位C
local CName2:DWORD ;;;用户名第2位C
local CName3:DWORD ;;;用户名第3位C
local CName1S:DWORD ;;;用户名第1位CD String
local CName2S:DWORD ;;;用户名第2位CD String
local CName3S:DWORD ;;;用户名第3位CD String
local Nf3S[16]:Byte ;;;用户名123 之和 S
local CNf3S[6]:Byte ;;;用户名大写123 之和 S
local USJ:DWORD ;;;用户名 注册码 机器码 各长度之和
local Snlast:DWORD ;;;注册码最后一位
local Sn1:DWORD ;;;注册码第1位
local Sn2:DWORD ;;;注册码第2位
local Sn3:DWORD ;;;注册码第3位
local Sn4:DWORD ;;;注册码第4位
local Sn5:DWORD ;;;注册码第5位
local Sn6:DWORD ;;;注册码第6位
local Sn7:DWORD ;;;注册码第7位
local Sn8:DWORD ;;;注册码第8位
local Sn9:DWORD ;;;注册码第9位
local Sn10:DWORD ;;;注册码第10位
local Sn11:DWORD ;;;注册码第11位
local Sn12:DWORD ;;;注册码第12位
.if nU>2 && nU<10
.else
invoke MessageBox,NULL,addr szErrUsername,addr szCaption,MB_OK
xor eax,eax
ret
.endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;清空序列号;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lea edi,szSerial
xor ecx,ecx
.while ecx<32
mov byte ptr [edi+ecx],2ah
inc ecx
.endw
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;生成机器码;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
invoke CreateFile,offset szFileName,GENERIC_READ or GENERIC_WRITE,\
FILE_SHARE_READ or FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL
mov edx,eax
invoke DeviceIoControl,edx,0007c088h,offset szBufferIn,32,addr szBuffer,210h,addr BufferW,NULL
lea eax,szBufferOut
lea ecx,szBuffer
add ecx,10h
@@: ;;;;;;;;;;;;;;;;;转移
xor edx,edx
add eax,4
mov dx,[ecx]
add ecx,2
mov [eax-4],edx
cmp eax,offset szBufferOut+1024
jl @B
;;;;;;;;;;;;;;;;;;;计算
lea edi,szBufferOut
xor ecx,ecx
xor eax,eax
.while ecx<24
mov edx,[edi+05Ch+ecx*4]
add eax,edx
inc ecx
.endw
lea edi,szBufferOut
xor ecx,ecx
.while ecx<10
mov edx,[edi+28h+ecx*4]
add eax,edx
inc ecx
.endw
lea edi,szBufferOut
xor edx,edx
add edx,[edi+4h]
add edx,[edi+0ch]
add edx,[edi+18h]
add edx,[edi+54h]
shl edx,10h
add edx,eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;edx中即为机器码16进制;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
invoke wsprintf,addr Jqm, addr szFormat2,edx
invoke lstrlen,addr Jqm
mov LofJqmN,eax ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;机器码长度
add eax,nU
lea edi,szSerial
mov byte ptr [edi+eax],0
mov LofSn,eax ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;确定序列号长度
invoke wsprintf,addr LofSnS,addr szFormat2,LofSn
invoke wsprintf,addr LofJqmS,addr szFormat2,LofJqmN ;;;;;;;;;;;;;机器码长度字符型
invoke wsprintf,addr LofUserS,addr szFormat2,nU ;;;;;;;;;;;;;用户名长度字符型
mov edx,nU
add edx,LofJqmN
invoke wsprintf,addr nUaddLofJqmNS,addr szFormat2,edx ;;;;;机器码长度与用户名长度之和字符型
mov edi,lpUserName
movzx eax,byte ptr [edi] ;;;保存name[1]
mov Name1,eax
movzx eax,byte ptr [edi+1] ;;;保存name[2]
mov Name2,eax
movzx eax,byte ptr [edi+2] ;;;保存name[3]
mov Name3,eax
invoke wsprintf,addr Name1S,addr szFormat2,Name1 ;;;保存name[1] string
invoke wsprintf,addr Name2S,addr szFormat2,Name2 ;;;保存name[2] string
invoke wsprintf,addr Name3S,addr szFormat2,Name3 ;;;保存name[3] string
xor edx,edx
add edx,Name1
add edx,Name2
add edx,Name3
invoke wsprintf,addr Nf3S,addr szFormat2,edx ;;;;保存用户名前三之和 string
invoke CharUpper,lpUserName ;;;;转换成大写
mov edi,lpUserName
movzx eax,byte ptr [edi] ;;;保存Cname[1]
mov CName1,eax
movzx eax,byte ptr [edi+1] ;;;保存Cname[2]
mov CName2,eax
movzx eax,byte ptr [edi+2] ;;;保存Cname[3]
mov CName3,eax
invoke wsprintf,addr CName1S,addr szFormat2,CName1 ;;;保存Cname[1] string
invoke wsprintf,addr CName2S,addr szFormat2,CName2 ;;;保存Cname[2] string
invoke wsprintf,addr CName3S,addr szFormat2,CName3 ;;;保存Cname[3] string
xor edx,edx
add edx,CName1
add edx,CName2
add edx,CName3
invoke wsprintf,addr CNf3S,addr szFormat2,edx ;;;;保存用户名前三之和 string
xor edx,edx
add edx,nU
add edx,LofJqmN
add edx,LofSn
mov USJ,edx ;;;保存用户名 注册码 机器码 长度 之和
invoke lstrcat,addr Jqm,addr LofUserS
invoke lstrcat,addr Jqm,addr LofSnS ;;;转换机器码
invoke lstrcat,addr Nf3S,addr CNf3S
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke FpuAtoFL,addr Nf3S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+1]
mov Snlast,edx ;;;;;产生注册码 最后一位
lea edi,szSerial
mov eax,LofSn
mov byte ptr [edi+eax-1],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke FpuAtoFL,addr CName1S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15,addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
invoke lstrlen,esi
movzx edx,byte ptr [esi+eax-1]
mov Sn1,edx ;;;;;产生注册码 第1位
lea edi,szSerial
mov byte ptr [edi],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke lstrcat,addr Nf3S,addr Snlast
invoke FpuAtoFL,addr Nf3S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+2]
mov Sn2,edx ;;;;;产生注册码 第2位
lea edi,szSerial
mov byte ptr [edi+1],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke FpuAtoFL,addr Name1S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+3]
mov Sn3,edx ;;;;;产生注册码 第3位
lea edi,szSerial
mov byte ptr [edi+2],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
mov dword ptr TempS,0
mov dword ptr TempS+4,0
mov dword ptr TempS+8,0
mov dword ptr TempS+12,0
invoke lstrcat,addr TempS,addr Sn1
invoke lstrcat,addr TempS,addr Sn2
invoke lstrcat,addr TempS,addr Sn3
invoke FpuAtoFL,addr TempS,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+4]
mov Sn4,edx ;;;;;产生注册码 第4位
lea edi,szSerial
mov byte ptr [edi+3],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke FpuAtoFL,addr Name2S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+5]
mov Sn5,edx ;;;;;产生注册码 第5位
lea edi,szSerial
mov byte ptr [edi+4],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke FpuAtoFL,addr CName2S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+6]
mov Sn6,edx ;;;;;产生注册码 第6位
lea edi,szSerial
mov byte ptr [edi+5],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
mov dword ptr TempS,0
mov dword ptr TempS+4,0
mov dword ptr TempS+8,0
mov dword ptr TempS+12,0
invoke lstrcat,addr TempS,addr CName1S
invoke lstrcat,addr TempS,addr Name1S
invoke lstrcat,addr TempS,addr Name2S
invoke lstrcat,addr TempS,addr CName2S
invoke FpuAtoFL,addr TempS,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+7]
mov Sn7,edx ;;;;;产生注册码 第7位
lea edi,szSerial
mov byte ptr [edi+6],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke FpuAtoFL,addr Name3S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+8]
mov Sn8,edx ;;;;;产生注册码 第8位
lea edi,szSerial
mov byte ptr [edi+7],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
invoke FpuAtoFL,addr CName3S,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+9]
mov Sn9,edx ;;;;;产生注册码 第9位
lea edi,szSerial
mov byte ptr [edi+8],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
mov dword ptr TempS,0
mov dword ptr TempS+4,0
mov dword ptr TempS+8,0
mov dword ptr TempS+12,0
invoke lstrcat,addr TempS,addr CName3S
invoke lstrcat,addr TempS,addr Name3S
invoke lstrcat,addr TempS,addr Name2S
invoke lstrcat,addr TempS,addr CName2S
invoke FpuAtoFL,addr TempS,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+10]
mov Sn10,edx ;;;;;产生注册码 第10位
lea edi,szSerial
mov byte ptr [edi+9],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
mov dword ptr TempS,0
mov dword ptr TempS+4,0
mov dword ptr TempS+8,0
mov dword ptr TempS+12,0
invoke lstrcat,addr TempS,addr Name1S
invoke lstrcat,addr TempS,addr Name2S
invoke lstrcat,addr TempS,addr Name3S
invoke lstrcat,addr TempS,addr CName1S
invoke lstrcat,addr TempS,addr CName2S
invoke lstrcat,addr TempS,addr CName3S
invoke FpuAtoFL,addr TempS,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+11]
mov Sn11,edx ;;;;;产生注册码 第11位
lea edi,szSerial
mov byte ptr [edi+10],dl
invoke FpuAtoFL,addr Jqm,0,DEST_FPU
mov dword ptr TempS,0
mov dword ptr TempS+4,0
mov dword ptr TempS+8,0
mov dword ptr TempS+12,0
invoke lstrcat,addr TempS,addr Sn2
invoke lstrcat,addr TempS,addr Sn4
invoke lstrcat,addr TempS,addr Sn6
invoke lstrcat,addr TempS,addr Sn8
invoke lstrcat,addr TempS,addr Sn10
invoke FpuAtoFL,addr TempS,0,DEST_FPU
fdiv
invoke FpuFLtoA,0,15, addr szBuffer,SRC1_FPU
lea esi , szBuffer
invoke D13g
movzx edx,byte ptr [esi+12]
mov Sn12,edx ;;;;;产生注册码 第12位
lea edi,szSerial
mov byte ptr [edi+11],dl
mov eax,offset szSerial
ret
GenKey endp