ChinaUnix首页 > 精华文章 > 安全技术 > 正文

[精华] 一个获取flv文件的另类方法


http://www.chinaunix.net 作者:t920  发表于:2008-09-16 15:10:00
发表评论】 【查看原文】 【安全技术讨论区】【关闭

一个获取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




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=987809
转载请注明作者名及原文出处