能力值:
( LV3,RANK:25 )
|
-
-
2 楼
我第一行一行的代码,删不掉,另外希望有人对我的格式,写法提出更多意见。谢谢!
|
能力值:
( LV4,RANK:49 )
|
-
-
3 楼
感谢楼主,写的真的很详细
|
能力值:
( LV2,RANK:15 )
|
-
-
4 楼
有两点说一下1.这段指令实际是对name长度做了限制,只能在3-8之间
0040156A |. 81FF 00230000 cmp edi, 2300
00401570 |. 7F 08 jg short 0040157A
00401572 |. 81FF 90010000 cmp edi, 190
00401578 |. 7D 04 jge short 0040157E
2.这段指令应该是编译器优化过的,实际为 esi = edx - esi - 1 + 0x14D
0040141B |. 83F6 FF |xor esi, FFFFFFFF ; esi = (SUM*(i-1))^0xFFFFFFFF
0040141E |. 8DB432 4D0100>|lea esi, dword ptr [edx+esi+14D] ; esi = edx + esi + 0x14D
另外,附上我写的注册机
#include<stdio.h>
#include<math.h>
#define OFFSET(i) (3*(i)-1<0? 0:3*(i)-1+0x41)
int main(int argc,char**argv)
{
char name[20],key[20];
int len,SUM=0;
printf("name:");
if(argc!=2)
scanf("%[^\n]",name);
else
sprintf(name,"%s",argv[1]);
printf("%s\n",name);
len=strlen(name);
if(len<3 || len >9)
return 0;
for(int i=0;i<len;i++)
SUM+=name[i];
for(int i=0;i<len;i++)
{
name[i]=((((name[i]^OFFSET(i))-SUM*(i-1)-1+0x14D+name[i]*(i+3)*strlen(name))%10+0x30^0xADAC)*(i+2))%10+0x30;
}
sprintf(key,"%d%s-%d",6,name,len*SUM%0x64+0x30);
len=strlen(key);
for(int i=1;i<len;i++)
{
key[i]=(key[i]^0x20)%0xA+0x30;
}
printf("key:%s",key);
}
最后于 2020-3-23 12:27
被zzhwaxy编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
 楼主跟楼上的都挺厉害的。
|
能力值:
( LV3,RANK:25 )
|
-
-
6 楼
zzhwaxy
# 有两点说一下
1.这段指令实际是对name长度做了限制,只能在3-8之间
```
0040156A |. 81FF 00230000 cmp edi, 2300
0040157 ...
所言极是,谢谢提醒。
|
|
|