各位大侠,我手上有一个程序在运行的时候会读取一个加过密的flash文件,解密后在内存中创建了解密后的该文件以供自身使用,我用monitor 查看到了改程序在内存中调用CreateFile在需要加密文件夹同路径的文件夹中创建了解密后的文件,一开始误以为是在磁盘中创建了该文件,高兴地去读发现根本没有这个文件,后来查询CreateFile函数才知道,是在内核中创建了该对象;我想要读取该解密后的文件,请问应该怎么进行,各位大侠提供个方法,不胜感激。   注释: CreateFile的涵义是创建File这个内核对象,而不是创建物理磁盘上的“文件”。在Win32 API中有一系列操作内核对象的函数,创建内核对象的函数大多命名为CreateXxxx型。

解决方案 »

  1.   

    大侠我来了!
    ReadProcessMemory
      

  2.   

    调CreateFile前你篡改几个参数,不就变成往磁盘上创建文件了吗?
      

  3.   

    用调试器断下CreateFile这个API,看下文件路径是怎么样的
      

  4.   

    hook CreateFile函数  修改参数创建你想要的磁盘文件
      

  5.   

    flash文件  swf? flv? 文件头 内存块搜索下。。也许就找到了
      

  6.   


    大侠,这个函数能读取别的进程的资源文件么?
    除非别的进程的资源文件的内容不加载到内存。已经hook了 createfile,自己写了一个程序验证了,如果是创建了文件,用自己写的hook程序能够拷贝这个文件出来;但是在目标程序上我看到了类似这样的事件如图,但是在createfile的路径上始终是看不到磁盘上的文件的,于是写了个hook注入了目标进程,去拷贝这个路径上的文件,也是没有啥东西呗拷贝出来,各位大侠看看这是个什么操作??疏漏在哪里
      

  7.   

    CreateFile的涵义是创建File这个内核对象,有了 File 还要 hook WriteFile(解密),得到 File info,再 跨进程 ReadFile
      

  8.   

    我也奇怪从头到尾没有监控到writefile操作,我目前在createfile操作下hook估计是还没有等待文件被写入内容就开始复制了,所以没得到
      

  9.   

    还要带 ex 的 WriteFileEx
      

  10.   

    应该是它在CreateFile时设置了FILE_ATTRIBUTE_TEMPORARY,然后再CreateFileMapping,写文件是写的内存映射文件。
      

  11.   

    有什么思路可以获取这个文件,我用process monitor 就没看到有写文件相关的操作
      

  12.   

    在它“播放”时按“文件头标记”搜索进程内存,
    然后用ReadProcessMemory( )读取那一片内存区的数据。
    数据的总长度,应该是在“文件头”部分,有相应的信息的。
    (按具体“文件格式”的不同,也许可以直接获取大小、也许要通过计算)
      

  13.   

    自己读取这个加过密的flash文件,解密 可行否 ?
      

  14.   

    简单想法 DLL劫持加载进入EXE, inlinehook createfile 自写函数 1执行写磁盘文件 2。调用原程序创建内存文件 再跳转回来,找对HOOK点
      

  15.   

    原exe中调用createfile应该是ff15 XXXX XXXX (地址1)
    修改为 E9 XXXX XXXX(HOOK函数地址)函数内部 FF15 (修改过的createfile到磁盘)
                  FF15(原createfile内存映射)
                  e9 (地址1)
      

  16.   

    哦,linux没HOOK过,不知道,思路一样,不过实现的话帮不上你