首页
社区
课程
招聘
注册机编写的问题
发表于: 2005-7-28 13:12 4645

注册机编写的问题

2005-7-28 13:12
4645
00415438    .  FF15 80114000 call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>]          ;  MSVBVM60.__vbaFreeObj
0041543E    .  B8 E1830F3E   mov eax,3E0F83E1
00415443    .  56            push esi
00415444    .  F7EF          imul edi  //EDI为16进制机器号乘以3E0F83E1(高位进EDX,低位进EAX)
00415446    .  C1FA 04       sar edx,4
00415449    .  8BCA          mov ecx,edx
0041544B    .  C1E9 1F       shr ecx,1F
0041544E    .  03D1          add edx,ecx //算术右移和逻辑右移结果相加
00415450    .  81C2 F3550600 add edx,655F3
算法很简单,
这个注册机在高级语言里怎么写,特别是机器号乘以3E0F83E1(这里溢出啊).
想用注册机编写器写,但不会用。郁闷

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
;将下面代码保存一个文档,扩展名改成*.rek,然后用注册机编写器打开这个文件,按编译按钮即可。
.const

.data
szHomePage db "http://www.365hz.net",0
szEmail    db "mailto:ljyljx@163.com",0
szErrMess  db "输入的序列号不正确!",0
lpszBuff db 50 dup(0)
lpszFormat db "%X",0

.code
invoke htodw,eax
mov edi,eax
mov eax,3E0F83E1h
imul edi
shr edx,4
mov ecx,edx
shr ecx,1fh
add edx,ecx
add edx,655f3h
invoke wsprintf,addr lpszBuff,addr lpszFormat,edx
lea eax,lpszBuff
2005-7-28 14:13
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上的,不过还有一点问题
.const

.data
szHomePage db "http://www.365hz.net",0
szEmail    db "mailto:ljyljx@163.com",0
szErrMess  db "输入的序列号不正确!",0
lpszBuff db 50 dup(0)
lpszFormat db "%X",0  //这个是输出十六进制格式吗,我需要输出有符号十进制是不是改成”%d“就可以了

.code
invoke htodw,eax
mov edi,eax //这个EAX是机器号吗,但是我需要这个机器号转成十六进制的,用Ollydbg跟了一下生成的注册机,发现没转
mov eax,3E0F83E1h
imul edi
shr edx,4
mov ecx,edx
shr ecx,1fh
add edx,ecx
add edx,655f3h
invoke wsprintf,addr lpszBuff,addr lpszFormat,edx
lea eax,lpszBuff
2005-7-28 18:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
invoke htodw,eax//把这个改成atodw,是不是就是十六进制
2005-7-28 18:38
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
最初由 mywx 发布
invoke htodw,eax//把这个改成atodw,是不是就是十六进制

不错。
%d就是输出十进制字符。
atodw就是十进制字符转成十六进制数值的函数。
2005-7-28 18:50
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
问题又来了:举例:
当机器码为280058时计算是正确的,机器码为-280058时计算是错误的为什么啊
2005-7-28 18:58
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我的机器码现在为-2896053,我用VB中的HEX(-2896053)为FFD3CF4B
用生成的注册机为:96F8ED35
2005-7-28 19:00
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
那是当然,atodw和htodw都是处理无符号的字符的函数。
改成下面的试试可不可以:
.const

.data
szHomePage db "http://www.365hz.net",0
szEmail    db "mailto:ljyljx@163.com",0
szErrMess  db "输入的序列号不正确!",0
lpszBuff db 50 dup(0)
lpszFormat db "%d",0

.code
cmp byte ptr[eax],'-'
jnz _Next1
inc eax
invoke atodw,eax
not eax
inc eax
jmp _Next2
_Next1:
invoke atodw,eax
_Next2:
mov edi,eax
mov eax,3E0F83E1h
imul edi
shr edx,4
mov ecx,edx
shr ecx,1fh
add edx,ecx
add edx,655f3h
invoke wsprintf,addr lpszBuff,addr lpszFormat,edx
lea eax,lpszBuff
2005-7-28 19:13
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
呵呵,还是叫你大虾吧。EAX的十六进制还是不对
jnz _Next1
inc eax
invoke atodw,eax
not eax
inc eax
这段应该是计算有符号机器码的十六进制吧,但结果不对啊
2005-7-28 20:12
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
晕,计算EAX对了,但结果不对
2005-7-28 20:16
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
shr edx,4 问题找到了,算术右移怎么和程序中的算术右移结果不一样
2005-7-28 20:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢大虾,已经搞定了,都怨自己,总是照抄代码,你的程序中是SHR EDX,4 我要的是SAR EDX,4.
再次表示衷心的感谢
2005-7-28 20:27
0
游客
登录 | 注册 方可回帖
返回
//