如何由执行文件修改自身的源文件(在编程调试模式下)(200)

  • 主题发起人 主题发起人 Geminiyc
  • 开始时间 开始时间
G

Geminiyc

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,例如我想在源程序编译执行时,点击button1,能够在窗体的某处动态生成button2,而且下次重新编译源程序时,button2已经自动在该处了。又或者我想在源程序第一次编译执行时,自动将button1的caption属性设置为“ABC”,并且返回设计模式时,button1的caption也已经是“ABC”了。——这个问题不仅仅是针对DELPHI,其他语言,也包括其他语言的程序文件,如VB/VFP/VC等。期待各位大侠的指点,先谢谢了。
 
那有什么难的?就是直接修改dfm及pas文件而已只是这样做有什么意义呢?生成了都是要重新编译才有效的。
 
我想过这种方法,即在源文件某个“恰当处”添加一些需要的代码,这样下次编译的时候就会出现新的效果。但这个方法我自己不大满意,因为这个所谓“恰当处”在不同语言的源文件中可能比较难寻找,想请教有没有更好的方法。或者这样说,有没有办法在程序设计阶段“自动”生成一段代码或修改某些控件属性,而这些修改是另外一个程序执行的效果。
 
说说此需求的目的吧——我是一名计算机教师,每次上机考试时发现学生间相互copy的现象十分严重,于是想给每个学生的程序设置唯一的基因码(如一条关于学号信息的加密码),把它“秘密”内嵌在学生的程序中,……,程序运行时先自动验证内嵌基因码与“显示”的学号是否匹配……
 
需要根据你的实际判作业流程找到合适的处理方式.看样子你似乎是只检查编译好的二进制文件?
 
我觉得楼主的问题是一个管理问题,单纯从技术上解决有些难度。功能可以实现,但是在破解水平较高的同学那里,也是能够被破解屏蔽的。如果想简单地实现,可以参考filemon源代码,采用文件过滤驱动,对于一些特定语言的源程序进行处理。但是,这无法保证学生把程序拷到一台没有运行这个程序的机器上修改源程序,除非,要求所有的源程序都只能在本机修改,也就是说把源程序和机器特征相关联加密,实现一个源代码加密软件。
 
to tseug,谢谢你的提示。不用把学生想得太高级了,都是最简单的上机编程考试,他们要有能力破解,大可不必作弊copy了。我是这样设想的:我先制作一个考试软件,假设叫test.exe,安装在每台学生机上,学生考试时需一直运行。学生先在test.exe的界面上输入学号等信息,然后由test.exe生成一个专有的针对该学号的考试模板form1,学生再在form1上编程……
 
如果认为学生没能力破解,利用Delphi的Open Tools API可能实现起来可能简单一点
 
感觉楼主的要求跟多语言的实现方式差不多先写好配置文件,程序运行的时候先查找配置文件在确定自己的caption是什么点击button1修改的时候,修改配置文件。要是怕别人直接修改配置文件,就把内容加密后保存,取的时候先解密防止学生拷贝,可用多套试题随即组合或者每人一套试题
 
to tseug,Open Tools API可能不合适,我不可能考生的时候才来为每台学生机安装组件什么的,而且VFP/VB未必有类似的功能。to zhengrong117,用额外的“配置文件”的方式也有不妥,学生可以直接copy配置文件以外的程序啊,或者稍微好一点,只copy你界面上的所有控件。"每人一套试题"——你是在考老师啊
 
把题目入库,然后每个学生出的题目都不一样就是了。
 
源代码级的复制时无法甄别,程序的唯一性识别我认为还是从Open Tools API下手更容易。要不然你就需要自己实现一个用来考试用的模拟环境,在这个环境中你插入什么信息都是可以的。同一场考试中的两个学生不会用同一个机器,除非教师知道的特殊情况。所以将机器特征码和学号都写在程序中就基本可行了。编一个单元,实现特征码和学号的写入,然后要求学生引用该单元,但该单元在初始化节中执行特征码的写入。为防止修改该单元源码,可以只发布.dcu文件。
 
我觉得dark_power的方法还不错。“程序的唯一性识别我认为还是从Open Tools API下手更容易”这个我不是好会,也不清楚其他语言是否也能实现。“特征码和学号”的绑定,如何防止一台机器发送2份程序啊——老师如何识别?“考试模拟环境”我倒是觉得可行:考试必须在该环境中运行,该环境运行时系统断网断USB……
 
参考http://www.delphibbs.com/keylife/iblog_show.asp?xid=30704
 
要求所有学生在项目中引用一个已编译的单元(.dcu)。这个单元中进行机器码和学号的存储,并将信息编译到二进制文件中。这样生成的程序就携带了机器码和学号。我觉得你说的还是源文件级别的抄袭,这个不用自定义格式的文件是很难避免的。除非你再将模拟环境中不允许文本的复制和粘贴。
 
“这个单元中进行机器码和学号的存储,并将信息编译到二进制文件中。这样生成的程序就携带了机器码和学号。”——学生可以在编译之前抄袭源码,然后在与你指定的(.dcu)单元一起编译啊。感谢各位,我觉得直接防止源码的抄袭可以太难,还是编译一个“考试模拟环境”来实现可能实际点,下面是我的一些想法:C/S模式考试期间程序必须一直运行,该程序运行期间能够断网断USB,仅发送的时候才能send(还不能receive),程序结束后系统恢复正常——避免学生中途抄袭服务器端的作业只能由客户端发送,其他方式无法递交作业——限制学生必须用test.exe考试开始半小时后,服务端自动拒绝客户端的启动连接(或由教师手动启动拒绝设置)——避免学生抄袭后发送
 
谢谢各位好心高手
 
多人接受答案了。
 
后退
顶部