返回   cpper编程论坛 > 技术杂烩
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

技术杂烩 找不到地方的技术问题?这里!

回复
 
LinkBack 主题工具 显示模式
  #1 (permalink)  
旧 2007-05-21
普通会员
 
注册日期: 2004-11-24
帖子: 47
abscon 正向着好的方向发展
问题 【常识问题】如何重现操作序列?

假如A用某软件G进行了一系列操作,并把操作序列(打了些什么键,鼠标点击的坐标)记录到文件R里。
现在B有软件G和文件R,可不可以用一个新的程序M启动软件G,把文件R当成输入灌输给G?如果可以,怎么编写出程序M来欺骗G?

请给思路~~缺乏这方面常识的人飘过~~
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #2 (permalink)  
旧 2007-05-21
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,138
文章: 20
polyrandom 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

Windows里面有一个CBT钩子,可能可以实现这个。
但是通常你保存的应该是消息,譬如说WM_COMMAND,WM_CHAR之类的,而且你要在合适的时间把消息传递给应用程序。我觉得如果对方配合的话,还是可行的。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #3 (permalink)  
旧 2007-05-22
普通会员
 
注册日期: 2004-11-24
帖子: 47
abscon 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

是一个上世纪九十年代的老程序,估计使用VC++搞的(从出错提示信息推测)
又想了想,好像由R还是不能完全确定G的行为,因为G有可能抓系统时间生成一个随机数种子,然后还要根据随机数序列确定对R的响应,种子还得记录下来(天知道在哪里)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #4 (permalink)  
旧 2007-05-22
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,138
文章: 20
polyrandom 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

不必想得那么复杂。大多数软件没有这样一个随机数种子的。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #5 (permalink)  
旧 2007-05-22
Elminster 的头像
超级版主
 
注册日期: 2002-09-09
帖子: 1,764
Elminster 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

引用:
作者: polyrandom 查看帖子
不必想得那么复杂。大多数软件没有这样一个随机数种子的。
但是还是有可能同样的操作序列得不到同样的结果,比如本来可以打开的文件打不开了。嗯嗯,说起来,abscon 你想要模拟是打算做什么呢?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #6 (permalink)  
旧 2007-05-22
cat cat 当前离线
高级会员
 
注册日期: 2003-11-06
帖子: 1,563
文章: 6
cat 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

UI Test Automation?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #7 (permalink)  
旧 2007-05-22
liuxinyu 的头像
高级会员
 
注册日期: 2006-02-09
帖子: 311
文章: 49
liuxinyu 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

我感觉和cat一样,这在外在行为上和自动化测试非常像。
一些gui程序的自动化测试,就是通过“录制”一组动作,然后
连续,高强度的“播放”动作到一个程序。

当然,同一操作,使得被测程序产生不同响应是完全可能的。
因为程序可能不能看成是时不变函数。

BTW:正好前一阵我写了这样一个“不光彩”的程序。有个gui的crack,作用
就是点击generate按钮,后生成一个key。我希望做一个安装
包,用户安装程序后,迅速crack掉。当然是内部使用了,但是还是
不希望用户看到crack的过程。所以就手动写了个程序,对着
crack程序模拟按下generage按钮,然后迅速关闭它。由于
不想用MFC,因为手中没有合法的vc,所以就用dev-cpp和win32库
将就了一把,见附件
上传的附件
文件类型: zip sendkey.zip (2.1 KB, 4 次查看)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #8 (permalink)  
旧 2007-05-23
housisong 的头像
高级会员
 
注册日期: 2003-08-28
住址: 深圳`
帖子: 446
文章: 6
housisong 正向着好的方向发展
发送 MSN 消息给 housisong
默认 回复: 【常识问题】如何重现操作序列?

可重现的需求还是很重要的

我们写的游戏客户端就部分支持重现,游戏过程中可以打开日志,然后程序可以load日志来重现或调试;
(没有做到每帧完全重现,只作到逻辑重现;服务器端也会自动生成游戏逻辑日志(让客户端重现的逻辑))
这对于调试和跟踪错误很有用

测试UI要做到重现(黑盒模式)我觉得比较难,可以考虑程序内部做一个支持层(我们的就是),这个感觉简单一点
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #9 (permalink)  
旧 2007-05-25
 
注册日期: 2007-05-10
住址: 南开区
帖子: 27
allon 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

m就相当于一个中间层/件,如果是一个简单的可逆过程,并不能保证可逆结果的正确性。如果A使用软件G纪录了输入序列,并产生了输出结果,确认软件G在收到相同输入后,产生的输入序列和输出结果是唯一的,不同的输入产生的输入序列和输出结果不一致。那么b通过m伪装成a,并将文件R转化成输入提供给G,那么G会产生输入序列文件R',和输出结果。如果文件R'和R完全一致,输出结果一致,则欺骗可以成功。如果R'和R等价,则不一定欺骗成功。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #10 (permalink)  
旧 2007-05-25
普通会员
 
注册日期: 2004-11-24
帖子: 47
abscon 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

引用:
作者: Elminster 查看帖子
但是还是有可能同样的操作序列得不到同样的结果,比如本来可以打开的文件打不开了。嗯嗯,说起来,abscon 你想要模拟是打算做什么呢?
不考虑文件打不开之类的事情;假设所有的输入都由R包了。
其实,俺是想把别人玩游戏时的操作记录下来,然后重现一遍。当然,如果游戏自带redisplay功能,就不必如此了;可惜没有。

引用:
作者: polyrandom 查看帖子
不必想得那么复杂。大多数软件没有这样一个随机数种子的。
正因为是游戏,所以会有随机数。

引用:
作者: housisong 查看帖子
可以考虑程序内部做一个支持层(我们的就是),这个感觉简单一点
问题是,G就是个黑盒子,没有改变G的能力。

引用:
作者: allon 查看帖子
m就相当于一个中间层/件,如果是一个简单的可逆过程,并不能保证可逆结果的正确性。如果A使用软件G纪录了输入序列,并产生了输出结果,确认软件G在收到相同输入后,产生的输入序列和输出结果是唯一的,不同的输入产生的输入序列和输出结果不一致。那么b通过m伪装成a,并将文件R转化成输入提供给G,那么G会产生输入序列文件R',和输出结果。如果文件R'和R完全一致,输出结果一致,则欺骗可以成功。如果R'和R等价,则不一定欺骗成功。
这位兄弟讲得太抽象了~~感觉这个任务是个脏活儿~~
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #11 (permalink)  
旧 2007-05-25
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,138
文章: 20
polyrandom 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

早说是游戏,我就不说了。
别为此费力了,不值得
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #12 (permalink)  
旧 2007-05-25
普通会员
 
注册日期: 2004-11-24
帖子: 47
abscon 正向着好的方向发展
默认 回复: 【常识问题】如何重现操作序列?

引用:
作者: polyrandom 查看帖子
早说是游戏,我就不说了。
别为此费力了,不值得
其实这个问题还是有些普遍意义的
谢谢兄弟的提醒
sigh
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9。现在的时间是 09:50 AM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2009,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0