[原创] 带你进入winhex脚本的编写

  [复制链接]

该用户从未签到

87

主题

402

回帖

6388

积分

[INTOHARD]团长

Rank: 8Rank: 8

积分
6388
QQ
发表于 2012-2-26 16:30:51 | 显示全部楼层 |阅读模式
                     第一章 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 此时我们就可以加一个条件去更准确的判断
也可以指定偏移位置搜索如:512=0等

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脚本只可以使用一次、但是经常尝试居然可以使用多次、所以好的脚本是调试出来的、当写好一个脚本后

可以进行几次实验只要满意在运行恢复数据.



winhex的脚本虽然强大也有一定的局限性、但是针对数据恢复而言非常实用、

如果你去学习强大的编程语言如C++、delphi等那可能需要几个月甚至几年才可以编写软件、而winhex 的脚本可以在短短几分钟内完成

所以相对与编程而言 winhex 的脚本更加实用、虽然有一定的局限性.



以上资料为自己学习和实际操作经验所积累、可能有不对或繁琐的地方仅供参考.


                                                                                                           子扬: 409625590
  • TA的每日心情

    2014-3-3 09:34
  • 签到天数: 601 天

    [LV.9]二品侍郎

    30

    主题

    1744

    回帖

    8837

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    8837
    QQ
    发表于 2012-2-26 16:45:27 | 显示全部楼层
    打个包传上来撒
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    105

    主题

    367

    回帖

    2610

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    2610
    QQ
    发表于 2012-2-26 16:52:30 | 显示全部楼层
    支持子杨!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-4-18 22:10
  • 签到天数: 1339 天

    [LV.10]一品大学士

    44

    主题

    2380

    回帖

    9955

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    9955
    发表于 2012-2-26 17:53:19 | 显示全部楼层
    支持下!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-10-29 09:53
  • 签到天数: 226 天

    [LV.7]四品道员

    93

    主题

    1312

    回帖

    2万

    积分

    Intohard Team

    Rank: 7Rank: 7Rank: 7

    积分
    22407
    QQ
    发表于 2012-2-26 17:55:48 | 显示全部楼层
    支持下!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-2-11 15:09
  • 签到天数: 122 天

    [LV.7]四品道员

    16

    主题

    892

    回帖

    995

    积分

    [INTOHARD]连长

    Rank: 4

    积分
    995
    发表于 2012-2-26 18:06:48 | 显示全部楼层
    支持一下 学习学习
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-1 07:19
  • 签到天数: 15 天

    [LV.4]七品知县

    2

    主题

    954

    回帖

    1万

    积分

    [INTOHARD]团长

    Rank: 8Rank: 8

    积分
    14100
    发表于 2012-2-26 22:01:20 | 显示全部楼层
    学习学习[s:17]
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-2-11 20:18
  • 签到天数: 136 天

    [LV.7]四品道员

    14

    主题

    707

    回帖

    1328

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    1328
    发表于 2012-2-26 22:07:58 | 显示全部楼层
    谢谢分享!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-3-22 13:24
  • 签到天数: 288 天

    [LV.8]三品御史

    2

    主题

    551

    回帖

    2231

    积分

    [INTOHARD]营长

    Rank: 6Rank: 6

    积分
    2231
    发表于 2012-2-26 22:54:20 | 显示全部楼层
    谢谢分享。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-4-9 05:44
  • 签到天数: 1 天

    [LV.1]布衣百姓

    6

    主题

    425

    回帖

    4726

    积分

    [INTOHARD]团长

    566636656353.3655.05345.055999

    Rank: 8Rank: 8

    积分
    4726
    发表于 2012-2-27 06:23:47 | 显示全部楼层
    支持楼主,谢谢
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表