一个获取flv文件的另类方法
某日在坛子上闲逛,发现一petzl的短片[Ref3],拍的相当精彩,就想把它搞下来慢慢的回味下。
首先搜了下临时文件夹,local settings\temp,果然新产生了一个硕大的tmp文件。(关闭浏览器后该临时文件随即会被删除)
可惜,拷贝的时候可爱的windows告诉俺“无法复制fla3:共享冲突,源文件或目标文件可能正在使用。”
还是google下吧,结果伟大的google告诉俺,用个***嗅探软件或***flv下载软件来搞定flv,用现成的软件可是件很无聊的事儿,
没有困难,创造困难也要上!所以问题回到了最开始,既然俺要的flv文件已经在俺的硬盘上了,无非就是怎么把它拷贝出来的问题。
虽然一般来说我们都是以administrator来登录系统,但administrator也就是个权限有点高的user而已,遇到本例中的复制fla3.tmp的问题
也是无能为力,因为在用户这一级别上,我们是不能直接操作文件的,而是必须通过它的句柄,一个打开的文件的访问权限就保存在描述句柄的
结构体里,而我们要做的就是修改这个访问权限,HANDLE_TABLE_ENTRY结构体中的GrantedAccess域。
但修改这个GrantedAccess域也不是啥简单的事儿,因为windows并没有提供给我们修改句柄访问权限的API,这就需要我们自己手动编写驱动程序来完成。
(如果你有办法进入ring0,hohoho也是可以滴~,如何编写驱动程序这部分可以看[Ref1])
把reader.sys复制到%systemroot%\system32\drivers\下面 [Ref2]
导入注册表
[table=95%][tr][td][font=FixedSys][HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\reader]
"ErrorControl"=dword:00000000
"ImagePath"=hex(2):5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,72,\
00,69,00,76,00,65,00,72,00,73,00,5c,00,72,00,65,00,61,00,64,00,65,00,72,00,\
2e,00,73,00,79,00,73,00,00,00
"Start"=dword:00000001
"Tag"=dword:00000001
"Type"=dword:00000001
[/font][/td][/tr][/table]
重启后,驱动程序就加载完毕了。
最后就是写个拷贝文件的小程序,代码如下:
flvcopy.c:
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]windows[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#FF00FF]"hchange.h"[/color]
BOOLEAN SetHandleAccess[color=#0000CC]([/color]
HANDLE Handle[color=#0000CC],[/color]
ACCESS_MASK GrantedAccess
[color=#0000CC])[/color]
[color=#0000CC]{[/color]
HANDLE hDriver[color=#0000CC];[/color]
ULONG Bytes[color=#0000CC];[/color]
ULONG Buff[color=#0000CC][[/color]2[color=#0000CC]][/color][color=#0000CC];[/color]
BOOLEAN Result [color=#0000CC]=[/color] [color=#0000FF]FALSE[/color][color=#0000CC];[/color]
hDriver [color=#0000CC]=[/color] CreateFile[color=#0000CC]([/color][color=#FF00FF]"\\\\.\\haccess"[/color][color=#0000CC],[/color] GENERIC_READ[color=#0000CC],[/color] 0[color=#0000CC],[/color] [color=#FF0000]NULL[/color][color=#0000CC],[/color] OPEN_EXISTING[color=#0000CC],[/color] 0[color=#0000CC],[/color] 0[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color]hDriver [color=#0000CC]![/color][color=#0000CC]=[/color] INVALID_HANDLE_VALUE[color=#0000CC])[/color]
[color=#0000CC]{[/color]
Buff[color=#0000CC][[/color]0[color=#0000CC]][/color] [color=#0000CC]=[/color] [color=#0000CC]([/color]ULONG[color=#0000CC])[/color]Handle[color=#0000CC];[/color]
Buff[color=#0000CC][[/color]1[color=#0000CC]][/color] [color=#0000CC]=[/color] GrantedAccess[color=#0000CC];[/color]
Result [color=#0000CC]=[/color] DeviceIoControl[color=#0000CC]([/color]hDriver[color=#0000CC],[/color] IOCTL1[color=#0000CC],[/color] Buff[color=#0000CC],[/color] [color=#0000FF]sizeof[/color][color=#0000CC]([/color]Buff[color=#0000CC])[/color][color=#0000CC],[/color] [color=#FF0000]NULL[/color][color=#0000CC],[/color] 0[color=#0000CC],[/color] [color=#0000CC]&[/color]Bytes[color=#0000CC],[/color] [color=#FF0000]NULL[/color][color=#0000CC])[/color][color=#0000CC];[/color]
CloseHandle[color=#0000CC]([/color]hDriver[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000FF]return[/color] Result[color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000FF]void[/color] main[color=#0000CC]([/color][color=#0000CC])[/color]
[color=#0000CC]{[/color]
HANDLE hFile[color=#0000CC],[/color] hDest[color=#0000CC];[/color]
ULONG Size[color=#0000CC],[/color] Bytes[color=#0000CC];[/color]
PVOID Data[color=#0000CC];[/color]
[color=#0000FF]CHAR[/color] Name[color=#0000CC][[/color]MAX_PATH[color=#0000CC]][/color][color=#0000CC];[/color]
lstrcpy[color=#0000CC]([/color]Name[color=#0000CC],[/color] [color=#FF00FF]"C:\\Documents and Settings\\Administrator\\Local Settings\\Temp\\fla3.tmp"[/color][color=#0000CC])[/color][color=#0000CC];[/color]
hFile [color=#0000CC]=[/color] CreateFile[color=#0000CC]([/color]Name[color=#0000CC],[/color] FILE_READ_ATTRIBUTES[color=#0000CC],[/color] FILE_SHARE_READ [color=#0000CC]|[/color] FILE_SHARE_WRITE [color=#0000CC]|[/color] FILE_SHARE_DELETE[color=#0000CC],[/color]
[color=#FF0000]NULL[/color][color=#0000CC],[/color] OPEN_EXISTING[color=#0000CC],[/color] 0[color=#0000CC],[/color] 0[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color]hFile [color=#0000CC]![/color][color=#0000CC]=[/color] INVALID_HANDLE_VALUE[color=#0000CC])[/color]
[color=#0000CC]{[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color]SetHandleAccess[color=#0000CC]([/color]hFile[color=#0000CC],[/color] AC_GENERIC_READ[color=#0000CC])[/color][color=#0000CC])[/color]
[color=#0000CC]{[/color]
Size [color=#0000CC]=[/color] GetFileSize[color=#0000CC]([/color]hFile[color=#0000CC],[/color] [color=#FF0000]NULL[/color][color=#0000CC])[/color][color=#0000CC];[/color]
Data [color=#0000CC]=[/color] VirtualAlloc[color=#0000CC]([/color][color=#FF0000]NULL[/color][color=#0000CC],[/color] Size[color=#0000CC],[/color] MEM_COMMIT [color=#0000CC]|[/color] MEM_RESERVE[color=#0000CC],[/color] PAGE_READWRITE[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color]Data[color=#0000CC])[/color]
[color=#0000CC]{[/color]
ReadFile[color=#0000CC]([/color]hFile[color=#0000CC],[/color] Data[color=#0000CC],[/color] Size[color=#0000CC],[/color] [color=#0000CC]&[/color]Bytes[color=#0000CC],[/color] [color=#FF0000]NULL[/color][color=#0000CC])[/color][color=#0000CC];[/color]
hDest [color=#0000CC]=[/color] CreateFile[color=#0000CC]([/color][color=#FF00FF]"e:\\fla3.tmp"[/color][color=#0000CC],[/color] GENERIC_WRITE[color=#0000CC],[/color] 0[color=#0000CC],[/color] [color=#FF0000]NULL[/color][color=#0000CC],[/color] CREATE_NEW[color=#0000CC],[/color] 0[color=#0000CC],[/color] 0[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]if[/color] [color=#0000CC]([/color]hDest [color=#0000CC]![/color][color=#0000CC]=[/color] INVALID_HANDLE_VALUE[color=#0000CC])[/color]
[color=#0000CC]{[/color]
WriteFile[color=#0000CC]([/color]hDest[color=#0000CC],[/color] Data[color=#0000CC],[/color] Size[color=#0000CC],[/color] [color=#0000CC]&[/color]Bytes[color=#0000CC],[/color] [color=#FF0000]NULL[/color][color=#0000CC])[/color][color=#0000CC];[/color]
CloseHandle[color=#0000CC]([/color]hDest[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
VirtualFree[color=#0000CC]([/color]Data[color=#0000CC],[/color] 0[color=#0000CC],[/color] MEM_RELEASE[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000CC]}[/color]
CloseHandle[color=#0000CC]([/color]hFile[color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color]
[color=#0000CC]}[/color][/color][/font][/td][/tr][/table]
hchange.h
[table=95%][tr][td][font=FixedSys][color=#000000][color=#0000CC]#[/color][color=#FF0000]include[/color] [color=#0000CC]<[/color]winioctl[color=#0000CC].[/color]h[color=#0000CC]>[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] BASE_IOCTL [color=#0000CC]([/color]FILE_DEVICE_UNKNOWN [color=#0000CC]<[/color][color=#0000CC]<[/color] 16[color=#0000CC])[/color] [color=#0000CC]|[/color] [color=#0000CC]([/color]FILE_READ_ACCESS [color=#0000CC]<[/color][color=#0000CC]<[/color] 14[color=#0000CC])[/color] [color=#0000CC]|[/color] METHOD_BUFFERED
[color=#0000CC]#[/color][color=#FF0000]define[/color] IOCTL1 BASE_IOCTL [color=#0000CC]|[/color] [color=#0000CC]([/color]1 [color=#0000CC]<[/color][color=#0000CC]<[/color] 2[color=#0000CC])[/color]
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_GENERIC_READ 0x120089
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_GENERIC_WRITE 0x120196
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_DELETE 0x110080
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_READ_CONTROL 0x120080
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_WRITE_DAC 0x140080
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_WRITE_OWNER 0x180080
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_GENERIC_ALL 0x1f01ff
[color=#0000CC]#[/color][color=#FF0000]define[/color] AC_STANDARD_RIGHTS_ALL 0x1f0080[/color][/font][/td][/tr][/table]
成功的编译运行后,fla3.tmp就已经在e盘的根目录里了,把后缀改为.flv,用flvplayer就可以播放了。:em10:
Ref1:http://greatdong.blog.edu.cn 《被占用文件操作三法》
Ref2:http://wasm.ru/pub/21/files/lockfileswork/samcopy.rar reader.sys
Ref3:http://you.video.sina.com.cn/b/vblog_player.swf?vid=714666 petzl的宣传片
author : [email]t920@sohu.com[/email]
date:20070907
[ 本帖最后由 t920 于 2007-9-7 15:19 编辑 ]
思想境界 回复于:2007-09-10 06:14:42
真是好方法啊.
xtttm 回复于:2007-09-10 06:36:17
这么麻烦,一般都是sniffer后直接下载,简单多了
lhc1984 回复于:2007-09-11 01:47:30
楼主太有才了~~,

swest 回复于:2007-09-15 22:17:58
终于看到了传说中的用牛刀杀鸡。。。
lky 回复于:2007-09-20 12:40:41
还是直接按reset 键快
东方木 回复于:2007-09-21 16:16:35
我有更简单的,有没有人要看?
t920 回复于:2007-09-21 16:49:08
reset恐怕不行,呵呵,可以试一下
方法当然越多越好,使劲帖吧~俺想看
牛刀的问题,嗯,在没有用牛刀杀过鸡之前也不是很确定就一定可以:wink:
东方木 回复于:2007-09-22 15:01:44
仔细回忆了下,不是很简单。
但若不是常下载flv,感觉还是可以接受的
方法在 http://bbs.chinaunix.net/thread-994688-1-1.html
希望砖头不要太多:em14:
samily 回复于:2007-10-04 11:07:10
最直接的方法,用unlocker ,直接COPY出来的。
hongmuniao 回复于:2007-10-26 14:24:48
[size=6]俺不会那么复杂的东西,
就是会用一个叫“闪播下载器”的软件,
下载基本上都是没问题的,[/size]
linux622 回复于:2007-10-30 10:02:21
楼主果然牛气!!
qu0423 回复于:2007-11-02 14:59:25
看着费劲~~~~~~~~~~~~~~~~:em03: :em03: :em03: :em03: :em03:
lfang 回复于:2007-11-03 18:32:37
其实迅雷可以自动探测flv文件的连接,可以直接下载的。
no_wonder 回复于:2007-11-27 09:09:00
sudo cp /tmp/Flash* ~/Video/
versalar 回复于:2007-12-03 07:15:09
ff有个插件叫downloadhelper,专干这个。
mslk 回复于:2007-12-26 17:34:48
unlocker很好
唯三色彩 回复于:2007-12-29 12:16:22
楼主思想就是不一样,同一样事情可以想到不同的办法,很有创意。
收藏了。
henryfour 回复于:2008-01-06 13:39:23
引用:原帖由 t920 于 2007-9-7 15:17 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7320895&ptid=987809]
一个获取flv文件的另类方法
某日在坛子上闲逛,发现一petzl的短片[Ref3],拍的相当精彩,就想把它搞下来慢慢的回味下。
首先搜了下临时文件夹,local settings\temp,果然新产生了一个硕大的tmp文件。 ...
赞楼主
aquino 回复于:2008-01-07 14:23:16
我都是用这个
http://www.downflv.com/
痛苦1234 回复于:2008-01-09 18:50:29
学习中>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>以后要多发啊!!!我真的很长见识!!!!
痛苦1234 回复于:2008-01-10 10:13:42
:mrgreen:
yuanyuan025 回复于:2008-06-24 00:43:52
直接用那种探测器就好了
ylping 回复于:2008-08-01 05:13:11
啊,强人啊,,这么牛B的方法。..第一次见,不太适合我这种小菜鸟了....
lvziwei 回复于:2008-08-01 09:11:20
lz果然是lz,太强了,汗:(
怯怯的问下,会自己做电脑吗?
gigabyte 回复于:2008-08-01 09:50:35
关键是怎么播放,我下了很多player都不行
hbfnjx 回复于:2008-08-03 03:00:28
lz很强大。。
gthboy 回复于:2008-08-03 10:57:01
真够折腾的,有那功夫,用别的方法搞定了
ljily000 回复于:2008-08-08 21:42:31
楼主,真牛!
:em03:
icefirehill 回复于:2008-08-09 03:28:04
强人饿 收藏收藏
hypol 回复于:2008-09-12 14:05:16
1、获取HTML页面中包含的任何文件,最方便的方法就是用一个叫 HttpWatch Pro 的软件,对于FLV,只要等它开始播放,用这个软件就可以看到FLV的下载路径了!其实对于任何文件,它都可以轻松得到其真实地址。
2、对于在%temp%里面的临时FLV文件,即使关闭浏览器后被删除了也不要紧,可以用 WinHEX 软件轻松地将被删除的文件恢复出来,非常简单方便。
颠颠倒倒 回复于:2008-09-13 23:11:15
搜了下临时文件夹,local settings\temp,果然新产生了一个硕大的tmp文件。(关闭浏览器后该临时文件随即会被删除)
颠颠倒倒 回复于:2008-09-13 23:11:58
搜了下临时文件夹,local settings\temp,果然新产生了一个硕大的tmp文件。(关闭浏览器后该临时文件随即会被删除)
搜了下临时文件夹,local settings\temp,果然新产生了一个硕大的tmp文件。(关闭浏览器后该临时文件随即会被删除)
junrenwxd 回复于:2008-09-16 15:10:00
看不明白是什么东ix
|