Winhex的脚本虽然强大也有一定的局限性、但是针对数据恢复而言非常实用、如果你去学习强大的编程语言如C++、delphi等那可能需要几个月甚至几年才可以编写软件、而winhex 的脚本可以在短短几分钟内完成。所以相对与编程而言 winhex 的脚本更加实用、虽然有一定的局限性. 第一章 winnhex 常用关键字 关键字 用法 解释 open open :? open d: 用于打开磁盘或逻辑分区 goto goto (0x000或标签、已声明的变量) 跳转的位置XXX或标签处 move move 10 and move -10 向前或向后移动字节 read read x1 2 读取2个字节到变量x1、变量不存在会自动创建 write write xx 写入xx save save 保存 exit exit 中断脚本关闭winhex assign assign xx 声明变量xx注:xx不能为脚本关键字 blokc block1 block2 and block x2 x3 选块或选块变量的地址 copy copy 复制 copyintonewfile copyintonowfile +保存路径和属性 复制到新的文件并指定路径属性存放 find find +条件+ [关键字down up word blockonly等] 可按要求查找指定的条件 iffound iffound 如果发现则执行下面的命令 else else 否则之下后面的语句 endif endif 和iffound组合语句有iffound必须有endif ifequal ifequal xx xx 比较两个数值、变量、16进制如果相同则只之下下面的语句反之不执行 ifgreater ifgreater xx xx 当一个参数大于第二个参数执行下面语句反之不执行 label label xx 建立一个xx标签 jumpto jumpto xx 跳转到xx标签处继续执行脚本 forallobjdo forallobjdo 在打开所有的文件或磁盘中运行脚本 getuserinput getuserinput xx "11111" 用户可输入ASCII或HEX到变量xx inc inc xx 变量xx每运行一次变量xx+1 messagebox messagebox "xx" 显示“xx”对话框 currentpos currentpos 表示当前文件或磁盘偏移地址 getsize getsize 表示大小 unlimited unlimited 无限 以上只是一部分的脚本关键字、更多查阅相关资料 注:winhex脚本中不区分大小写
第二章 winhex脚本编写
简单的脚本恢复NTFS分区DBR扇区 open :? //打开故障分区(自己选择) assign w1 getsize //声明w1的值为最大 (也就当前打开分区的总字节) goto (w1-512) //跳转到总字节数-512字节的位置(NTFS 的备份DBR位置最后一个扇区) //getsize为最大所以我们要-512字节才是DBR备份的开始位置 read w2 512 //读取512个字节到变量w2 把NTFS备份DBR读入到变量w2 goto 0x000 //跳转到开始位置 write w2 //写入变量w2(把刚才NTFS备份DBR的信息写入到0号扇区) save //保存
大家可以破坏一个NTFS分区的DBR 然后复制以上内容进去运行脚本看看是否有效 注意:不要在存有重要数据的分区内实验.
下面的脚本是某次监控录像恢复的简单脚本实例讲解: 此脚本编写的非常简单但是文件恢复的效果非常好 assign m1 1 //声明变量m1的值为1 goto 0xDB178F83 //跳转到DB178F83的偏移地址
{ find 0x7856341221436587 down //向下查找十六进制字符 7856341221436587 iffound //如果发现十六进制字符 7856341221436587 assign m2 currentpos //把当前光标地址记录到变量m2当中 move 1310719 //向前跳转 1310719字节 assign m3 currentpos //把当前的光标地址记录到变量m3中 block m2 m3 //选块 m2 m3 的区域 endif //结束if语句 inc m1 //脚本每运行一次m1的值+1 copyintonewfile "D:\11\a+m1+.dat" //复制选块到新的文件-并指定路径和文件属性 }[unlimited] //脚本的运行次数(无限) 以上脚本编写的很简单但比较使用、在以上脚本中你可以更改几个字符也可以提取其他格式的文件' 当脚本在提取文件时经常会提取出大量的垃圾文件也就是非需要提取的文件、此时我们可以根据文件 特征曾加一个判断条件例如: 文件的某一个位置是特定字符、可以用 ifequal 来进行对比是否符合条件、 如果不符合那就跳过继续执行脚本 脚本举例: 假设文件头为11111111 在文件的第2个扇区的开始位置固定为112233 此时我们就可以加一个条件去更准确的判断 assign n1 112233 //声明变量n1的值为112233 find 0x11111111 down //向下查找11111111文件头 (假设) iffound //如果发下11111111 assign n3 currentpos //把当前光标地址记录到变量n3中 move 512 //向前跳转512字节(注:假设2号扇区的前3个字节固定为112233) read n4 3 //读取3个字节记录到变量n4 ifequal n1 n4 //对比一下n1和 n4是否相同、如果是在执行下面的语句否则不执行
winhex的脚本远远不止这些大家可以仔细的去研究和实验、可以编写去更好的脚本 记得在恢复一次婚礼录像是MOV视频被删除、但未写入数据,软件恢复后97%以上无法播放 在那次恢复过程中脚本用了 3个 copyintonewfile 一次提取3个文件 然后手工再把重组3个文件合成一个mov视频、数据才得以恢复 之前已为copyintonewfile脚本只可以使用一次、但是经常尝试居然可以使用多次、所以好的脚本是调试出来的、当写好一个脚本后 可以进行几次实验只要满意在运行恢复数据。 |