无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3480|回复: 6
打印 上一主题 下一主题

[求助] ...............

[复制链接]
跳转到指定楼层
1#
发表于 2014-4-24 22:56:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
7#
 楼主| 发表于 2014-4-25 15:03:20 | 只看该作者
sratlf 发表于 2014-4-25 14:52
或者你可以尝试用下面这段命令  比c大写的通用些  但是执行时间比c大的长

留个记号先
回复

使用道具 举报

6#
发表于 2014-4-25 14:52:37 | 只看该作者
本帖最后由 sratlf 于 2014-4-25 14:59 编辑
527104427 发表于 2014-4-25 13:44
果然是这样,测试成功了,多谢S大


或者你可以尝试用下面这段命令  比c大写的通用些  但是执行时间比c大的长

  1. map --mem ()/windows/system32/version.dll (rd) || map --mem ()/winnt/system32/version.dll (rd)
  2. cat --locate=\x50\0\x72\0\x6F\0\x64\0\x75\0\x63\0\x74\0\x56 --number=1 (rd)+1 || echo error && exit 1
  3. calc *0x82d0=*0x82d0+%?%+30
  4. calc *0x82d8=0x40
  5. call Fn.67 *0x82d0 0x60000 3
复制代码


\x50\0\x72\0\x6F\0\x64\0\x75\0\x63\0\x74\0\x56 是 (P r o d u c t V)  本来想搜索ProductVersion的  但是超出cat命令的限制了

点评

留个记号先  详情 回复 发表于 2014-4-25 15:03
回复

使用道具 举报

5#
 楼主| 发表于 2014-4-25 13:44:39 | 只看该作者
sratlf 发表于 2014-4-25 13:40
对8.1失效的原因是version.dll文件变大了,之前的dll保留最后2kb即可找到版本号,8.1的dll需要保留最后10 ...

果然是这样,测试成功了,多谢S大

点评

或者你可以尝试用下面这段命令 比c大写的通用些 但是执行时间比c大的长 \x50\0\x72\0\x6F\0\x64\0\x75\0\x63\0\x74\0\x56 是 (P r o d u c t V) 本来想搜索ProductVersion的 但是超出cat命令的限制了  详情 回复 发表于 2014-4-25 14:52
回复

使用道具 举报

4#
发表于 2014-4-25 13:40:38 | 只看该作者
527104427 发表于 2014-4-25 09:06
此段代码会在 (md)0x300+1 处得到 WINDOWS 的版本号,但本人知识有限,看不出其中的奥妙。

希望C大、P大 ...

对8.1失效的原因是version.dll文件变大了,之前的dll保留最后2kb即可找到版本号,8.1的dll需要保留最后10kb才能找到版本号

点评

果然是这样,测试成功了,多谢S大  详情 回复 发表于 2014-4-25 13:44

评分

参与人数 1无忧币 +5 收起 理由
527104427 + 5 赞一个!

查看全部评分

回复

使用道具 举报

3#
发表于 2014-4-25 13:35:18 | 只看该作者
本帖最后由 sratlf 于 2014-4-25 13:36 编辑
map --mem ()/windows/system32/version.dll (rd) || map --mem ()/winnt/system32/version.dll (rd)
calc *0x82d0=*0x82d0+*0x82d8-0x800
::0x82d0 rd 设备物理基地址
::0x82d8 rd 设备大小(以字节数表示)
::0x800  2kb大小,即重新设置rd起始地址为最后两KB大小前的位置
calc *0x82d8=0x800
::重新设置rd大小为2K,配合上面一行命令
cat --locate=\0\0\x44\0\0\0 --number=1 (rd)+1 | set skip=
::这个结果为版本号结尾位置
set /a skip=0x%skip%-0x30
::向前回退0x30长度,确定版本号所在范围
::以win7sp1的version.dll为例,此位置开始向后0x30长度内容为(V e r s i o n   6 . 1 . 7 6 0 0 . 1 6 3 8 5     D)
cat --locate=\0\0\0 --skip=%skip% --number=1 (rd)+1 | set skip=
::定位版本号具体位置
::以win7sp1的version.dll为例,此位置开始内容为(   6 . 1 . 7 6 0 0 . 1 6 3 8 5     D...)注:开头含3个\x0
calc *0x82d0=*0x82d0+0x%skip%+3
::重新设置rd起始地址为版本号开始位置。注:加3是为了跳过刚刚得到的地址后面的3个\x0,即此时rd开始内容为(6 . 1 . 7 6 0 0 . 1 6 3 8 5     D...)
call Fn.67 *0x82d0 0x60000 3
::Fn.67 unicode_to_utf8,目的是将结果转换为utf8字符,具体用法不知道。
::猜测是将rd内的内容转为utf8字符,取前三位放置在内存0x60000处,配合下面命令 "cat (md)0x300+1,3 | goto :_" 获取版本号对应的系统名称

评分

参与人数 1无忧币 +5 收起 理由
527104427 + 5 赞一个!

查看全部评分

回复

使用道具 举报

2#
 楼主| 发表于 2014-4-25 09:06:59 | 只看该作者
此段代码会在 (md)0x300+1 处得到 WINDOWS 的版本号,但本人知识有限,看不出其中的奥妙。

希望C大、P大、S大等众高手修正一下,能加以说明最好。方便大家使用和学习。

此菜单位 于  NTBOOT/NTBOOT.LST/DETECT.LST

点评

对8.1失效的原因是version.dll文件变大了,之前的dll保留最后2kb即可找到版本号,8.1的dll需要保留最后10kb才能找到版本号  详情 回复 发表于 2014-4-25 13:40
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-12 19:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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