第一篇:lab2-用户管理-学生版
用户和用户组管理
学习用户和用户组管理,完成如下练习,将你在学习这部分内容中遇到的问题,辅助截图,以实验报告的格式提交,注意,仍然是重点描述问题
另外一份资料《用户管理-学生练习时发现的问题--学生版》,供大家思考,看看您是否能够解答同学遇到的问题
新来一位员工tom,如何为tom在linux系统中添加一个合法身份?
存储用户信息的配置文件是什么?文件是如何组织的?
存储用户密码的配置文件是什么?文件是如何组织的?
存储用户组信息的配置文件是什么?文件是如何组织的?
和用户和用户组管理相关的文件有哪些,主要作用是什么?
1.新建一个组group1,新建一个系统组group2
2.更改组group2的GID为103,更改组名为grouptest
3.删除组grouptest
4.新建用户user1,指定UID为777,目录为/home/user1,初始组为group1,有效组为root,指定shell为/bin/bash
5.新建一个系统用户(虚拟用户)user2
6.查看用户user1的组群,切换到user1,在主目录下新建一个文件夹test1,再切换有效组(附属组)为root,再新建文件夹test2
7.修改用户user1的个人说明为This is a test
8.修改用户密码过期时间为2012-12-12
9.更改用户user1的密码为111111,锁定用户user1,并查看/etc/shadow中user1对应的信息的变化,用user1身份登录系统
解锁用户user1,再用user1身份登录系统
10.更改用户主目录/home/user1为/home/user1home
11.更改自己(stu)的相关信息,如电话号码等
12.查看用户root的相关信息
13.列出用户user1的UID,GID等
14.使用passwd给user1用户密码冻结,用passwd查看user1相关信息,最后用passwd给
用户user1解冻
第二篇:Bomb Lab实验报告
课程实验报告
课 程 名 称:
计算机系统原理实验 实 验 名 称:
Bomb Lab 专 业 班 级: 姓
名:
学
号:
完 成 时 间:
2017.4.19
一、实验目的
熟悉汇编程序,学习gdb调试工具,熟悉并掌握函数调用过程中的栈帧结构的变化。
二、实验环境
个人PC,Linux发行版本,终端,gdb调试工具。
三、实验要求
1.本次实验为熟悉汇编程序及其调试方法的实验。
2.实验内容包含2个文件bomb(可执行文件)和bomb.c(c源文件)。3.使用gdb工具反汇编出汇编代码,结合c语言文件找到每个关卡的入口函数。
4.分析汇编代码,找到在每个phase程序段中,引导程序跳转到“explode_bomb”程序段的地方,并分析其成功跳转的条件,以此为突破口寻找应该在命令行输入何种字符通关。
5.本实验一共有7个关卡,包括6个普通关卡和1个隐藏关卡。要求至少通过6个普通关卡。
四、实验内容及操作步骤
(一)准备过程
1.解压文件夹得到“bomb”,“bomb.c”,“README-bomblab.txt”以及“实验基本内容与要求.txt”等文档。查看“实验基本内容与要求.txt”了解实验内容与要求后打开bomb.c文件,编译发现不能通过,代码不完整,所以bomb.c文件只能用来作为参考。查看bomb.c文件发现控制密码正确的6个函数分别为phase_1,phase_2,phase_3,phase_4,phase_5,phase_6,因此可以对bomb文件反汇编得到汇编文本,结合汇编文本与bomb.c文本进一步分析。
2.进入Ubuntu,将bom和bomb.c文档复制到主文件目录下,ctrl+alt+t打开终端,通过“objdump-d bomb > bomb.s”命令将可执行文件反汇编成bomb.s文件,并且可以通过“gdb-q bomb”进行调试。3.将bomb.c复制成文本后打开bomb.c查看汇编代码并进一步分析。
(二)关卡分析
1.phase_1 phase_1汇编代码及注释如下: 08048f61
: 8048f61: 55 8048f62: 89 e5 8048f64: 83 ec 18 位的栈空间
8048f67: c7 44 24 04 5c a1 04
push %ebp mov %esp,%ebp
sub $0x18,%esp #开辟一个2
4movl $0x804a15c,0x4(%esp)#将0x804a15c存到%eap+4的位置,x/s 0x804a15c 得到 “We have to stand with our North Korean allies.” 8048f6e: 08 8048f6f: 8b 45 08 8048f72: 89 04 24 处的值存到%esp 8048f75: e8 31 00 00 00
test %eax,%eax
je 8048f83
call 8048fab mov 0x8(%ebp),%eax mov %eax,(%esp)
#将%ebp+8#%eax=0则跳出函数,否则跳到爆炸函数,可以看出,调用
call 80490d1
思路与分析:
nop nop nop nop nop nop nop nop 通过call 8048fab ,call 80490d1 由上面分析可知地址0x804a15c中存着正确的字符串,我们只要输入相同的字符串就可以通过关卡。进入gdb,通过命令x/s 0x804a15c查看该字符串为:“We have to stand with our North Korean allies.” 所以phase_1的通关密码为:“We have to stand with our North Korean allies.”通过 r 命令运行程序,输入该字符串则通过第一关: 结论与心得: 通过分析汇编代码,通过字符串比较函数 2.phase_2 phase_2汇编代码及注释如下: 08048d6a : 8048d6a: 55 push %ebp 8048d6b: 89 e5 mov %esp,%ebp 8048d6d: 56 push %esi 8048d6e: 53 push %ebx 8048d6f: 83 ec 30 sub $0x30,%esp 8048d72: 8d 45 e0 lea-0x20(%ebp),%eax 8048d75: 89 44 24 04 mov %eax,0x4(%esp)一个数字的地址放到%esp+4的位置 8048d79: 8b 45 08 mov 0x8(%ebp),%eax 8048d7c: 89 04 24 mov %eax,(%esp)8048d7f: e8 87 03 00 00 call 804910b #读取六个数字 8048d84: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)8048d88: 75 06 jne 8048d90 #0和-0x20(%ebp)比较,不相等就爆炸 8048d8a: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp)8048d8e: 74 05 je 8048d95 #1和-0x1c(%ebp)比较,相等就跳过爆炸 8048d90: e8 3c 03 00 00 call 80490d1 #将第 8048d95: 8d 5d e8 lea-0x18(%ebp),%ebx #将第三个数字的地址传到%ebx中,即现在%ebx中存着第三个数字的地址 8048d98: 8d 75 f8 lea-0x8(%ebp),%esi #将%ebx的地址传到%esi,%esi用于待会的判断结束条件,%ebx存的地址一直循环加4,循环直到%ebx的下一个地址是%esi就结束】 8048d9b: 8b 43 fc 二个数放到%eax寄存器中 8048d9e: 03 43 f8 第二个数和第一个数的和 8048da1: 39 03 8048da3: 74 05 cmp %eax,(%ebx) add-0x8(%ebx),%eax #计算mov-0x4(%ebx),%eax #将第je 8048daa #前两个数的和与第三个数相比较,相等则跳过炸弹 8048da5: e8 27 03 00 00 8048daa: 83 c3 04 call 80490d1 8048dad: 39 f3 8048daf: 75 ea cmp %esi,%ebx jne 8048d9b #比较现在%esi和%ebx里面的值是否相等,不相等则循环,否则结束。其实两个寄存器中存的都是地址,为的是保证只输入6个数,因为当输入第7个数时,%ebx=%esi 8048db1: 83 c4 30 8048db4: 5b 8048db5: 5e 8048db6: 5d 8048db7: c3 思路与分析: 通过call 804910b add $0x30,%esp pop %ebx pop %esi pop %ebp ret #释放栈帧 存着第二个数字,依次类推。通过cmpl $0x0,-0x20(%ebp),jne 8048d90 和cmpl $0x1,-0x1c(%ebp),je 8048d95 知道第一个数字必须是0,第二个数字必须是1,否则就爆炸。命令lea-0x18(%ebp),%ebx初始化寄存器%ebx的值,将第三个数字的地址传到%ebx中.lea-0x8(%ebp),%esi将%ebx的地址传到%esi,%esi用于待会的判断结束条件,%ebx存的地址一直循环加4,循环直到%ebx的下一个地址是%esi就结束,mov-0x4(%ebx),%eax将第二个数放到%eax寄存器中,add-0x8(%ebx),%eax计算第二个数和第一个数的和,cmp %eax,(%ebx),je 8048daa 前两个数的和与第三个数相比较,相等则跳过炸弹。add $0x4,%ebx将%ebx的地址加4,现在%ebx中存着第四个数字的地址,之后%ebx一直加4,知道循环完6个数字。通过上面的分析知道,输入的前两个数字为0和1,后面的数字等于前面两个数字的和。所以,这六个数字为Fibonacci数列的前六项。为0 1 1 2 3 5。输入这6个数字可通过phase_2.结论与心得: 第二关需要弄懂栈帧结构的变化,通过add $0x4,%ebx将%ebx的地址加4,然后判断前两个数字的和与当前位置的数是否相等。结合第一个和第二个数字是0和1知道结果为0 1 1 2 3 5。 3.phase_3 phase_3汇编代码及注释如下: 08048ea1 : 8048ea1: 55 8048ea2: 89 e5 8048ea4: 83 ec 28 8048ea7: 8d 45 f0 个数的位置 push %ebp mov %esp,%ebp sub $0x28,%esp lea-0x10(%ebp),%eax #第二 8048eaa: 89 44 24 0c 8048eae: 8d 45 f4 个数的位置 8048eb1: 89 44 24 08 8048eb5: c7 44 24 04 3e a2 04 mov %eax,0xc(%esp) lea-0xc(%ebp),%eax #第一 mov %eax,0x8(%esp)movl $0x804a23e,0x4(%esp)#通过查看0x804a23e的内容,即x/s 0x804a23e,显示为“%d %d”,提示输入两个整型数 8048ebc: 08 8048ebd: 8b 45 08 8048ec0: 89 04 24 8048ec3: e8 78 f9 ff ff <__isoc99_sscanf@plt> 在%eax里 8048ec8: 83 f8 01 8048ecb: 7f 05 #至少输入2个数,否则爆炸 8048ecd: e8 ff 01 00 00 8048ed2: 83 7d f4 07 8048ed6: 77 6b call 80490d1 cmp $0x1,%eax jg 8048ed2 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #isoc99标准输入变量,应该是把输入的数字个数存#第1个数大于7爆炸,所以,第一个数需要小于等于7 8048ed8: 8b 45 f4 mov-0xc(%ebp),%eax 将第一个数存到%eax中 8048edb: ff 24 85 a0 a1 04 08 jmp *0x804a1a0(,%eax,4) #p/x 跳转至0x804a1a0+4*%eax(存放第一个数)中的内容所指的行数 *0x804a1a0+4*%eax 8048ee2: b8 00 00 00 00 8048ee7: eb 53 8048ee9: b8 00 00 00 00 8048eee: 66 90 mov $0x0,%eax jmp 8048f3c mov $0x0,%eax xchg %ax,%ax 8048ef0: eb 45 8048ef2: b8 00 00 00 00 5的时候跳到这里 8048ef7: eb 39 8048ef9: b8 00 00 00 00 4的时候跳到这里 8048efe: 66 90 8048f00: eb 2b 8048f02: b8 00 00 00 00 4的时候跳到这里 8048f07: eb 1f 8048f09: b8 00 00 00 00 2的时候跳到这里 8048f0e: 66 90 8048f10: eb 11 8048f12: b8 14 03 00 00 jmp 8048f37 mov $0x0,%eax #第一个数等于 jmp 8048f32 mov $0x0,%eax #第一个数等于 xchg %ax,%ax jmp 8048f2d mov $0x0,%eax #第一个数等于 jmp 8048f28 mov $0x0,%eax #第一个数等于 xchg %ax,%ax jmp 8048f23 mov $0x314,%eax #第一个数为0的时候跳到这里(p/x *0x804a1a0)首先x=778,最后第二个数等于147 8048f17: eb 05 #跳转到 8048f1e 这一行 8048f19: b8 00 00 00 00 1的时候跳到这里 8048f1e: 2d 5a 03 00 00 8048f23: 05 ef 02 00 00 8048f28: 2d 16 02 00 00 8048f2d: 05 16 02 00 00 8048f32: 2d 16 02 00 00 8048f37: 05 16 02 00 00 8048f3c: 2d 16 02 00 00 sub $0x35a,%eax add $0x2ef,%eax sub $0x216,%eax add $0x216,%eax sub $0x216,%eax add $0x216,%eax sub $0x216,%eax #x=x-858 #x=x+751 #x=x-534 #x=x+534 #x=x-534 #x=x+534 #x=x-534 mov $0x0,%eax #第一个数等于jmp 8048f1e 8048f41: eb 0a #跳转到 8048f4d 这一行 8048f43: e8 89 01 00 00 8048f48: b8 00 00 00 00 8048f4d: 83 7d f4 05 8048f51: 7f 05 jmp 8048f4d call 80490d1 #第一个数字需要小于等于5,否则爆炸 8048f53: 3b 45 f0 8048f56: 74 05 cmp-0x10(%ebp),%eax je 8048f5d #0,147;1-641;2,217; 3,-534; 4,0; 5,-534 call 80490d1 思路与分析: 观察到指令movl $0x804a23e,0x4(%esp),通过查看0x804a23e的内容,即x/s 0x804a23e,显示为“%d %d”,提示输入两个整型数。call 8048840 <__isoc99_sscanf@plt>,调用isoc99标准输入变量,是把输入的数字个数存在%eax里返回。通过cmp $0x1,%eax和jg 8048ed2 知道至少输入2个数,否则爆炸。通过cmpl $0x7,-0xc(%ebp)和ja 8048f43 知道第一个数字小于等于7,由cmpl $0x5,-0xc(%ebp)和jg 8048f58 知道输入的数字要小于等于5,所以输入的数字范围为0-5。jmp *0x804a1a0(,%eax,4)为switch分支结构,%eax存着输入的数字的值,当输入的数组是0的时候,查看*0x804a1a0的值,得到$1 = 0x8048f12,即跳转到0x8048f12处。当输入的数字为1-5时依次类推。得到的地址分别为: cmp-0x10(%ebp),%eax和je 8048f5d 即为判断经过一系列运算后求的值是否与正确的值相等。通过分析汇编代码,我们可以知道当输入不同的x值,等到的y值如下: 当x=0时,y=788-858+751-534+534-534+534-534=147 当x=1时,y=-858+751-534+534-534+534-534=-641 当x=2时,y=751-534+534-534+534-534=217 当x=3时,x=-534+534-534+534-534=-534 当x=4时,x=534-534+534-534=0 当x=5时,x=-534+534-534=-534 所以可以输入六组数据:0 147;1-641;2 217;3-534;4 0;5-534。随便输入一组都能通过炸弹。 结论与心得: 第三关主要用到了switch分支结构,根据输如的不同数字跳转到不同位置进行不同的运算,最后得到结果。首先分析输入数字的范围,然后通过判断跳转的位置来准确计算。 4.phase_4 phase_4汇编代码及注释如下: 08048e2e : 8048e2e: 55 push %ebp 8048e2f: 89 e5 8048e31: 83 ec 28 8048e34: 8d 45 f0 个数字 8048e37: 89 44 24 0c 8048e3b: 8d 45 f4 个数字 8048e3e: 89 44 24 08 8048e42: c7 44 24 04 3e a2 04 输入x/s 0x804a23e 显示为 8048e49: 08 8048e4a: 8b 45 08 8048e4d: 89 04 24 8048e50: e8 eb f9 ff ff <__isoc99_sscanf@plt> “%d %d” mov %esp,%ebp sub $0x28,%esp #开辟栈空间 lea-0x10(%ebp),%eax #第二 mov %eax,0xc(%esp)lea-0xc(%ebp),%eax #第一 mov %eax,0x8(%esp)movl $0x804a23e,0x4(%esp)#,提示输入两个整型数字 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #标准输入变量,将输入的数字个数存在%eax中 cmp $0x2,%eax jne 8048e66 8048e55: 83 f8 02 8048e58: 75 0c #要求输入2个数字,即输入的数字个数不等于2则爆炸 8048e5a: 8b 45 f4 mov-0xc(%ebp),%eax #将第一个数放到%eax中 8048e5d: 85 c0 8048e5f: 78 05 test %eax,%eax js 8048e66 #判断第一个数,如果是负数就爆炸,所以需要%eax>=0 8048e61: 83 f8 0e 8048e64: 7e 05 cmp $0xe,%eax jle 8048e6b #比较第一个数和14(0xe)的大小,如果%eax<=14,则继续执行,否则爆炸 8048e66: e8 66 02 00 00 8048e6b: c7 44 24 08 0e 00 00 call 80490d1 #将0xe存到%esp+8 8048e72: 00 8048e73: c7 44 24 04 00 00 00 0x0存到%esp+4 8048e7a: 00 8048e7b: 8b 45 f4 8048e7e: 89 04 24 数存到%esp 8048e81: e8 da fc ff ff func4函数(递归函数)8048e86: 83 f8 01 y存放在%eax寄存器中 8048e89: 75 06 #y要等于1,否则爆炸 8048e8b: 83 7d f0 01 8048e8f: 74 0c #第二个数要等于1,否则爆炸 8048e91: 8d b4 26 00 00 00 00 8048e98: e8 34 02 00 00 8048e9d: c9 8048e9e: 66 90 8048ea0: c3 call 8048b60 func4汇编代码及注释如下: 08048b60 push %ebp mov %esp,%ebp sub $0x18,%esp #建立一个栈帧 lea 0x0(%esi,%eiz,1),%esi call 80490d1 cmpl $0x1,-0x10(%ebp)je 8048e9d jne 8048e91 cmp $0x1,%eax #函数的返回值call 8048b60 #将第一个 movl $0x0,0x4(%esp) #将 8048b66: 89 5d f8 8048b69: 89 75 fc 8048b6c: 8b 55 08 #%edx->x 8048b6f: 8b 45 0c #%eax->y=0x0=0 8048b72: 8b 5d 10 #%ebx->z=0xe=14 func4(x,y,z) mov %ebx,-0x8(%ebp)mov %esi,-0x4(%ebp)mov 0x8(%ebp),%edx mov 0xc(%ebp),%eax mov 0x10(%ebp),%ebx 8048b75: 89 d9 t的过程,#t=z 8048b77: 29 c1 8048b79: 89 ce 8048b7b: c1 ee 1f 逻辑右移31位 8048b7e: 8d 0c 0e #t=(z-y)>>31+(z-y)8048b81: d1 f9 #t=[(z-y)>>31+(z-y)]>>1 8048b83: 01 c1 #t=[(z-y)>>31+(z-y)]/2+y = mov %ebx,%ecx #计算临时变量 sub %eax,%ecx #t=z-y mov %ecx,%esi #t=z-y shr $0x1f,%esi #t=(z-y)>>31,lea(%esi,%ecx,1),%ecx sar %ecx add %eax,%ecx(14>>31+14)/2+0=7 cmp %edx,%ecx #将7和x(第 8048b85: 39 d1 一个数)比较,即7-x 8048b87: 7e 17 #当7<=x就跳转到 8048ba0 jle 8048ba0 否则继续执行下一条指令 sub $0x1,%ecx #t=t-1 8048b89: 83 e9 01 if(7>x)8048b8c: 89 4c 24 08 t-1移到0x8(%esp),z=t-1 8048b90: 89 44 24 04 mov %ecx,0x8(%esp)#将 mov %eax,0x4(%esp)#y 8048b94: 89 14 24 8048b97: e8 c4 ff ff ff 8048b9c: 01 c0 结果存放到%eax中 8048b9e: eb 20 结束 8048ba0: b8 00 00 00 00 跳转到这里,此时令y=0 8048ba5: 39 d1 8048ba7: 7d 17 mov %edx,(%esp)#x call 8048b60 #y=2*y,将 jmp 8048bc0 #mov $0x0,%eax #if(x>=7)时就 cmp %edx,%ecx jge 8048bc0 8048ba9: 89 5c 24 08 8048bad: 83 c1 01 8048bb0: 89 4c 24 04 8048bb4: 89 14 24 8048bb7: e8 a4 ff ff ff 8048bbc: 8d 44 00 01 #y=z*y+1,将结果存到%eax中 8048bc0: 8b 5d f8 #if(t==x)跳转到这里 8048bc3: 8b 75 fc 8048bc6: 89 ec 8048bc8: 5d 8048bc9: c3 思路与分析: 首先分析phase_4汇编代码。movl $0x804a23e,0x4(%esp)输入x/s 0x804a23e 显示为 “%d %d”,提示输入两个整型数字。call 8048840 mov-0x4(%ebp),%esi mov %ebp,%esp pop %ebp ret mov-0x8(%ebp),%ebxmov %ebx,0x8(%esp)add $0x1,%ecx #y=t+1 mov %ecx,0x4(%esp)mov %edx,(%esp) #x y=t+1 #z call 8048b60 任然要求输入2个数字。通过mov-0xc(%ebp),%eax,test %eax,%eax,js 8048e66 知道第一个数为非负数。由cmp $0xe,%eax和jle 8048e6b 又可以知道第一个数字要小于等于14。之后分析func4函数,分别用%esp,0x4(%esp),%0x8(%esp)传递三个参数,设为x,y,z。参数y存储在寄存器%eax中并作为最终的返回值,最终结果为1,也就是n的值;参数x和z存储于寄存器%edx和%ebx中,并通堆栈指针来保存或改变(配合其他指令)。在func4中进一步缩小了第一个数字的范围。现在需要第一个数字的范围为7-14。通过分析func4汇编代码,可以得到如下的c代码: # #include } else{ } y=0;if(t==x)return y;z=t-1;func4();y=z*y; y=t+1; func4();y=2*y+1;# # # # # # } y=0;z=0xe;ret=func4();if(ret==1)printf(“m=%d,n=%dn”,x,ret)# return 0;# } 第二个数必须为1。经过分析可以有三组数。分别是: 8 1;9 1;11 1。任意输入一组数就能通过关卡。 结论与心得: 这一关中在函数里调用了另外一个函数func4,func4函数中运用到了线性递归。通过分析汇编代码可以写出相应的c代码,通过分析第一个数范围在7-14,第二个数必须为1,结合c代码可以得出结果。 5.phase_5 phase_5汇编代码及注释如下: 08048db8 : 8048db8: 55 8048db9: 89 e5 8048dbb: 56 8048dbc: 53 8048dbd: 83 ec 20 8048dc0: 8d 45 f0 8048dc3: 89 44 24 0c 个数 push %ebp mov %esp,%ebp push %esi push %ebx sub $0x20,%esp #开辟栈空间 lea-0x10(%ebp),%eax mov %eax,0xc(%esp) #第二 8048dc7: 8d 45 f4 8048dca: 89 44 24 08 个数 8048dce: c7 44 24 04 3e a2 04 输入x/s 0x804a23e 显示为 8048dd5: 08 8048dd6: 8b 45 08 8048dd9: 89 04 24 8048ddc: e8 5f fa ff ff <__isoc99_sscanf@plt> “%d %d” lea-0xc(%ebp),%eax mov %eax,0x8(%esp) #第一 movl $0x804a23e,0x4(%esp)#,提示输入两个整型数字 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #将输入的数字个数返回到%eax中 cmp $0x1,%eax jg 8048deb 8048de1: 83 f8 01 8048de4: 7f 05 #若输入的数字个数大于1则跳转,否则爆炸,所以至少输入两个数字 8048de6: e8 e6 02 00 00 8048deb: 8b 45 f4 8048dee: 83 e0 0f call 80490d1 “与” 0xf,这个操作可以只保留第一个数的二进制后四位(0“与”任何数都为0) 8048df1: 89 45 f4 mov %eax,-0xc(%ebp)#经过上面的操作后再把第一个数放回原来的位置(只保留二进制表示的后四位) 8048df4: 83 f8 0f 8048df7: 74 29 cmp $0xf,%eax je 8048e22 #比较,如果第一个数和0xf(1111)相等则爆炸,说明第一个数的二进制后四位不能为“1111”,否则爆炸 8048df9: b9 00 00 00 00 用来累加%eax,初始化为0 8048dfe: ba 00 00 00 00 循环次数,初始化为0 mov $0x0,%edx #%edx=0 ; mov $0x0,%ecx #%ecx=0 ; 8048e03: bb c0 a1 04 08 mov $0x804a1c0,%ebx # p *0x804a1c0=10,这个地址为数组的首地址,求的值为第一个元素的值,求数组元素:p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} 8048e08: 83 c2 01 从这里开始 8048e0b: 8b 04 83 mov(%ebx,%eax,4),%eaxadd $0x1,%edx #%edx=1,循环#%eax=(%ebx+4*%eax)=(0x804a1c0+4*%eax);%eax用来保存求出的数组中的某个值 8048e0e: 01 c1 #%ecx=%ecx+%eax 8048e10: 83 f8 0f 8048e13: 75 f3 cmp $0xf,%eax jne 8048e08 add %eax,%ecx#如果此时%eax(此时的数组元素值)不等于15,则继续循环,否则执行下一语句 8048e15: 89 45 f4 在的元素值放回第一个数的位置??? 8048e18: 83 fa 0f 8048e1b: 75 05 cmp $0xf,%edx jne 8048e22 mov %eax,-0xc(%ebp)#将现#如果%edx不等于15,则爆炸,所以,要循环15次 8048e1d: 39 4d f0 cmp %ecx,-0x10(%ebp) #累加的结果 8048e20: 74 05 #判断第二个数的值 8048e22: e8 aa 02 00 00 8048e27: 83 c4 20 8048e2a: 5b 8048e2b: 5e 8048e2c: 5d call 80490d1 je 8048e27 8048e2d: c3 思路与分析: ret movl $0x804a23e,0x4(%esp)仍然提示输入两个整型数字,and $0xf,%eax第一个数 “与” 0xf,这个操作可以只保留第一个数的二进制后四位(0“与”任何数都为0)。mov %eax,-0xc(%ebp)经过上面的操作后再把第一个数放回原来的位置(只保留二进制表示的后四位)。cmp $0xf,%eax和je 8048e22 比较,如果第一个数和0xf(1111)相等则爆炸,说明第一个数的二进制后四位不能为“1111”,否则爆炸。mov $0x804a1c0,%ebx这个地址为数组的首地址,求的值为第一个元素的值。求数组元素:p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} 通过分析汇编代码可以推出如下c代码: # p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} # sum=0;# for(i=1;n!=15;i++){ # # # } # if(i==15)# return sum;n=a[n];sum+=n;n最后需要等于15,采用逆推的方法可以知道从开始到最后n的值分别为(因为开始循环之前取了一个n,所以总的有16个n):5,12,3,7,11,13,9,4,8,0,10,1,2,14,6,15、也就是说需要一开始传进去的值为5,循环15次后得到的元素值才为15。只要用户输入的第一位数的二进制的后四位是0101(5),则可以通过,所以第一个数有无穷多个。第二个数累加的结果为12+3+7+11+13+9+4+8+0+10+1+2+14+6+15=115。 所以两个数为 5 和 115。用户输入第一个数二进制下的后四位为0101(即第一个n=5),而之前位可以随意取值。因此有无数多的密码。如5 115;21 115等。随意输入一组即可通过关卡。 结论与心得: 这一关用到了循环链表,可以通过逆推的方法找到输入的第一个数字是什么,然后根据c代码确定累加的和。 6.phase_6 phase_6汇编代码及注释如下: 08048c89 : 8048c89: 55 8048c8a: 89 e5 8048c8c: 57 8048c8d: 56 8048c8e: 53 8048c8f: 83 ec 5c 间 8048c92: 8d 45 d0 8048c95: 89 44 24 04 8048c99: 8b 45 08 8048c9c: 89 04 24 8048c9f: e8 67 04 00 00 #输入六个数 mov $0x0,%esi #%esi=0 lea-0x30(%ebp),%eax mov %eax,0x4(%esp)mov 0x8(%ebp),%eax mov %eax,(%esp)call 804910b push %ebp mov %esp,%ebp push %edi push %esi push %ebx sub $0x5c,%esp #开辟一个栈空 8048ca4: be 00 00 00 00 8048ca9: 8d 7d d0 lea-0x30(%ebp),%edi #指明的是当前数字,将第一个数的地址传递给%edi 8048cac: 8b 04 b7 将第一个数字给%eax,开始外层循环 sub $0x1,%eax #%eax--cmp $0x5,%eax jbe 8048cbc mov(%edi,%esi,4),%eax # 8048caf: 83 e8 01 8048cb2: 83 f8 05 8048cb5: 76 05 #%eax小于等于5则跳过炸弹,说明当前数字要小于等于6,又因为是无符号的比较(jbe),所以还需要当前数字大于等于1,也就是当前数字只能取1,2,3,4,5,6 8048cb7: e8 15 04 00 00 8048cbc: 83 c6 01 #%esi=%esi+1=1 8048cbf: 83 fe 06 8048cc2: 74 22 cmp $0x6,%esi je 8048ce6 call 80490d1 lea(%edi,%esi,4),%ebx #将当前数放到%ebx中 8048cc7: 89 75 b4 将%esi放到%ebp-4c中 8048cca: 8b 44 b7 fc mov-0x4(%edi,%esi,4),%eaxmov %esi,-0x4c(%ebp)##将前一个数放到%eax中,开始内层循环 8048cce: 3b 03 8048cd0: 75 05 cmp(%ebx),%eax jne 8048cd7 #比较当前数和前一个数,如果不相等则跳转到8048cd7,否则爆炸,所以前后两个数不能相等。 8048cd2: e8 fa 03 00 00 8048cd7: 83 45 b4 01 循环条件每次加1 call 80490d1 # 8048cdb: 83 c3 04 到下一个数 8048cde: 83 7d b4 05 8048ce2: 7e e6 add $0x4,%ebx #地址加4,即 cmpl $0x5,-0x4c(%ebp)jle 8048cca #小于等于5跳转到8048cca,继续内层循环,所以esi从0到5,需要循环6次,8048ce4: eb c6 #继续外层循环,跳到8048cac #从上面两个循环可以看出,外层循环要求输入的6个数要在0~6之间,内层循环要求两个相邻的数不能相同 8048ce6: bb 00 00 00 00 跳到此处,%ebx=0 8048ceb: 8d 7d d0 一个数的地址放到%edi中 8048cee: eb 16 #跳转到8048d06 8048cf0: 8b 52 08 数组第一个元素大于1,就跳转到这里 8048cf3: 83 c0 01 8048cf6: 39 c8 8048cf8: 75 f6 #如果%eax不等于%ecx,则继续循环 8048cfa: 89 54 b5 b8 mov %edx,-0x48(%ebp,%esi,4)add $0x1,%eax #%eax=1 cmp %ecx,%eax jne 8048cf0 mov 0x8(%edx),%edx #如果 jmp 8048d06 lea-0x30(%ebp),%edi #将第mov $0x0,%ebx #%esi等于6时jmp 8048cac #如果数组第一个元素等于1,就跳转到这里, 8048cfe: 83 c3 01 8048d01: 83 fb 06 8048d04: 74 16 add $0x1,%ebx #%ebx=%ebx+1 cmp $0x6,%ebx je 8048d1c #如果%ebx=6,就跳转到8048d1c 8048d06: 89 de mov %ebx,%esi #%esi=0 8048d08: 8b 0c 9f 将数组第一个元素放到%ecx中 8048d0b: ba c4 c0 04 08 mov(%edi,%ebx,4),%ecx #mov $0x804c0c4,%edx #将地址0x804c0c4放到%edx中,p/x *0x804c0c4=0x1a7 8048d10: b8 01 00 00 00 8048d15: 83 f9 01 8048d18: 7f d6 mov $0x1,%eax #%eax=1 cmp $0x1,%ecx jg 8048cf0 #如果数组第一个元素大于1,就跳转到8048cf0 8048d1a: eb de jmp 8048cfa #如果数组第一个元素等于1,就跳转到8048cfa 8048d1c: 8b 5d b8 mov-0x48(%ebp),%ebx #重新排列链表的值 #n[0] 8048d1f: 8b 45 bc 8048d22: 89 43 08 #n[0]+8=n[1] 8048d25: 8b 55 c0 8048d28: 89 50 08 #n[1]+8=n[2] 8048d2b: 8b 45 c4 8048d2e: 89 42 08 #n[2]+8=n[3] 8048d31: 8b 55 c8 8048d34: 89 50 08 #n[3]+8=n[4] 8048d37: 8b 45 cc 8048d3a: 89 42 08 #n[4]+8=n[5] 8048d3d: c7 40 08 00 00 00 00 表的值进行检测 movl $0x0,0x8(%eax) #对链 mov-0x34(%ebp),%eax mov %eax,0x8(%edx)mov-0x38(%ebp),%edx mov %edx,0x8(%eax)mov-0x3c(%ebp),%eax mov %eax,0x8(%edx)mov-0x40(%ebp),%edx mov %edx,0x8(%eax)mov-0x44(%ebp),%eax mov %eax,0x8(%ebx)8048d44: be 00 00 00 00 8048d49: 8b 43 08 8048d4c: 8b 13 8048d4e: 3b 10 8048d50: 7d 05 mov $0x0,%esi mov 0x8(%ebx),%eax mov(%ebx),%edx cmp(%eax),%edx jge 8048d57 #第二个元素大一第一个元素就跳过炸弹,所以需要降序排列 8048d52: e8 7a 03 00 00 8048d57: 8b 5b 08 8048d5a: 83 c6 01 8048d5d: 83 fe 05 8048d60: 75 e7 call 80490d1 jne 8048d49 #数组中的每个元素都要满足降序排列 8048d62: 83 c4 5c 8048d65: 5b 8048d66: 5e 8048d67: 5f 8048d68: 5d 8048d69: c3 思路与分析: call 804910b add $0x5c,%esp #释放栈空间 pop %ebx pop %esi pop %edi pop %ebp ret mov(%edi,%esi,4),%eax #将第一个数字给%eax,开始外层循环 sub $0x1,%eax #%eax--cmp $0x5,%eax jbe 8048cbc 8048caf: 83 e8 01 8048cb2: 83 f8 05 8048cb5: 76 05 #%eax小于等于5则跳过炸弹,说明当前数字要小于等于6,又因为是无符号的比较(jbe),所以还需要当前数字大于等于1,也就是当前数字只能取1,2,3,4,5,6 8048cb7: e8 15 04 00 00 call 80490d1 add $0x1,%esi #%esi=%esi+1=1 cmp $0x6,%esi je 8048ce6 #如果此时%esi等于6,则跳转到8048ce6,否则继续执行下一条指令 8048cc4: 8d 1c b7 前数放到%ebx中 8048cc7: 89 75 b4 到%ebp-4c中 8048cca: 8b 44 b7 fc mov-0x4(%edi,%esi,4),%eax #mov %esi,-0x4c(%ebp)#将%esi放lea(%edi,%esi,4),%ebx #将当将前一个数放到%eax中,开始内层循环 8048cce: 3b 03 8048cd0: 75 05 cmp(%ebx),%eax jne 8048cd7 #比较当前数和前一个数,如果不相等则跳转到8048cd7,否则爆炸,所以前后两个数不能相等。 8048cd2: e8 fa 03 00 00 8048cd7: 83 45 b4 01 条件每次加1 8048cdb: 83 c3 04 一个数 8048cde: 83 7d b4 05 8048ce2: 7e e6 cmpl $0x5,-0x4c(%ebp) jle 8048cca #add $0x4,%ebx #地址加4,即到下call 80490d1 #循环小于等于5跳转到8048cca,继续内层循环,所以esi从0到5,需要循环6次,8048ce4: eb c6 继续外层循环,跳到8048cac 这一段代码是一个嵌套的for循环,得出的结果是输入的6个数字为1-6之间的数字且相邻两个数字不能相等。 mov $0x0,%ebx #%esi等于6时跳到此处,%ebx=0 jmp 8048cac # 8048ceb: 8d 7d d0 数的地址放到%edi中 8048cee: eb 16 跳转到8048d06 8048cf0: 8b 52 08 第一个元素大于1,就跳转到这里 8048cf3: 83 c0 01 8048cf6: 39 c8 8048cf8: 75 f6 如果%eax不等于%ecx,则继续循环 8048cfa: 89 54 b5 b8 lea-0x30(%ebp),%edi #将第一个 jmp 8048d06 #mov 0x8(%edx),%edx #如果数组 add $0x1,%eax #%eax=1 cmp %ecx,%eax jne 8048cf0 #mov %edx,-0x48(%ebp,%esi,4)#如果数组第一个元素等于1,就跳转到这里, 8048cfe: 83 c3 01 8048d01: 83 fb 06 8048d04: 74 16 如果%ebx=6,就跳转到8048d1c 8048d06: 89 de 8048d08: 8b 0c 9f 组第一个元素放到%ecx中 8048d0b: ba c4 c0 04 08 mov $0x804c0c4,%edx #将地址mov %ebx,%esi #%esi=0 mov(%edi,%ebx,4),%ecx #将数 add $0x1,%ebx #%ebx=%ebx+1 cmp $0x6,%ebx je 8048d1c #0x804c0c4放到%edx中,p/x *0x804c0c4=0x1a7 8048d10: b8 01 00 00 00 8048d15: 83 f9 01 8048d18: 7f d6 mov $0x1,%eax #%eax=1 cmp $0x1,%ecx jg 8048cf0 #如果数组第一个元素大于1,就跳转到8048cf0 8048d1a: eb de jmp 8048cfa #如果数组第一个元素等于1,就跳转到8048cfa 这又是一个嵌套的for循环,根据用户输入的值来对链表的值进行排序,比如给出值 5 6 1 4 3 2,则将原来链表第 5个位置的值放到第1位,第6个位置的值放到第二位,依次类推。而下面检测链表值时,要求链表值按从大到小排列。通过指令查看链表的值为;#p/x *0x804c0c4=0x1a7 #p/x *0x804c0cc=0x804c0b8 #p/x *0x804c0b8=0x6c #p/x *0x804c0c0=0x804c0ac #p/x *0x804c0ac=0x155 #p/x *0x804c0b4=0x804c0a0 #p/x *0x804c0a0=0x187 #p/x *0x804c0a8=0x804c094 #p/x *0x804c094=0x3bd #p/x *0x804c09c=0x804c088 #p/x *0x804c088=0x255 所以对应关系为:1->0x1a7;2->0x6c;3->0x155;4->0x187;5->0x3bd;6->0x255。第二个数组按从大到小的顺序排列应该为:3bd 255 1a7 187 155 6c。所以,输入的数字应该为:5 6 1 4 3 2。输入这六个数字即可通过关卡。结论与心得: 这一关用到了排序与映射,首先确定输入的6个数字为1-6,然后将这6个数字与数组中的数字对应起来,根据数组中的数据应该降序排列确定输入数字的顺序即可。 通过全部关卡过程如下: 四、实验心得 这次实验phase_1至phase_3三关相对比较简单,也比较好理解。但phase_4至phase_6相对比较难,相应的c代码也不像前面三关一样简单易懂,更是加入了链表和映射等相关知识,着实花了不少功夫才弄懂。 通过这次试验,我对汇编代码有了进一步的了解,更加熟悉了汇编代码中各种指令的作用,我相信这样的一次实践对我今后学习理论课程以及更深入地理解计算机系统会很有帮助。 附件: 山东农业大学 学生管理系统 学生用户操作手册 山东农业大学学生工作处 二○○八年九月 目 录 一、登录说明.........................................................................................2 二、个人信息.........................................................................................2 三、事务信息.........................................................................................3 四、学生注册.........................................................................................3 五、学生缴费.........................................................................................4 六、奖学助学.........................................................................................4 七、学生就业.........................................................................................5 八、综合测评.........................................................................................5 九、在线考试.........................................................................................6 十、安全预警.........................................................................................7 十一、控制面板.....................................................................................8 十二、退出系统.....................................................................................8 一、登录说明 登陆山东农业大学主页----机构设置-----学工处----学生管理系统 输入个人学号和学生处分配的密码,输入验证码,选择“学生”,然后点击右边的登录进入系统。 二、个人信息 学籍信息 :点击浏览个人学籍信息。通信信息 :点击修改个人通信信息。 家庭情况 :点击查看个人家庭成员,点击“新增”可以增加家庭成员 学生简历 :点击浏览个人简历,点击“新增”增加信息。保险信息 :点击查看个人已经参加的保险信息。 信用档案 :点击查看个人信用信息,可以修改个人信用认识和浏览个人失信记录。违纪记录 :点击浏览个人违纪记录。 三、事务信息 点击导航栏的“事务信息”可以进入事务信息界面。点击红色的连接可以进入相应的栏目浏览学工发布的内部通报,事务通知,案情通报,异情通报,维权信息,学生投诉,意见建议等相关信息。双击列表中的信息,可以浏览详细信息。 四、学生注册 注册信息 :点击浏览个人注册信息。 网上注册 :开学注册,点击进去按照说明填写。 五、学生缴费 欠费记录 :点击浏览个人欠费记录 还款记录 :点击浏览个人还贷记录 缓交学费申请 :点击浏览个人缓交学费申请记录,点击“新增”填写新申请。欠费处理申请 :点击浏览个人欠费处理申请记录,点击“新增”填写新申请。 六、奖学助学 点击导航栏的“奖学助学”可以进入奖学助学界面。奖学助学主要分为: 评优记录 奖学金记录 贫困信息登记 社会资助记录 困难补助记录 勤工学生信息 勤工岗位申请记录 贷款记录 贷款家庭信息 学费减免记录 1)评优记录 信息由学工添加,记录学生三好学生,优秀积极分子等评优记录。2)奖学金记录 主要是学生的奖学金记录。点击“申请”按钮可以申请奖学金,按照相关要求填写完相关信息后点击“保存并返回”。 3)贫困信息登记 登记学生的家庭收入情况等信息,作为其他申请,学工了解学生家庭情况参考使用。学生每次修改后要通过审核,学工才能浏览学生信息,请注意修改。 4)社会资助记录 记录学生的社会资助记录,申请与奖学金类似。 5)困难补助记录 记录学生的困难补助记录,申请与奖学金类似。 6)勤工学生信息 每个学期初学生登记个人的信息,方便勤工管理人员安排工作。点击“登记”填写相关信息。 7)勤工岗位申请记录 勤工岗位申请的记录。点击“申请”,填写相关信息提交。贷款记录 学生贷款记录,申请与奖学金类似。 8)贷款家庭信息 贷款专用家庭信息。点击可以修改。9)学费减免记录 学生学费减免记录,申请与奖学金类似。 注:上传文件主要是一些证明文件,学生照片等申请用到的资料七、八、学生就业 综合测评 点击“就业信息”查看个人就业信息。 1)测评成绩 :查看各学期的测评成绩。2)在线测评 : 点击“开始测评”按要求说明填写各项的信息。 3)素质认证 :点击浏览个人的奖项,实践,学习信息。 4)评优获奖 :学生的评优,获奖情况。点击“新增”可以添加信息。添加后等等审核。5)社会工作 :学生社会工作经历,点击“新增”添加工作记录。6)社会实践 :与社会工作类似。7)进修与学习:与社会工作类似。 九、在线考试 1)考试信息 列出了你当前可以参加的考试,选中一条考试记录,点击按钮“参加考试”可以参加考试,点击“报名”可以考试报名。 考试过程: 参加一场考试后,先进入的是考试准备界面,浏览考试相关的信息。 倒数完后进入答题界面,在试题上面可以看到自己的学号,考场公告,考试倒计时。在试题下面有提前交卷按钮,可以提前交卷。“保存答题数据”可以保存你当前的答题数据到服务器上防止因为掉线,电脑意外关机等引起数据丢失,系统会每5分钟自动保存一次。“加载服务器答题数据”可以把上一次保存的答题数据加载到当前的试卷。 2)考试记录 考试记录记录了你参加过的考试,并在这里可以看到考试成绩。3)在线调查 当前可以参与的调查。点击“参加调查”参与调查。 十、安全预警 安全预警包括: 案情通报 :可以填写、举报一些违法犯罪事件。 异情通报 :对一些学生、各种人员、环境等的不正常的情况的一个反馈。维权信息 :用于学生维护自己合法权益。 学生投诉 :对于一些不正常,不公平等事件的投诉。意见建议 :对学校的各种意见建议。 报修信息 :宿舍,学校等各种设备的损坏的一个报修平台。 操作:点击上面的连接可以查看相应的记录,点击“新增”可以增加相应的记录。 十一、控制面板 1)点击修改密码,可以修改用户密码。2)系统帮助,本操作说明。 十二、退出系统 点击退出系统,可以退出当前用户,回到登录界面。请关闭本系统的时候使用本按钮,以防别人打开系统时候由于浏览器缓存而使用你的帐号,产生安全问题。 附件1: 大工业用户管理规定 依据《供电电营业规则》第二十三、二十四、二十五条规定,用户减容、用户暂停、用户暂换应按下列规定办理; 一、用户减容,须在五天前向供电企业提出申请。供电企业应按下列规定办理: 1、减容必须是整台或整组变压器的停止或更换小容量变压器用电。供电企业在受理之日后,根据用户申请减容的日期对设备进行加封。从加封之日起,按原计费方式减收其相应容量的基本电费。但用户申明为永久性减容的或从加封之日起期满二年又不办理恢复用电手续的,其减容后的容量已达不到实施两部制电价规定容量标准时,应改为单一制电费计费; 2、减少用电容量的期限,应根据用户所提出的申请确定,但最短期限不得少于六个月,最长期限不得超过二年; 3、在减容期限内,供电企业应保留用户减少容量的使用权。超过减容期限要求恢复用电时,应按新装或增容手续办理; 4、在减容期限内要求恢复用电时,应在五天前向供电企业办理恢复用电手续,基本电费从启封之日起计收; 5、减容期满后的用户以及新装、增容用户,二年内不得申办减容或暂停。如确需继续办理减容或暂停的,减少或暂停部分容量的基本电费应按百分之五十计算收取。 二、用户暂停,须在五天前向供电企业提出申请。供电企业应按下列规定办理: 1、用户在每一日历年内,可申请全部(含不通过受电变压器的高压发动机)或部分用电容量的暂时停止用电两次,每次不得少于十五天,一年累计暂停时间不得超过六个月。季节性用电或国家另有规定的用户,累计暂停时间可以另议; 2、按变压器容量计收基本电费的用户,暂停用电必须是整台或整组变压器停止运行。供电企业在受理暂停申请后,根据用户申请暂停日期对暂停设备加封。从加封之日起,按原计费方式减收其相应容量的基本电费; 3、暂停期满或每一日历年内累计暂停用电时间超过六个月者,不论用户是否申请恢复用电,供电企业须从期满之日起,按合同约定的容量计收其基本电费; 4、在暂停期限内,用户申请恢复暂停用电容量用电时,须在预定恢复日前五天向供电企业提出申请。暂停时间少于十五天者,暂停期间基本电费照收; 5、按最大需量计收基本电费的用户,申请暂停用电必须是全部容量(含不通过受电变压器的高压电动机)的暂停,并遵守本条1至4项的有关规定。 三、用户暂换(因受电变压器故障而无相同容量变压器替代,需要临时更换大容量变压器),须在更换前向供电企业提出申请。供电企业应按下列规定办理: 1、必须在原受电地点内整台的暂换受电变压器; 2、暂换变压器的使用时间,10千伏及以下的不得超过二个月,35 千伏及以上的不得超过三个月。逾期不办理手续的,供电企业可中止供电; 3、暂换的变压器经检验合格后才能投入运行; 4、对两部制电价用户须在暂换之日起,按替换后的变压器容量计收基本电费。 网站用户管理系统V1.0 1 网站用户管理系统 1.1 系统简介 网站需要用户互动来促进网站发展。当用户在网站中注册为注册会员,则相当于在网站中有了一个通行证,会员可用以辨别属于自己的信息、访问或发布权限允许内的信息。站长可用以对会员设定各种优惠方案、积分活动和统计相关情况,以提高网站运营成功率。 网站用户分成管理员、注册会员和游客三大类,其中管理员和注册会员都有独立的管理界面。管理员拥有网站管理后台管理权限。注册会员可以浏览相关权限范围内的网页信息,并可在会员中心发表相关信息。 注册会员可自由划分成不同的会员组,以设置本类会员组所拥有的权限。在网站正式运营前,需要先设置网站中用户的权限,如是否允许会员在网站中注册、是否可以在网站中发表信息等权限。1.2 软件安装 1.将“用户管理系统”文件夹拷贝到计算机D盘或E盘里。 2.打开“用户管理系统”文件夹,将config文件打开,把里面“server=„”改为“server=数据库服务器名(机子本身的服务器名或(LOCAL))”并将该文件保存。 3.双击“用户管理系统”里的“UserServers”文件(以快捷方式发送至桌面),就可以运行软件了。 1.21安装环境 软件环境 操作系统:Windows XP/Windows 2000/Windows2003 运行环境:MS Visaul Studio 2005 MS SQL Server 2000 硬件环境 网站用户管理系统V1.0 2 CPU :2GHZ以上 内存:1024M以上 硬盘:80G以上 2.1用户管理系统使用说明 2.11功能 提供软件的一般用户管理系统 2.22配置用户参数 配置用户参数 依次点击“系统设置”->“网站配置”->“用户参数配置”,在“用户参数配置”中只有开启了会 员注册功能,才需要进一步设置相关注册参数。设置好相关参数后,单击页面底部“保存设置”按钮保存 相应配置。 建立的表:以下表在建立时应该先加密码,程序打开时才由程序传 网站用户管理系统V1.0 3 递密码。以避免直接用工具可打开DB文件。 用户资料表 用户ID: 用户登录时输入的用户名。 用户姓名: 用户的真实姓名。 密码: 用户密码(在存入前应该进行必要的加密) 权限: 用户级别。 有效期开始:该帐号从何时开始有效(下面程序没利用该功能) 有效期截止:何时该帐号不能用。 是否有效: 可以让该用户暂时为不可用。 出错次数: 用户连续输错密码次数(当有正确输入时复位) 出错限度: 允许输错密码次数,如果超过该限度,该用户置为不可用,必须找管理员为其复位。 备注: 必要的说明。 活动表: 用户ID: 记录进入系统的用户ID.活动状态: 该用户是否是当前活动用户。(程序允许A用户进入后,不必 退出系统而让B用户进入,A用户被置为非活动用户,当B退出后A被变为活动用户,只有第一个用户才能退出系统,同时清空活动表) 进入系统的验证 供用户进入系统的密码输入窗口。 当用户输入完成后,首先打开用户资料表,检查该用户是否存在,若不存在,清空用户输入,提示不存在该用户,让用户从新输入,用户名输入错误这里将不作次数限制。 网站用户管理系统V1.0 4 若存在该用户,接着验证密码,如果正确,根据用户的使用期限,是否有效作判断,并根据结果作出是否允许用户进入系统。如果不允许,给出相应的提示后关闭系统。否则,根据用户的级别置某些功能不能使用,同时在活动表中记录该用户已进入,并复位出错次数字段。 如果存在该用户,但密码错误,用户资料表中的出错次数加一。让用户从新输入。 实现部分功能的程序 密码修改 一般用户只能修改自己的密码,当用户选择该功能时,提示用户输入一次旧密码,两次新密码。用户可以按清除键重新输入。当用户输入完成后,先从活动表找出 该用户ID,再按ID寻找用户资料表找到该用户,先比较旧密码,错误提示从新修改,正 确则完成修改。 超级用户可以设置/修改用户资料表中的所有资料及密码初始化。网站用户管理系统V1.0 5 2.3.1 用户管理 2.3.1.1 用户系统管理 注册前台会员 在网站首页的“用户登录”中,单击“注册”功能链接,在出现的“用户册”页面单击“我同意”按钮同意服务条款和声明后,在显示的信息页中填写用户名、密码等相关内容,单击“下一步”按钮,系统出现注册成功提示信息。返回在网站首页,在“用户登录”中填写刚才注册的用户名与密码后,单击“登录”按钮登录,在登录成功后,“用户登录”中显示登录信息,若单击“会员中心”功能链接即可进入会员中心操作相关信息,若单击“退出登录”功能链接即可退出登录。 2.3.1.2 管理会员组 依次点击“用户管理”->“会员管理”->“会员组管理”,在出现的管理界面中显示了系统默认内置的 会员组信息。在“注册会员”会员组的“操作”列中单击“修改”功能链接,在出现的“修改会员组”界面中,修改会员组名称、会员组说明,点选会员组类型后,单击“保存会员组并进行权限设置”功能按钮,系统自动转到“设置会员组权限”管理界面中,可进一步修改本会员组中的所有会员的发布权限、评论权限、短消息权限、收藏夹权限、计费方式、扣点券方式、自助充值等相关选项及参数,同时也可以设置本会员组中的会员的 节点权限、专题权限和字段权限。修改好相关信息后,单击页面底部的“保存”功能按钮,系统出现成功提示信息,单击“<< 返回上一页”功能链接返回会员组管理界面。网站用户管理系统V1.0 6 2.3.1.3 更改密码 在控制台主界面的工具栏上,点击“更改密码”按钮,会弹出更改密码的对话框,可以更改超级管理员密码。 2.3.1.3 退出控制台 在控制台主界面的工具栏上,点击“退出系统”按钮,即退出控制台。 2.3.1.4 锁定控制台 在控制台主界面的工具栏上,点击“锁定系统”,会弹出锁定系统的对话框,必须输入正确的超级管理员密码,才能够解除控制台的锁定状态。 2.4 基本操作 2.4.1 新增管理员 在管理员列表空白处单击鼠标右键,在弹出的菜单中选择“新增管理员”; 网站用户管理系统V1.0 7 点击“新增管理员”后,在弹出的对话框中填入用户名称(如:Admin),并且选定操作权限(如:操作员),然后在“登录密码”框中输入密码,再在“确认密码”框中再次输入刚才键入的密码,最后点击对话框上的“确认”。 此时用户可以退出系统,然后用新建的管理员帐号登录,以验证此帐号的成功建立。 2.5 留言板管理 留言列表中显示留言的发布者、发布时间、所在IP地址、留言内容、联系方式及留言所属分类等信息,便于进行管理(修改或删除)操作。 [回复/修改回复]:选中需回复/修改的留言,单击[回复/修改回复]按 网站用户管理系统V1.0 8 钮,进入回复修改留言界面,操作完毕单击“提交”按钮。 [删除]:选中需删除的留言,单击[删除]按钮,确定删除留言。注意:删除后不可恢复,操作需谨慎。 :勾选或多选需审核的留言,单击审核留言按钮,进行审核。审核过的留言方可在前台显示。 :勾选或多选需删除的留言,单击删除留言按钮,进行批量删除。注意:删除后不可恢复,操作需谨慎。 相关内容: 网站用户管理系统V1.0 9 重复留言时间限制:对重复留言的时间间隔做出限制,可在一定程度上防止营销软件的恶意留言。 操作步骤:单击菜单“系统设置”》“系统参数设置”子菜单,进入参数设置界面,选择“信息属性”,进行“重复留言时间限制”设置。 2.6 用户反馈系统 单击“插件管理”菜单 》信息反馈管理“管理信息反馈”子菜单,进入管理信息反馈界面: 信息反馈列表中显示反馈的ID、标题、反馈所属分类、发布时间等信息,便于进行管理(删除)操作。 管理反馈: [删除]:选中需删除的信息反馈,单击[删除]按钮,确定删除反馈。注意:删除后不可恢复,操作需谨慎。 :勾选或多选需删除的信息反馈,单击批量删除按钮,确定删除反馈。注意:删除后不可恢复,操作需谨慎。 :管理信息反馈界面到管理反馈分类界面的转换按钮。 :管理信息反馈界面到管理反馈字段界面的转换按钮。网站用户管理系统V1.0 10 自定义信息反馈表单制作步骤: 1、分析反馈表单需要的字段; 2、增加反馈表单所需字段(如果原本的字段足够,这步可跳过); 3、增加信息反馈分类(每个信息反馈分类都可有不同的反馈表单); 4、完成。 下面举例说明: 制作“作品提交”表单 1、分析反馈表单需要的字段: 经过分析我们需要的字段如下:(字段标识:字段名)姓名:name 联系邮箱:email 联系电话:call 名:title 简介:saytext 2.7 好友列表 在网站中,会员可以将其他会员添加为好友,以方便随时快捷地给好友发送站内短消息。单击导航区“好 友列表”书签式面板,出现好友列表、添加好友、创建新组、分组管理等功能链接。 单击导航区“好友列表”导航链接,出现好友列表、添加好友、创建新组、分组管理等功能链接,在 网站用户管理系统V1.0 11 下方界面中系统以分页列表的方式显示本会员的成员组及相关好友信息。 添加好友 在界面中填写成员用户名,选择成员组(默认可选择黑名单或我的好友)后,单击“添加成员”按 钮以添加好友。在好友列表界面中即可点击操作列中“发短消息”功能链接,对本好友发送站内短消息。 2.8 快捷管理信息 在管理界面顶部,将鼠标移至“选择栏目”功能链接上,系统以树型结构显示站内的节点列表(若有 多级节点分类,鼠标点击节点树前面的“+”图标即可展开下级节点)。单击相应栏目节点名可以快速管理 栏目中的信息。在相应节点名上单击鼠标右键,即可出现相应的管理菜单项。 在相应节点上单击鼠标右键,在弹出的右键菜单中选择“添加信息”(系统根据不同的内容模型而显示 不同的项目名,如添加文章、添加图片、添加软件等)功能链接则可快捷添加信息,系统将直接进入“内 容添加”管理界面。 2.9 短消息管理 系统提供站内短消息互动功能,注册会员既可以对网站中的注册会员发送短消息、管理站内短消息,也 可以回复其他会员发送来的站内短消息。网站用户管理系统V1.0 12 单击导航区“短消息管理”导航链接,在出现的管理界面中显示本会员收到的短消息信息。撰写短消息 单击导航区“短消息管理”书签式面板中“撰写短消息”功能链接,在出现的界面填写收件人、短消 息主题和短消息内容后,单击“发送”按钮即可向指定的收件人发送短消息,同时收件人打开会员中心时系 统将自动弹出短消息;单击“保存”按钮出现保存成功信息,短消息保存在您的“草稿箱”里;单击“清 除”按钮即清除所撰写的短消息内容。重要参数说明: 收件人:指定要收本条短消息的站内注册会员。在收件人内容框中,可以用英文状态下的逗号将用户名 隔开实现群发,最多2 0 0 0 个用户。若会员在“好友列表”中添加了好友,则可在“请选择”下拉选择框 中快捷选择加为好友注册的会员名。 草稿箱 在此界面中显示短消息的收件人、主题、发送短消息的日期、大小、已读及删除操作等信息。单击短 消息主题可具体查看此短消息。您可以单击操作列中的“删除”,将对应的短消息删除;也可以选定多个 或者本页所有短消息,单击“删除选定的短消息”或者“清空草稿箱”进行批量删除。 收件箱 在此界面中显示短消息的收件人、主题、发送短消息的日期、大小、已读及删除操作等信息。单击短 消息主题可具体查看此短消息。您可以单击操作列中的“删除”,将对 网站用户管理系统V1.0 13 应的短消息删除;也可以选定多个或 者本页所有短消息,单击“删除选定的短消息”或者“清空已发送”进行批量删除。发件箱 此界面显示短消息的收件人、主题、发送短消息的日期、大小、已读及删除操作等信息。单击短消息 主题可具体查看此短消息。您可以单击操作列中的“删除”,将对应的短消息删除;也可以选定多个或者 本页所有短消息,单击“删除选定的短消息”或者“清空已发送”进行批量删除。 废件箱 此界面显示短消息的收件人、主题、发送短消息的日期、大小、已读及删除操作等信息。单击短消息 主题可具体查看此短消息。您可以单击操作列中的“删除”,将对应的短消息删除;也可以选定多个或者 本页所有短消息,单击“删除选定的短消息”或者“清空已发送”进行批量删除。 2.10 资金管理 当会员在网站中消费行为而产生的相关订单与资金消费情况,都将记录在会员中心相关明 细记录里。在资金管理中,会员可以查阅收入、支出、在线支付及点券、积分、有效期兑换等明细记录。 单击导航区“资金管理”书签式面板,出现所有明细记录、所有收入记录、所有支出记录、在线支 付记录等功能链接。所有明细记录 单击“所有明细记录”功能链接,在界面系统以分页列表的方式显示会员在网站中所有收入和支出信息,包括交易时间、交易方式、币种、收入金额、支出金额、银行名称和备注/ 说明等信息。所有收入记录 单击“所有收入记录”功能链接,在界面系统以分页列表的方式显示会 网站用户管理系统V1.0 14 员在网站中所有收入信息,包 括交易时间、交易方式、币种、收入金额、支出金额、银行名称和备注/ 说明等信息。所有支出记录 单击“所有支出记录”功能链接,在界面系统以分页列表的方式显示会员在网站中所有支出信息,包 括交易时间、交易方式、币种、收入金额、支出金额、银行名称和备注/ 说明等。在线支付记录 单击“在线支付记录”功能链接,在界面系统以分页列表的方式显示会员在网站中所有在线支付信息,包括支付序号、支付平台、交易时间、汇款金额、实际转账金额、交易状态、银行信息和备注等信息。第三篇:学生管理系统学生用户操作手册
第四篇:大工业用户管理规定
第五篇:网站用户管理系统