能力值:
( LV9,RANK:490 )
|
-
-
2 楼
用OD实际跟踪看看,注意看寄存器和堆栈,注意看API调用和返回值
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
好好学习,天天向上。等我学会了,我一定要把这个文章从头到脚再写一遍,帮助像我一样的小菜鸟!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
00401064 . E8 C7010000 call 00401230
这句是关键,应该好好分析一下
以下C语言写的注册机,希望对你有帮助(实际上就是上面那个函数,程序写的烂,对付着看吧^_^)
#include<stdio.h>
#include<string.h>
int main()
{
//name[]存用户名,buffer2[]存注册码
char name[16],buffer[16],buffer2[16];
printf("input name\n");
scanf("%s",name);
// tempa 代表eax,tempc代表ecx,tempd代表edx,t4050ac代表[4050ac]
unsigned int tempa,tempc,tempd,t4050ac,i;
tempa=name[0];
tempc=name[1];
tempc=tempa%tempc;
tempa=0xFFFFFFFF;
tempd=name[2];
tempc*=tempd;
tempc++;
tempa=tempa/tempc;
t4050ac=tempa;
for(i=0;i<15;i++)
{
t4050ac=t4050ac*0x343fd+0x269ec3;
tempa=t4050ac/65536&0x7FFF;
buffer[i]=tempa%0x1a+0x41;
}
i=0;
while(i<strlen(name))
{
tempd=name[i]/32*123;
while(tempd>0)
{
t4050ac=t4050ac*0x343fd+0x269ec3;
tempa=t4050ac/65536&0x7FFF;
tempd--;
}
t4050ac=t4050ac*0x343fd+0x269ec3;
tempa=t4050ac/65536&0x7FFF;
buffer2[i]=tempa%0x1a+0x41;
i++;
}
buffer2[i]=NULL;
printf("%s",buffer2);
}
|
|
|