|
本帖最后由 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 :_" 获取版本号对应的系统名称
|
评分
-
查看全部评分
|