Nazar-Okruzhko/Black-Ripper-1.7.1
GitHub: Nazar-Okruzhko/Black-Ripper-1.7.1
Black Ripper 是 NinjaRipper 1.7.1 的开源复刻,用于在运行时从 DirectX 游戏进程中提取 3D 模型与纹理资产。
Stars: 0 | Forks: 0
# Project NinjaRipper: Reborn - Black Ripper 1.7.1
# W.I.P. 项目 => 项目正在进行大量深入挖掘中....
### 原版 NinjaRipper 1.7.1 源码文件夹:
### 原版 NinjaRipper 1.7.1 结构:
```
└── NinjaRipperSrc_x64/
├── common/
│ ├── constants.cpp
│ ├── constants.h
│ ├── crashdump.cpp
│ ├── crashdump.h
│ ├── kinject.cpp
│ ├── kinject.h
│ ├── ksettings.cpp
│ ├── ksettings.h
│ ├── pathtools.cpp
│ ├── pathtools.h
│ ├── registry.cpp
│ ├── registry.h
│ └── tinylogger.h
├── injector/
│ ├── aboutdlg.cpp
│ ├── aboutdlg.h
│ ├── dxrip_.ico
│ ├── Hyperlinks.cpp
│ ├── Hyperlinks.h
│ ├── Hyperlinks__.cpp
│ ├── injector.cpp
│ ├── injector.h
│ ├── injector.rc
│ ├── injector.sln
│ ├── injector.suo
│ ├── injector.v12.suo
│ ├── injector.vcproj
│ ├── injector.vcxproj
│ ├── injector.vcxproj.filters
│ ├── injector.vcxproj.user
│ ├── Main.ico
│ ├── paypal.bmp
│ ├── paypal10.bmp
│ ├── paypal5.bmp
│ ├── RCa20616
│ ├── resource.h
│ ├── settingsdlg.cpp
│ ├── stdafx.h
│ ├── UpgradeLog.htm
│ └── UpgradeLog.XML
├── intruder/
│ ├── intruder.aps
│ ├── intruder.cpp
│ ├── intruder.def
│ ├── intruder.h
│ ├── intruder.log
│ ├── intruder.rc
│ ├── intruder.sln
│ ├── intruder.suo
│ ├── intruder.v12.suo
│ ├── intruder.vcproj
│ ├── intruder.vcxproj
│ ├── intruder.vcxproj.filters
│ ├── intruder.vcxproj.user
│ ├── intruder1.aps
│ ├── intruder1.rc
│ ├── intruder1.res
│ ├── process.cpp
│ ├── process.h
│ ├── ReadMe.txt
│ ├── resource.h
│ ├── resource1.h
│ ├── MinHook/
│ │ ├── .editorconfig
│ │ ├── AUTHORS.txt
│ │ ├── LICENSE.txt
│ │ ├── src/
│ │ │ ├── buffer.c
│ │ │ ├── buffer.h
│ │ │ ├── hook.c
│ │ │ ├── trampoline.c
│ │ │ ├── trampoline.h
│ │ │ └── HDE/
│ │ │ ├── hde32.c
│ │ │ ├── hde32.h
│ │ │ ├── hde64.c
│ │ │ ├── hde64.h
│ │ │ ├── pstdint.h
│ │ │ ├── table32.h
│ │ │ └── table64.h
│ │ ├── include/
│ │ │ └── MinHook.h
│ │ ├── dll_resources/
│ │ │ ├── MinHook.def
│ │ │ └── MinHook.rc
│ │ └── build/
│ │ ├── VC9/
│ │ │ ├── libMinHook.vcproj
│ │ │ ├── MinHook.vcproj
│ │ │ └── MinHookVC9.sln
│ │ ├── VC12/
│ │ │ ├── libMinHook.vcxproj
│ │ │ ├── libMinHook.vcxproj.filters
│ │ │ ├── MinHook.vcxproj
│ │ │ ├── MinHookVC12.sln
│ │ │ ├── MinHookVC12.v12.suo
│ │ │ ├── lib/
│ │ │ │ ├── Release/
│ │ │ │ │ ├── libMinHook.x64.lib
│ │ │ │ │ └── libMinHook.x86.lib
│ │ │ │ └── Debug/
│ │ │ │ ├── libMinHook.x64.lib
│ │ │ │ └── libMinHook.x86.lib
│ │ │ └── bin/
│ │ │ ├── Release/
│ │ │ │ ├── MinHook.x64.dll
│ │ │ │ ├── MinHook.x64.exp
│ │ │ │ ├── MinHook.x64.lib
│ │ │ │ ├── MinHook.x86.dll
│ │ │ │ ├── MinHook.x86.exp
│ │ │ │ └── MinHook.x86.lib
│ │ │ └── Debug/
│ │ │ ├── MinHook.x64.dll
│ │ │ ├── MinHook.x64.exp
│ │ │ ├── MinHook.x64.ilk
│ │ │ ├── MinHook.x64.lib
│ │ │ ├── MinHook.x86.dll
│ │ │ ├── MinHook.x86.exp
│ │ │ ├── MinHook.x86.ilk
│ │ │ └── MinHook.x86.lib
│ │ ├── VC11/
│ │ │ ├── libMinHook.vcxproj
│ │ │ ├── libMinHook.vcxproj.filters
│ │ │ ├── MinHook.vcxproj
│ │ │ └── MinHookVC11.sln
│ │ └── VC10/
│ │ ├── libMinHook.vcxproj
│ │ ├── libMinHook.vcxproj.filters
│ │ ├── libMinHook.vcxproj.user
│ │ ├── MinHook.vcxproj
│ │ ├── MinHook.vcxproj.user
│ │ ├── MinHookVC10.sln
│ │ └── MinHookVC10.suo
│ ├── dxgi/
│ │ ├── dxgitypes.h
│ │ ├── enums.h
│ │ ├── kdxgi.cpp
│ │ ├── kdxgi.h
│ │ ├── macrodxgi.h
│ │ ├── predxgi.cpp
│ │ └── predxgi.h
│ ├── dx9/
│ │ ├── drawindexedprimitive9.cpp
│ │ ├── drawindexedprimitiveup9.cpp
│ │ ├── drawprimitive9.cpp
│ │ ├── drawprimitiveup9.cpp
│ │ ├── dump9.cpp
│ │ ├── dx9types.h
│ │ ├── enums.h
│ │ ├── kripper9.cpp
│ │ ├── kripper9.h
│ │ ├── macro.h
│ │ ├── pre9.cpp
│ │ ├── pre9.h
│ │ ├── savemeshtextures9.cpp
│ │ ├── saveshader9.cpp
│ │ ├── savetexture9.cpp
│ │ └── texture9.cpp
│ ├── dx8/
│ │ ├── drawindexedprimitive8.cpp
│ │ ├── drawindexedprimitiveup8.cpp
│ │ ├── drawprimitive8.cpp
│ │ ├── drawprimitiveup8.cpp
│ │ ├── dump8.cpp
│ │ ├── dx8types.h
│ │ ├── enums.h
│ │ ├── kripper8.cpp
│ │ ├── kripper8.h
│ │ ├── pre8.cpp
│ │ ├── pre8.h
│ │ ├── savemeshtextures8.cpp
│ │ ├── sm1_disasm.cpp
│ │ ├── sm1_disasm.h
│ │ ├── sm1_vertdecl.cpp
│ │ ├── sm1_vertdecl.h
│ │ └── texture8.cpp
│ ├── dx7/
│ │ ├── drawindexedprimitive7.cpp
│ │ ├── drawindexedprimitivestrided7.cpp
│ │ ├── drawindexedprimitivevb7.cpp
│ │ ├── drawprimitive7.cpp
│ │ ├── drawprimitivestrided7.cpp
│ │ ├── drawprimitivevb7.cpp
│ │ ├── dx7types.h
│ │ ├── enums.h
│ │ ├── kripper7.cpp
│ │ ├── kripper7.h
│ │ ├── macro.h
│ │ ├── pre7.cpp
│ │ ├── pre7.h
│ │ ├── savemeshtextures7.cpp
│ │ ├── savetexture7.cpp
│ │ └── texture7.cpp
│ ├── dx6/
│ │ ├── drawindexedprimitive6.cpp
│ │ ├── drawindexedprimitivestrided6.cpp
│ │ ├── drawindexedprimitivevb6.cpp
│ │ ├── drawprimitive6.cpp
│ │ ├── drawprimitivestrided6.cpp
│ │ ├── drawprimitivevb6.cpp
│ │ ├── dx6types.h
│ │ ├── enums.h
│ │ ├── kripper6.cpp
│ │ ├── kripper6.h
│ │ ├── macro.h
│ │ ├── pre6.cpp
│ │ ├── pre6.h
│ │ ├── savemeshtextures6.cpp
│ │ ├── savetexture6.cpp
│ │ └── texture6.cpp
│ ├── dx11/
│ │ ├── draw11.cpp
│ │ ├── drawauto11.cpp
│ │ ├── drawindexed11.cpp
│ │ ├── drawindexedinstanced11.cpp
│ │ ├── drawindexedinstancedindirect11.cpp
│ │ ├── drawinstanced11.cpp
│ │ ├── drawinstancedindirect11.cpp
│ │ ├── dump11.cpp
│ │ ├── dx11types.h
│ │ ├── enums.h
│ │ ├── guiddump.h
│ │ ├── kripper11.cpp
│ │ ├── kripper11.h
│ │ ├── macro.h
│ │ ├── pre11.cpp
│ │ ├── pre11.h
│ │ ├── savemeshtextures11.cpp
│ │ ├── savetexture11.cpp
│ │ └── texture11.cpp
│ ├── DirectXTex/
│ │ ├── .gitignore
│ │ ├── DirectXTex_Desktop_2012.sln
│ │ ├── DirectXTex_Desktop_2013.sln
│ │ ├── DirectXTex_Desktop_2013.v12.suo
│ │ ├── DirectXTex_Desktop_2015.sln
│ │ ├── DirectXTex_Windows10.sln
│ │ ├── DirectXTex_Windows81.sln
│ │ ├── DirectXTex_WindowsPhone81.sln
│ │ ├── DirectXTex_XboxOneADK.sln
│ │ ├── DirectXTex_XboxOneXDK.sln
│ │ ├── DirectXTex_XboxOneXDK_2015.sln
│ │ ├── MIT.txt
│ │ ├── ReadMe.txt
│ │ ├── WICTextureLoader/
│ │ │ ├── WICTextureLoader.cpp
│ │ │ └── WICTextureLoader.h
│ │ ├── Texconv/
│ │ │ ├── directx.ico
│ │ │ ├── texconv.cpp
│ │ │ ├── Texconv.rc
│ │ │ ├── Texconv_Desktop_2012.vcxproj
│ │ │ ├── Texconv_Desktop_2012.vcxproj.filters
│ │ │ ├── Texconv_Desktop_2013.vcxproj
│ │ │ ├── Texconv_Desktop_2013.vcxproj.filters
│ │ │ ├── Texconv_Desktop_2015.vcxproj
│ │ │ └── Texconv_Desktop_2015.vcxproj.filters
│ │ ├── Texassemble/
│ │ │ ├── directx.ico
│ │ │ ├── texassemble.cpp
│ │ │ ├── texassemble.rc
│ │ │ ├── Texassemble_Desktop_2012.vcxproj
│ │ │ ├── Texassemble_Desktop_2012.vcxproj.filters
│ │ │ ├── Texassemble_Desktop_2013.vcxproj
│ │ │ ├── Texassemble_Desktop_2013.vcxproj.filters
│ │ │ ├── Texassemble_Desktop_2015.vcxproj
│ │ │ └── Texassemble_Desktop_2015.vcxproj.filters
│ │ ├── ScreenGrab/
│ │ │ ├── ScreenGrab.cpp
│ │ │ └── ScreenGrab.h
│ │ ├── DirectXTex/
│ │ │ ├── BC.cpp
│ │ │ ├── BC.h
│ │ │ ├── BC4BC5.cpp
│ │ │ ├── BC6HBC7.cpp
│ │ │ ├── BCDirectCompute.cpp
│ │ │ ├── BCDirectCompute.h
│ │ │ ├── DDS.h
│ │ │ ├── DirectXTex.h
│ │ │ ├── DirectXTex.inl
│ │ │ ├── DirectXTexCompress.cpp
│ │ │ ├── DirectXTexCompressGPU.cpp
│ │ │ ├── DirectXTexConvert.cpp
│ │ │ ├── DirectXTexD3D11.cpp
│ │ │ ├── DirectXTexDDS.cpp
│ │ │ ├── DirectXTexFlipRotate.cpp
│ │ │ ├── DirectXTexImage.cpp
│ │ │ ├── DirectXTexMipmaps.cpp
│ │ │ ├── DirectXTexMisc.cpp
│ │ │ ├── DirectXTexNormalMaps.cpp
│ │ │ ├── DirectXTexP.h
│ │ │ ├── DirectXTexPMAlpha.cpp
│ │ │ ├── DirectXTexResize.cpp
│ │ │ ├── DirectXTexTGA.cpp
│ │ │ ├── DirectXTexUtil.cpp
│ │ │ ├── DirectXTexWIC.cpp
│ │ │ ├── DirectXTex_Desktop_2012.vcxproj
│ │ │ ├── DirectXTex_Desktop_2012.vcxproj.filters
│ │ │ ├── DirectXTex_Desktop_2013.sln
│ │ │ ├── DirectXTex_Desktop_2013.v12.suo
│ │ │ ├── DirectXTex_Desktop_2013.vcxproj
│ │ │ ├── DirectXTex_Desktop_2013.vcxproj.filters
│ │ │ ├── DirectXTex_Desktop_2013.vcxproj.user
│ │ │ ├── DirectXTex_Desktop_2015.v12.suo
│ │ │ ├── DirectXTex_Desktop_2015.vcxproj
│ │ │ ├── DirectXTex_Desktop_2015.vcxproj.filters
│ │ │ ├── DirectXTex_Windows10.vcxproj
│ │ │ ├── DirectXTex_Windows10.vcxproj.filters
│ │ │ ├── DirectXTex_Windows81.vcxproj
│ │ │ ├── DirectXTex_Windows81.vcxproj.filters
│ │ │ ├── DirectXTex_WindowsPhone81.vcxproj
│ │ │ ├── DirectXTex_WindowsPhone81.vcxproj.filters
│ │ │ ├── DirectXTex_XboxOneADK.vcxproj
│ │ │ ├── DirectXTex_XboxOneADK.vcxproj.filters
│ │ │ ├── DirectXTex_XboxOneXDK.vcxproj
│ │ │ ├── DirectXTex_XboxOneXDK.vcxproj.filters
│ │ │ ├── DirectXTex_XboxOneXDK_2015.vcxproj
│ │ │ ├── DirectXTex_XboxOneXDK_2015.vcxproj.filters
│ │ │ ├── Filters.h
│ │ │ ├── scoped.h
│ │ │ ├── Shaders/
│ │ │ │ ├── BC6HEncode.hlsl
│ │ │ │ ├── BC7Encode.hlsl
│ │ │ │ ├── CompileShaders.cmd
│ │ │ │ └── Compiled/
│ │ │ │ ├── BC6HEncode_EncodeBlockCS.inc
│ │ │ │ ├── BC6HEncode_TryModeG10CS.inc
│ │ │ │ ├── BC6HEncode_TryModeLE10CS.inc
│ │ │ │ ├── BC7Encode_EncodeBlockCS.inc
│ │ │ │ ├── BC7Encode_TryMode02CS.inc
│ │ │ │ ├── BC7Encode_TryMode137CS.inc
│ │ │ │ └── BC7Encode_TryMode456CS.inc
│ │ │ └── Bin/
│ │ │ └── Desktop_2013/
│ │ │ ├── x64/
│ │ │ │ ├── Release/
│ │ │ │ │ └── DirectXTex.lib
│ │ │ │ └── Debug/
│ │ │ │ └── DirectXTex.lib
│ │ │ └── Win32/
│ │ │ ├── Release/
│ │ │ │ └── DirectXTex.lib
│ │ │ └── Debug/
│ │ │ └── DirectXTex.lib
│ │ ├── DDSView/
│ │ │ ├── ddsview.cpp
│ │ │ ├── ddsview.fx
│ │ │ ├── DDSView.rc
│ │ │ ├── DDSView_Desktop_2012.vcxproj
│ │ │ ├── DDSView_Desktop_2012.vcxproj.filters
│ │ │ ├── DDSView_Desktop_2013.vcxproj
│ │ │ ├── DDSView_Desktop_2013.vcxproj.filters
│ │ │ ├── DDSView_Desktop_2015.vcxproj
│ │ │ ├── DDSView_Desktop_2015.vcxproj.filters
│ │ │ ├── directx.ico
│ │ │ ├── hlsl.cmd
│ │ │ └── shaders/
│ │ │ ├── ps1D.h
│ │ │ ├── ps1Darray.h
│ │ │ ├── ps2D.h
│ │ │ ├── ps2Darray.h
│ │ │ ├── ps3D.h
│ │ │ ├── psCube.h
│ │ │ └── vs.h
│ │ └── DDSTextureLoader/
│ │ ├── DDSTextureLoader.cpp
│ │ └── DDSTextureLoader.h
│ ├── ddraw/
│ │ ├── ddrawtypes.h
│ │ ├── enums.h
│ │ ├── kddraw.cpp
│ │ ├── kddraw.h
│ │ ├── macro.h
│ │ ├── preddraw.cpp
│ │ ├── preddraw.h
│ │ ├── surface.cpp
│ │ ├── surface.h
│ │ ├── surfacesave.cpp
│ │ ├── surfacesave.h
│ │ └── surface_ripper.cpp
│ └── common/
│ ├── commontypes.h
│ ├── d3dhelper.cpp
│ ├── d3dhelper.h
│ ├── dataconvert.cpp
│ ├── dataconvert.h
│ ├── datatypes.cpp
│ ├── datatypes.h
│ ├── fvf.cpp
│ ├── fvf.h
│ ├── guidtoname.cpp
│ ├── guidtoname.h
│ ├── indexprocess.cpp
│ ├── indexprocess.h
│ ├── iripper.h
│ ├── khook.cpp
│ ├── khook.h
│ ├── khookmgr.cpp
│ ├── khookmgr.h
│ ├── kintruder.cpp
│ ├── kintruder.h
│ ├── klog.h
│ ├── macro.h
│ ├── outtypes__.h
│ ├── ripout.cpp
│ ├── ripout.h
│ ├── shadercompile.cpp
│ ├── shadercompile.h
│ ├── tdxref.h
│ ├── tinitedval.h
│ ├── tools.cpp
│ ├── tools.h
│ ├── topology.cpp
│ ├── topology.h
│ ├── vertexprocess.cpp
│ ├── vertexprocess.h
│ ├── vert_indx_dump.cpp
│ └── vert_indx_dump.h
└── DXSDK/ [OPTIONAL]
├── DXSDK9/
│ ├── Include/
│ │ ├── comdecl.h
│ │ ├── d3d.h
│ │ ├── D3D10.h
│ │ ├── D3D10effect.h
│ │ ├── d3d10misc.h
│ │ ├── d3d10sdklayers.h
│ │ ├── D3D10shader.h
│ │ ├── d3d8.h
│ │ ├── d3d8caps.h
│ │ ├── d3d8types.h
│ │ ├── d3d9.h
│ │ ├── d3d9caps.h
│ │ ├── d3d9types.h
│ │ ├── d3dcaps.h
│ │ ├── d3drm.h
│ │ ├── d3drmdef.h
│ │ ├── d3drmobj.h
│ │ ├── d3drmwin.h
│ │ ├── d3dtypes.h
│ │ ├── d3dvec.inl
│ │ ├── D3DX10.h
│ │ ├── d3dx10async.h
│ │ ├── D3DX10core.h
│ │ ├── D3DX10math.h
│ │ ├── D3DX10math.inl
│ │ ├── D3DX10mesh.h
│ │ ├── D3DX10tex.h
│ │ ├── d3dx9.h
│ │ ├── d3dx9anim.h
│ │ ├── d3dx9core.h
│ │ ├── d3dx9effect.h
│ │ ├── d3dx9math.h
│ │ ├── d3dx9math.inl
│ │ ├── d3dx9mesh.h
│ │ ├── d3dx9shader.h
│ │ ├── d3dx9shape.h
│ │ ├── d3dx9tex.h
│ │ ├── d3dx9xof.h
│ │ ├── ddraw.h
│ │ ├── dinput.h
│ │ ├── dinputd.h
│ │ ├── dls1.h
│ │ ├── dls2.h
│ │ ├── dmdls.h
│ │ ├── dmerror.h
│ │ ├── dmksctrl.h
│ │ ├── dmplugin.h
│ │ ├── dmusbuff.h
│ │ ├── dmusicc.h
│ │ ├── dmusicf.h
│ │ ├── dmusici.h
│ │ ├── dmusics.h
│ │ ├── dpaddr.h
│ │ ├── dplay.h
│ │ ├── dplay8.h
│ │ ├── dplobby.h
│ │ ├── dplobby8.h
│ │ ├── dpnathlp.h
│ │ ├── dsconf.h
│ │ ├── dsetup.h
│ │ ├── dsound.h
│ │ ├── dvoice.h
│ │ ├── dvp.h
│ │ ├── dx7todx8.h
│ │ ├── dxdiag.h
│ │ ├── DxErr.h
│ │ ├── dxerr8.h
│ │ ├── dxerr9.h
│ │ ├── dxfile.h
│ │ ├── DXGI.h
│ │ ├── DXGIType.h
│ │ ├── dxsdkver.h
│ │ ├── dxtrans.h
│ │ ├── multimon.h
│ │ ├── PIXPlugin.h
│ │ ├── rmxfguid.h
│ │ ├── rmxftmpl.h
│ │ ├── strsafe.h
│ │ ├── X3DAudio.h
│ │ ├── xact.h
│ │ ├── xact2wb.h
│ │ ├── xact3d.h
│ │ └── XInput.h
│ └── Lib/
│ ├── x86/
│ │ ├── d3d10.lib
│ │ ├── d3d8.lib
│ │ ├── d3d9.lib
│ │ ├── d3dx10.lib
│ │ ├── d3dx10d.lib
│ │ ├── d3dx9.lib
│ │ ├── d3dx9d.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dinput8.lib
│ │ ├── dplayx.lib
│ │ ├── dsetup.lib
│ │ ├── dsound.lib
│ │ ├── DxErr.lib
│ │ ├── DxErr8.lib
│ │ ├── DxErr9.lib
│ │ ├── dxgi.lib
│ │ ├── dxguid.lib
│ │ ├── dxtrans.lib
│ │ ├── X3DAudio.lib
│ │ └── XInput.lib
│ └── x64/
│ ├── d3d10.lib
│ ├── d3d9.lib
│ ├── d3dx10.lib
│ ├── d3dx10d.lib
│ ├── d3dx9.lib
│ ├── d3dx9d.lib
│ ├── d3dxof.lib
│ ├── ddraw.lib
│ ├── dinput.lib
│ ├── dinput8.lib
│ ├── dplayx.lib
│ ├── dsound.lib
│ ├── DxErr.lib
│ ├── DxErr8.lib
│ ├── DxErr9.lib
│ ├── dxgi.lib
│ ├── dxguid.lib
│ ├── dxtrans.lib
│ ├── X3DAudio.lib
│ └── XInput.lib
├── DXSDK8/
│ ├── lib/
│ │ ├── amstrmid.lib
│ │ ├── d3d8.lib
│ │ ├── d3dx.lib
│ │ ├── d3dx8.lib
│ │ ├── d3dx8d.lib
│ │ ├── d3dx8dt.lib
│ │ ├── d3dxd.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dinput8.lib
│ │ ├── dmoguids.lib
│ │ ├── dplayx.lib
│ │ ├── dsetup.lib
│ │ ├── dsound.lib
│ │ ├── DxErr8.lib
│ │ ├── dxguid.lib
│ │ ├── dxtrans.lib
│ │ ├── ksproxy.lib
│ │ ├── ksuser.lib
│ │ ├── msdmo.lib
│ │ ├── quartz.lib
│ │ └── strmiids.lib
│ └── include/
│ ├── activecf.h
│ ├── amaudio.h
│ ├── amparse.h
│ ├── amstream.h
│ ├── amva.h
│ ├── Amvideo.h
│ ├── atsmedia.h
│ ├── audevcod.h
│ ├── austream.h
│ ├── aviriff.h
│ ├── basetsd.h
│ ├── bdaiface.h
│ ├── bdamedia.h
│ ├── Bdatif.h
│ ├── bdatypes.h
│ ├── comlite.h
│ ├── control.h
│ ├── d3d.h
│ ├── d3d8.h
│ ├── d3d8caps.h
│ ├── d3d8types.h
│ ├── d3dcaps.h
│ ├── d3drm.h
│ ├── d3drmdef.h
│ ├── d3drmobj.h
│ ├── d3drmwin.h
│ ├── d3dtypes.h
│ ├── d3dvec.inl
│ ├── d3dx.h
│ ├── d3dx8.h
│ ├── d3dx8core.h
│ ├── d3dx8effect.h
│ ├── d3dx8math.h
│ ├── d3dx8math.inl
│ ├── d3dx8mesh.h
│ ├── d3dx8shape.h
│ ├── d3dx8tex.h
│ ├── d3dxcore.h
│ ├── d3dxerr.h
│ ├── d3dxmath.h
│ ├── d3dxmath.inl
│ ├── d3dxshapes.h
│ ├── d3dxsprite.h
│ ├── ddraw.h
│ ├── ddrawex.h
│ ├── ddstream.h
│ ├── dinput.h
│ ├── dinputd.h
│ ├── dls1.h
│ ├── dls2.h
│ ├── dmdls.h
│ ├── dmerror.h
│ ├── dmksctrl.h
│ ├── dmo.h
│ ├── dmodshow.h
│ ├── dmoimpl.h
│ ├── dmoreg.h
│ ├── dmort.h
│ ├── dmplugin.h
│ ├── dmusbuff.h
│ ├── dmusicc.h
│ ├── dmusicf.h
│ ├── dmusici.h
│ ├── dmusics.h
│ ├── dpaddr.h
│ ├── dplay.h
│ ├── dplay8.h
│ ├── dplobby.h
│ ├── dplobby8.h
│ ├── dsetup.h
│ ├── DShow.h
│ ├── dshowasf.h
│ ├── dsound.h
│ ├── dv.h
│ ├── dvdevcod.h
│ ├── dvdmedia.h
│ ├── dvoice.h
│ ├── dvp.h
│ ├── dx7todx8.h
│ ├── dxerr8.h
│ ├── dxfile.h
│ ├── dxsdk.inc
│ ├── dxtrans.h
│ ├── dxva.h
│ ├── edevdefs.h
│ ├── errors.h
│ ├── evcode.h
│ ├── il21dec.h
│ ├── Iwstdec.h
│ ├── ks.h
│ ├── ksguid.h
│ ├── ksmedia.h
│ ├── ksproxy.h
│ ├── ksuuids.h
│ ├── mediaerr.h
│ ├── mediaobj.h
│ ├── medparam.h
│ ├── mmstream.h
│ ├── mpconfig.h
│ ├── mpegtype.h
│ ├── Mstvca.h
│ ├── Mstve.h
│ ├── Msvidctl.h
│ ├── Msvidctl.tlb
│ ├── multimon.h
│ ├── playlist.h
│ ├── qedit.h
│ ├── qnetwork.h
│ ├── regbag.h
│ ├── rmxfguid.h
│ ├── rmxftmpl.h
│ ├── Segment.h
│ ├── strmif.h
│ ├── tune.h
│ ├── tuner.h
│ ├── Tuner.tlb
│ ├── uuids.h
│ ├── vfwmsgs.h
│ ├── videoacc.h
│ ├── vpconfig.h
│ ├── vpnotify.h
│ ├── vptype.h
│ ├── xprtdefs.h
│ └── DShowIDL/
│ ├── amstream.idl
│ ├── amvpe.idl
│ ├── austream.idl
│ ├── axcore.idl
│ ├── axextend.idl
│ ├── bdaiface.idl
│ ├── Bdatif.idl
│ ├── control.odl
│ ├── ddstream.idl
│ ├── devenum.idl
│ ├── dmodshow.idl
│ ├── dshowasf.idl
│ ├── dvdif.idl
│ ├── dxtrans.idl
│ ├── dyngraph.idl
│ ├── iamovie.idl
│ ├── mediaobj.idl
│ ├── medparam.idl
│ ├── mmstream.idl
│ ├── Mstvca.idl
│ ├── mstve.idl
│ ├── Mstvgs.idl
│ ├── Msvidctl.idl
│ ├── qedit.idl
│ ├── regbag.idl
│ ├── Segment.idl
│ ├── strmif.idl
│ ├── tuner.idl
│ ├── Videoacc.idl
│ └── Vmrender.idl
├── DXSDK7/
│ ├── lib/
│ │ ├── d3dim.lib
│ │ ├── d3drm.lib
│ │ ├── d3dx.lib
│ │ ├── d3dxd.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dplayx.lib
│ │ ├── DSETUP.lib
│ │ ├── dsound.lib
│ │ ├── dxguid.lib
│ │ └── Borland/
│ │ ├── d3dim.lib
│ │ ├── d3drm.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dplayx.lib
│ │ ├── dsetup.lib
│ │ ├── dsound.lib
│ │ └── dxguid.lib
│ └── include/
│ ├── d3d.h
│ ├── d3dcaps.h
│ ├── d3drm.h
│ ├── d3drmdef.h
│ ├── d3drmobj.h
│ ├── d3drmwin.h
│ ├── d3dtypes.h
│ ├── d3dvec.inl
│ ├── d3dx.h
│ ├── d3dxcore.h
│ ├── d3dxerr.h
│ ├── d3dxmath.h
│ ├── d3dxmath.inl
│ ├── d3dxshapes.h
│ ├── d3dxsprite.h
│ ├── ddraw.h
│ ├── dinput.h
│ ├── dinputd.h
│ ├── dls1.h
│ ├── dls2.h
│ ├── dmdls.h
│ ├── dmerror.h
│ ├── dmksctrl.h
│ ├── dmusbuff.h
│ ├── dmusicc.h
│ ├── dmusicf.h
│ ├── dmusici.h
│ ├── dplay.h
│ ├── dplobby.h
│ ├── dsetup.h
│ ├── dsound.h
│ ├── dvp.h
│ ├── dxfile.h
│ ├── dxsdk.inc
│ ├── multimon.h
│ ├── rmxfguid.h
│ ├── rmxftmpl.h
│ └── rmxftmpl.x
└── DXSDK11/
├── Include/
│ ├── audiodefs.h
│ ├── comdecl.h
│ ├── D2D1.h
│ ├── D2D1Helper.h
│ ├── D2DBaseTypes.h
│ ├── D2Derr.h
│ ├── D3D10.h
│ ├── D3D10effect.h
│ ├── d3d10misc.h
│ ├── d3d10sdklayers.h
│ ├── D3D10shader.h
│ ├── D3D10_1.h
│ ├── D3D10_1shader.h
│ ├── D3D11.h
│ ├── D3D11SDKLayers.h
│ ├── D3D11Shader.h
│ ├── d3d9.h
│ ├── d3d9caps.h
│ ├── d3d9types.h
│ ├── D3Dcommon.h
│ ├── D3Dcompiler.h
│ ├── D3DCSX.h
│ ├── D3DX10.h
│ ├── d3dx10async.h
│ ├── D3DX10core.h
│ ├── D3DX10math.h
│ ├── D3DX10math.inl
│ ├── D3DX10mesh.h
│ ├── D3DX10tex.h
│ ├── D3DX11.h
│ ├── D3DX11async.h
│ ├── D3DX11core.h
│ ├── D3DX11tex.h
│ ├── d3dx9.h
│ ├── d3dx9anim.h
│ ├── d3dx9core.h
│ ├── d3dx9effect.h
│ ├── d3dx9math.h
│ ├── d3dx9math.inl
│ ├── d3dx9mesh.h
│ ├── d3dx9shader.h
│ ├── d3dx9shape.h
│ ├── d3dx9tex.h
│ ├── d3dx9xof.h
│ ├── D3DX_DXGIFormatConvert.inl
│ ├── Dcommon.h
│ ├── dinput.h
│ ├── dinputd.h
│ ├── dsconf.h
│ ├── dsetup.h
│ ├── dsound.h
│ ├── DWrite.h
│ ├── dxdiag.h
│ ├── DxErr.h
│ ├── dxfile.h
│ ├── DXGI.h
│ ├── DXGIFormat.h
│ ├── DXGIType.h
│ ├── dxsdkver.h
│ ├── gameux.h
│ ├── PIXPlugin.h
│ ├── rmxfguid.h
│ ├── rmxftmpl.h
│ ├── rpcsal.h
│ ├── X3DAudio.h
│ ├── xact3.h
│ ├── xact3d3.h
│ ├── xact3wb.h
│ ├── XAPO.h
│ ├── XAPOBase.h
│ ├── XAPOFX.h
│ ├── XAudio2.h
│ ├── XAudio2fx.h
│ ├── XDSP.h
│ ├── XInput.h
│ ├── xma2defs.h
│ ├── xnamath.h
│ ├── xnamathconvert.inl
│ ├── xnamathmatrix.inl
│ ├── xnamathmisc.inl
│ └── xnamathvector.inl
└── Lib/
├── x86/
│ ├── d2d1.lib
│ ├── d3d10.lib
│ ├── d3d10_1.lib
│ ├── d3d11.lib
│ ├── d3d9.lib
│ ├── d3dcompiler.lib
│ ├── D3DCSX.lib
│ ├── D3DCSXd.lib
│ ├── d3dx10.lib
│ ├── d3dx10d.lib
│ ├── d3dx11.lib
│ ├── d3dx11d.lib
│ ├── d3dx9.lib
│ ├── d3dx9d.lib
│ ├── d3dxof.lib
│ ├── dinput8.lib
│ ├── dsetup.lib
│ ├── dsound.lib
│ ├── dwrite.lib
│ ├── DxErr.lib
│ ├── dxgi.lib
│ ├── dxguid.lib
│ ├── X3DAudio.lib
│ ├── xapobase.lib
│ ├── xapobased.lib
│ ├── XAPOFX.lib
│ └── XInput.lib
└── x64/
├── d2d1.lib
├── d3d10.lib
├── d3d10_1.lib
├── d3d11.lib
├── d3d9.lib
├── d3dcompiler.lib
├── D3DCSX.lib
├── D3DCSXd.lib
├── d3dx10.lib
├── d3dx10d.lib
├── d3dx11.lib
├── d3dx11d.lib
├── d3dx9.lib
├── d3dx9d.lib
├── d3dxof.lib
├── dinput8.lib
├── dsound.lib
├── dwrite.lib
├── DxErr.lib
├── dxgi.lib
├── dxguid.lib
├── X3DAudio.lib
├── xapobase.lib
├── xapobased.lib
├── XAPOFX.lib
└── XInput.lib
```
# 概述与历史
我再次审视了是什么造就了原版 NinjaRipper 1.7.1 的伟大。我尝试分析它,逐步检查其行为,试图理解其注入机制,甚至进行了反编译,最终……我非常幸运!我得到了原作者 Black Ninja 的原版源代码!我开始刻苦地分析它,在一些额外的帮助下,很快我就能够开始重新创建它,它与原版极其相似,因此我决定将这个版本的 NinjaRipper 1.7.1(名为 Black Exploit,现名 Black Ripper)开源。我的目标是尽可能减少文件数量,具备良好的文档化结构,并且所有人都能通过几条命令轻松编译....\
### 文件说明:
• NinjaRipper.exe (C++ 或 C#) = 轻量级启动器。它只显示 UI,调用 CreateProcess(target, suspended) 并通过 APC.C# 注入 intruder.dll。\
• injhelper.exe 是一个微型的约 150 行 (C++ 或 C#) 的 EXE。它唯一的工作是:在命令行接收 pid、tid、dllpath,打开目标进程,并执行 APC 注入。它的存在仅仅是为了处理跨架构的情况(64 位启动器注入到 32 位游戏或反之)。它本质上只是 BlackRipper.cs 中包装在 Main() 里的 KInject.InjectApc() 方法。可以用任何语言编写,比如 C#。\
• intruder.dll = 整个提取引擎。单独编译,在目标游戏进程内运行。完全自包含。永远不需要与启动器进行通信。该文件仅限使用原生 C++。\
• d3dwrap.dll = 是一个完整的 DX 封装器(Wrapper)——它导出 d3d9.dll 的实际 API(如 Direct3DCreate9 等),将调用转发给真实的系统 DLL,并从其自身的 DllMain 中通过 LoadLibrary 加载 intruder.dll。这是针对无法使用 APC 注入的游戏的一种替代注入路径。该文件仅限使用原生 C++。
[支持所有重要的 DirectX 版本:DirectX 6, 7, 8, 9, 11....]
# 为什么不用 C# 或 Python?
完全使用 C# / Python 是一个非常糟糕的主意,C# 和 Python 无法在原生层面执行 APC 注入、vtable 钩子或 LdrLoadDll 拦截。因此,intruder.dll 和 d3dwrap.dll 必须使用 C++ 编写\
而且 intruder.dll 是在游戏进程内通过 APC 调用 LoadLibraryW 加载的。这意味着它必须是一个原生的 Win32 DLL —— .NET 程序集根本无法以这种方式加载。\
[尽管这是我最喜爱的编程语言,但存在这个主要问题,因此我决定仅将启动器和辅助程序使用 C# 编写]\
# Ripper 的工作原理是什么?(Intruder 注入)
它本质上是一个 DirectX 几何体/纹理提取器(VRAM 漏洞利用),用于捕获运行时游戏的 3D/2D 资产数据。\
模式 1 — Intruder 注入 (APC)\
你将游戏冻结启动,将 DLL 路径塞入其内存中,告诉它“在唤醒时加载它”,然后解除冻结。游戏对此毫无察觉。这适用于大多数游戏,但在带有反作弊系统(会监控挂起进程启动)的游戏上会失败。\
\
模式 2 — d3dwrap.dll (封装器)\
你不进行注入,而是伪装成 DirectX 本身。你将 d3dwrap.dll 复制到游戏文件夹中并将其重命名为 d3d9.dll。当游戏正常启动并调用 Direct3DCreate9 时,Windows 会加载你的假 d3d9.dll,而不是真正的那个。你的假 DLL 做两件事:加载真正的系统 d3d9.dll 并将调用转发给它,同时附带加载 intruder.dll。游戏完全察觉不到——它拿回了真正的 DirectX,只是带上了一个“搭便车”的。这适用于那些阻止 APC 注入,但无法阻止从其自身文件夹加载 DLL 的游戏。\
\
intruder.dll 一旦进入内部,实际上会做什么:\
它会监视游戏加载的每一个 DLL。当它发现 d3d9.dll 出现的那一刻,它会深入 DirectX 的内部函数表(COM vtable),并将 DrawPrimitive、DrawIndexedPrimitive、Present、SetTexture 的指针替换为自己的函数。从那一刻起,每次游戏绘制任何内容时,intruder.dll 的代码都会首先运行,读取顶点和索引缓冲区,将它们解包为浮点数,保存为 .rip 文件,将每个纹理渲染到离屏表面并将其保存为 .dds —— 然后将控制权交还给真正的 DirectX,以便游戏继续正常运行。玩家按下 F10,该标志开启,捕获一帧的几何体,标志随后关闭。这就是它的全部工作原理。\
### Intruder 模式 - 完整指南:
```
BlackRipper.exe & InjHelper.exe:
│
├─ 1. GetBinaryType(game.exe) → is it 32 or 64-bit?
├─ 2. CreateProcess(game, SUSPENDED) → game thread frozen at ntdll init
├─ 3. VirtualAllocEx + WriteProcessMemory → writes "intruder.dll" path into game RAM
├─ 4. QueueUserAPC(LoadLibraryW, thread, path) → schedules DLL load
└─ 5. ResumeThread → game thread wakes, processes the APC first
→ Windows calls LoadLibraryW("intruder.dll")
→ DllMain(DLL_PROCESS_ATTACH) fires
→ install() runs inside the GAME process
intruder.dll (inside the game process):
│
├─ 1. Hooks ntdll.LdrLoadDll → watches every DLL the game loads
├─ 2. Hooks CreateProcess* → propagates to child processes
│
├─ 3. Game loads d3d9.dll → LdrLoadDll hook fires
│ └─ create_KRipper9() → hooks DrawPrimitive, DrawIndexedPrimitive,
│ SetTexture, Present, CreateVertexBuffer...
│
├─ 4. Every frame: game calls Present()
│ └─ KIntruder::frameHandler() → polls F10/F9/F12 hotkeys
│
├─ 5. Player presses F10 (RipKey)
│ └─ fRipEnabled = 1 → next Draw* calls start capturing
│
├─ 6. Game calls DrawIndexedPrimitive()
│ ├─ Lock vertex buffer → read raw vertices
│ ├─ Lock index buffer → read raw indices
│ ├─ processIndexes*() → convert to triangle list
│ ├─ dumpVertSemantic() → unpack POSITION/NORMAL/TEXCOORD to floats
│ ├─ GetTexture(0..7) → render-to-texture trick → save as .dds
│ └─ saveRipFile() → write .rip file (header + faces + vertices)
│
└─ Player presses F10 again → fRipEnabled = 0, frameEnd()
[W.I.P.]
```
# 说明
```
Instructions:
Requirments: .NET 4.8, MSVC 1.4
// Build X86:
// 1. Build X86 Intruuder.dll (MSVC x86 Developer Command Prompt):
// cl /nologo /W3 /O2 /EHsc /LD /DUNICODE /D_UNICODE /D_WIN32_WINNT=0x0502
// intruder.cpp /Fe:intruder.dll
// /link /DLL d3d9.lib dxguid.lib kernel32.lib user32.lib
//
// 2. Build X64 BlackRipper.exe & InjHelper.exe (.NET 4-8):
// dotnet build injhelper.csproj -c Release -p:PlatformTarget=x86
// dotnet build BlackRipper_171.csproj -c Release -p:PlatformTarget=x86
//
// Build X64:\
// 1. Build X64 Intruder.dll (MSVC x64 Developer Command Prompt):
// cl /nologo /W3 /O2 /EHsc /LD /DUNICODE /D_UNICODE /D_WIN32_WINNT=0x0502
// /D_WIN64 intruder.cpp /Fe:intruder.dll
// /link /DLL d3d9.lib dxguid.lib kernel32.lib user32.lib
//
// 2. Build X64 BlackRipper.exe & InjHelper.exe (.NET 4-8):
// dotnet build injhelper.csproj -c Release -p:PlatformTarget=x64
// dotnet build BlackRipper_171.csproj -c Release -p:PlatformTarget=x64
```
### 原版 NinjaRipper 1.7.1 结构:
```
└── NinjaRipperSrc_x64/
├── common/
│ ├── constants.cpp
│ ├── constants.h
│ ├── crashdump.cpp
│ ├── crashdump.h
│ ├── kinject.cpp
│ ├── kinject.h
│ ├── ksettings.cpp
│ ├── ksettings.h
│ ├── pathtools.cpp
│ ├── pathtools.h
│ ├── registry.cpp
│ ├── registry.h
│ └── tinylogger.h
├── injector/
│ ├── aboutdlg.cpp
│ ├── aboutdlg.h
│ ├── dxrip_.ico
│ ├── Hyperlinks.cpp
│ ├── Hyperlinks.h
│ ├── Hyperlinks__.cpp
│ ├── injector.cpp
│ ├── injector.h
│ ├── injector.rc
│ ├── injector.sln
│ ├── injector.suo
│ ├── injector.v12.suo
│ ├── injector.vcproj
│ ├── injector.vcxproj
│ ├── injector.vcxproj.filters
│ ├── injector.vcxproj.user
│ ├── Main.ico
│ ├── paypal.bmp
│ ├── paypal10.bmp
│ ├── paypal5.bmp
│ ├── RCa20616
│ ├── resource.h
│ ├── settingsdlg.cpp
│ ├── stdafx.h
│ ├── UpgradeLog.htm
│ └── UpgradeLog.XML
├── intruder/
│ ├── intruder.aps
│ ├── intruder.cpp
│ ├── intruder.def
│ ├── intruder.h
│ ├── intruder.log
│ ├── intruder.rc
│ ├── intruder.sln
│ ├── intruder.suo
│ ├── intruder.v12.suo
│ ├── intruder.vcproj
│ ├── intruder.vcxproj
│ ├── intruder.vcxproj.filters
│ ├── intruder.vcxproj.user
│ ├── intruder1.aps
│ ├── intruder1.rc
│ ├── intruder1.res
│ ├── process.cpp
│ ├── process.h
│ ├── ReadMe.txt
│ ├── resource.h
│ ├── resource1.h
│ ├── MinHook/
│ │ ├── .editorconfig
│ │ ├── AUTHORS.txt
│ │ ├── LICENSE.txt
│ │ ├── src/
│ │ │ ├── buffer.c
│ │ │ ├── buffer.h
│ │ │ ├── hook.c
│ │ │ ├── trampoline.c
│ │ │ ├── trampoline.h
│ │ │ └── HDE/
│ │ │ ├── hde32.c
│ │ │ ├── hde32.h
│ │ │ ├── hde64.c
│ │ │ ├── hde64.h
│ │ │ ├── pstdint.h
│ │ │ ├── table32.h
│ │ │ └── table64.h
│ │ ├── include/
│ │ │ └── MinHook.h
│ │ ├── dll_resources/
│ │ │ ├── MinHook.def
│ │ │ └── MinHook.rc
│ │ └── build/
│ │ ├── VC9/
│ │ │ ├── libMinHook.vcproj
│ │ │ ├── MinHook.vcproj
│ │ │ └── MinHookVC9.sln
│ │ ├── VC12/
│ │ │ ├── libMinHook.vcxproj
│ │ │ ├── libMinHook.vcxproj.filters
│ │ │ ├── MinHook.vcxproj
│ │ │ ├── MinHookVC12.sln
│ │ │ ├── MinHookVC12.v12.suo
│ │ │ ├── lib/
│ │ │ │ ├── Release/
│ │ │ │ │ ├── libMinHook.x64.lib
│ │ │ │ │ └── libMinHook.x86.lib
│ │ │ │ └── Debug/
│ │ │ │ ├── libMinHook.x64.lib
│ │ │ │ └── libMinHook.x86.lib
│ │ │ └── bin/
│ │ │ ├── Release/
│ │ │ │ ├── MinHook.x64.dll
│ │ │ │ ├── MinHook.x64.exp
│ │ │ │ ├── MinHook.x64.lib
│ │ │ │ ├── MinHook.x86.dll
│ │ │ │ ├── MinHook.x86.exp
│ │ │ │ └── MinHook.x86.lib
│ │ │ └── Debug/
│ │ │ ├── MinHook.x64.dll
│ │ │ ├── MinHook.x64.exp
│ │ │ ├── MinHook.x64.ilk
│ │ │ ├── MinHook.x64.lib
│ │ │ ├── MinHook.x86.dll
│ │ │ ├── MinHook.x86.exp
│ │ │ ├── MinHook.x86.ilk
│ │ │ └── MinHook.x86.lib
│ │ ├── VC11/
│ │ │ ├── libMinHook.vcxproj
│ │ │ ├── libMinHook.vcxproj.filters
│ │ │ ├── MinHook.vcxproj
│ │ │ └── MinHookVC11.sln
│ │ └── VC10/
│ │ ├── libMinHook.vcxproj
│ │ ├── libMinHook.vcxproj.filters
│ │ ├── libMinHook.vcxproj.user
│ │ ├── MinHook.vcxproj
│ │ ├── MinHook.vcxproj.user
│ │ ├── MinHookVC10.sln
│ │ └── MinHookVC10.suo
│ ├── dxgi/
│ │ ├── dxgitypes.h
│ │ ├── enums.h
│ │ ├── kdxgi.cpp
│ │ ├── kdxgi.h
│ │ ├── macrodxgi.h
│ │ ├── predxgi.cpp
│ │ └── predxgi.h
│ ├── dx9/
│ │ ├── drawindexedprimitive9.cpp
│ │ ├── drawindexedprimitiveup9.cpp
│ │ ├── drawprimitive9.cpp
│ │ ├── drawprimitiveup9.cpp
│ │ ├── dump9.cpp
│ │ ├── dx9types.h
│ │ ├── enums.h
│ │ ├── kripper9.cpp
│ │ ├── kripper9.h
│ │ ├── macro.h
│ │ ├── pre9.cpp
│ │ ├── pre9.h
│ │ ├── savemeshtextures9.cpp
│ │ ├── saveshader9.cpp
│ │ ├── savetexture9.cpp
│ │ └── texture9.cpp
│ ├── dx8/
│ │ ├── drawindexedprimitive8.cpp
│ │ ├── drawindexedprimitiveup8.cpp
│ │ ├── drawprimitive8.cpp
│ │ ├── drawprimitiveup8.cpp
│ │ ├── dump8.cpp
│ │ ├── dx8types.h
│ │ ├── enums.h
│ │ ├── kripper8.cpp
│ │ ├── kripper8.h
│ │ ├── pre8.cpp
│ │ ├── pre8.h
│ │ ├── savemeshtextures8.cpp
│ │ ├── sm1_disasm.cpp
│ │ ├── sm1_disasm.h
│ │ ├── sm1_vertdecl.cpp
│ │ ├── sm1_vertdecl.h
│ │ └── texture8.cpp
│ ├── dx7/
│ │ ├── drawindexedprimitive7.cpp
│ │ ├── drawindexedprimitivestrided7.cpp
│ │ ├── drawindexedprimitivevb7.cpp
│ │ ├── drawprimitive7.cpp
│ │ ├── drawprimitivestrided7.cpp
│ │ ├── drawprimitivevb7.cpp
│ │ ├── dx7types.h
│ │ ├── enums.h
│ │ ├── kripper7.cpp
│ │ ├── kripper7.h
│ │ ├── macro.h
│ │ ├── pre7.cpp
│ │ ├── pre7.h
│ │ ├── savemeshtextures7.cpp
│ │ ├── savetexture7.cpp
│ │ └── texture7.cpp
│ ├── dx6/
│ │ ├── drawindexedprimitive6.cpp
│ │ ├── drawindexedprimitivestrided6.cpp
│ │ ├── drawindexedprimitivevb6.cpp
│ │ ├── drawprimitive6.cpp
│ │ ├── drawprimitivestrided6.cpp
│ │ ├── drawprimitivevb6.cpp
│ │ ├── dx6types.h
│ │ ├── enums.h
│ │ ├── kripper6.cpp
│ │ ├── kripper6.h
│ │ ├── macro.h
│ │ ├── pre6.cpp
│ │ ├── pre6.h
│ │ ├── savemeshtextures6.cpp
│ │ ├── savetexture6.cpp
│ │ └── texture6.cpp
│ ├── dx11/
│ │ ├── draw11.cpp
│ │ ├── drawauto11.cpp
│ │ ├── drawindexed11.cpp
│ │ ├── drawindexedinstanced11.cpp
│ │ ├── drawindexedinstancedindirect11.cpp
│ │ ├── drawinstanced11.cpp
│ │ ├── drawinstancedindirect11.cpp
│ │ ├── dump11.cpp
│ │ ├── dx11types.h
│ │ ├── enums.h
│ │ ├── guiddump.h
│ │ ├── kripper11.cpp
│ │ ├── kripper11.h
│ │ ├── macro.h
│ │ ├── pre11.cpp
│ │ ├── pre11.h
│ │ ├── savemeshtextures11.cpp
│ │ ├── savetexture11.cpp
│ │ └── texture11.cpp
│ ├── DirectXTex/
│ │ ├── .gitignore
│ │ ├── DirectXTex_Desktop_2012.sln
│ │ ├── DirectXTex_Desktop_2013.sln
│ │ ├── DirectXTex_Desktop_2013.v12.suo
│ │ ├── DirectXTex_Desktop_2015.sln
│ │ ├── DirectXTex_Windows10.sln
│ │ ├── DirectXTex_Windows81.sln
│ │ ├── DirectXTex_WindowsPhone81.sln
│ │ ├── DirectXTex_XboxOneADK.sln
│ │ ├── DirectXTex_XboxOneXDK.sln
│ │ ├── DirectXTex_XboxOneXDK_2015.sln
│ │ ├── MIT.txt
│ │ ├── ReadMe.txt
│ │ ├── WICTextureLoader/
│ │ │ ├── WICTextureLoader.cpp
│ │ │ └── WICTextureLoader.h
│ │ ├── Texconv/
│ │ │ ├── directx.ico
│ │ │ ├── texconv.cpp
│ │ │ ├── Texconv.rc
│ │ │ ├── Texconv_Desktop_2012.vcxproj
│ │ │ ├── Texconv_Desktop_2012.vcxproj.filters
│ │ │ ├── Texconv_Desktop_2013.vcxproj
│ │ │ ├── Texconv_Desktop_2013.vcxproj.filters
│ │ │ ├── Texconv_Desktop_2015.vcxproj
│ │ │ └── Texconv_Desktop_2015.vcxproj.filters
│ │ ├── Texassemble/
│ │ │ ├── directx.ico
│ │ │ ├── texassemble.cpp
│ │ │ ├── texassemble.rc
│ │ │ ├── Texassemble_Desktop_2012.vcxproj
│ │ │ ├── Texassemble_Desktop_2012.vcxproj.filters
│ │ │ ├── Texassemble_Desktop_2013.vcxproj
│ │ │ ├── Texassemble_Desktop_2013.vcxproj.filters
│ │ │ ├── Texassemble_Desktop_2015.vcxproj
│ │ │ └── Texassemble_Desktop_2015.vcxproj.filters
│ │ ├── ScreenGrab/
│ │ │ ├── ScreenGrab.cpp
│ │ │ └── ScreenGrab.h
│ │ ├── DirectXTex/
│ │ │ ├── BC.cpp
│ │ │ ├── BC.h
│ │ │ ├── BC4BC5.cpp
│ │ │ ├── BC6HBC7.cpp
│ │ │ ├── BCDirectCompute.cpp
│ │ │ ├── BCDirectCompute.h
│ │ │ ├── DDS.h
│ │ │ ├── DirectXTex.h
│ │ │ ├── DirectXTex.inl
│ │ │ ├── DirectXTexCompress.cpp
│ │ │ ├── DirectXTexCompressGPU.cpp
│ │ │ ├── DirectXTexConvert.cpp
│ │ │ ├── DirectXTexD3D11.cpp
│ │ │ ├── DirectXTexDDS.cpp
│ │ │ ├── DirectXTexFlipRotate.cpp
│ │ │ ├── DirectXTexImage.cpp
│ │ │ ├── DirectXTexMipmaps.cpp
│ │ │ ├── DirectXTexMisc.cpp
│ │ │ ├── DirectXTexNormalMaps.cpp
│ │ │ ├── DirectXTexP.h
│ │ │ ├── DirectXTexPMAlpha.cpp
│ │ │ ├── DirectXTexResize.cpp
│ │ │ ├── DirectXTexTGA.cpp
│ │ │ ├── DirectXTexUtil.cpp
│ │ │ ├── DirectXTexWIC.cpp
│ │ │ ├── DirectXTex_Desktop_2012.vcxproj
│ │ │ ├── DirectXTex_Desktop_2012.vcxproj.filters
│ │ │ ├── DirectXTex_Desktop_2013.sln
│ │ │ ├── DirectXTex_Desktop_2013.v12.suo
│ │ │ ├── DirectXTex_Desktop_2013.vcxproj
│ │ │ ├── DirectXTex_Desktop_2013.vcxproj.filters
│ │ │ ├── DirectXTex_Desktop_2013.vcxproj.user
│ │ │ ├── DirectXTex_Desktop_2015.v12.suo
│ │ │ ├── DirectXTex_Desktop_2015.vcxproj
│ │ │ ├── DirectXTex_Desktop_2015.vcxproj.filters
│ │ │ ├── DirectXTex_Windows10.vcxproj
│ │ │ ├── DirectXTex_Windows10.vcxproj.filters
│ │ │ ├── DirectXTex_Windows81.vcxproj
│ │ │ ├── DirectXTex_Windows81.vcxproj.filters
│ │ │ ├── DirectXTex_WindowsPhone81.vcxproj
│ │ │ ├── DirectXTex_WindowsPhone81.vcxproj.filters
│ │ │ ├── DirectXTex_XboxOneADK.vcxproj
│ │ │ ├── DirectXTex_XboxOneADK.vcxproj.filters
│ │ │ ├── DirectXTex_XboxOneXDK.vcxproj
│ │ │ ├── DirectXTex_XboxOneXDK.vcxproj.filters
│ │ │ ├── DirectXTex_XboxOneXDK_2015.vcxproj
│ │ │ ├── DirectXTex_XboxOneXDK_2015.vcxproj.filters
│ │ │ ├── Filters.h
│ │ │ ├── scoped.h
│ │ │ ├── Shaders/
│ │ │ │ ├── BC6HEncode.hlsl
│ │ │ │ ├── BC7Encode.hlsl
│ │ │ │ ├── CompileShaders.cmd
│ │ │ │ └── Compiled/
│ │ │ │ ├── BC6HEncode_EncodeBlockCS.inc
│ │ │ │ ├── BC6HEncode_TryModeG10CS.inc
│ │ │ │ ├── BC6HEncode_TryModeLE10CS.inc
│ │ │ │ ├── BC7Encode_EncodeBlockCS.inc
│ │ │ │ ├── BC7Encode_TryMode02CS.inc
│ │ │ │ ├── BC7Encode_TryMode137CS.inc
│ │ │ │ └── BC7Encode_TryMode456CS.inc
│ │ │ └── Bin/
│ │ │ └── Desktop_2013/
│ │ │ ├── x64/
│ │ │ │ ├── Release/
│ │ │ │ │ └── DirectXTex.lib
│ │ │ │ └── Debug/
│ │ │ │ └── DirectXTex.lib
│ │ │ └── Win32/
│ │ │ ├── Release/
│ │ │ │ └── DirectXTex.lib
│ │ │ └── Debug/
│ │ │ └── DirectXTex.lib
│ │ ├── DDSView/
│ │ │ ├── ddsview.cpp
│ │ │ ├── ddsview.fx
│ │ │ ├── DDSView.rc
│ │ │ ├── DDSView_Desktop_2012.vcxproj
│ │ │ ├── DDSView_Desktop_2012.vcxproj.filters
│ │ │ ├── DDSView_Desktop_2013.vcxproj
│ │ │ ├── DDSView_Desktop_2013.vcxproj.filters
│ │ │ ├── DDSView_Desktop_2015.vcxproj
│ │ │ ├── DDSView_Desktop_2015.vcxproj.filters
│ │ │ ├── directx.ico
│ │ │ ├── hlsl.cmd
│ │ │ └── shaders/
│ │ │ ├── ps1D.h
│ │ │ ├── ps1Darray.h
│ │ │ ├── ps2D.h
│ │ │ ├── ps2Darray.h
│ │ │ ├── ps3D.h
│ │ │ ├── psCube.h
│ │ │ └── vs.h
│ │ └── DDSTextureLoader/
│ │ ├── DDSTextureLoader.cpp
│ │ └── DDSTextureLoader.h
│ ├── ddraw/
│ │ ├── ddrawtypes.h
│ │ ├── enums.h
│ │ ├── kddraw.cpp
│ │ ├── kddraw.h
│ │ ├── macro.h
│ │ ├── preddraw.cpp
│ │ ├── preddraw.h
│ │ ├── surface.cpp
│ │ ├── surface.h
│ │ ├── surfacesave.cpp
│ │ ├── surfacesave.h
│ │ └── surface_ripper.cpp
│ └── common/
│ ├── commontypes.h
│ ├── d3dhelper.cpp
│ ├── d3dhelper.h
│ ├── dataconvert.cpp
│ ├── dataconvert.h
│ ├── datatypes.cpp
│ ├── datatypes.h
│ ├── fvf.cpp
│ ├── fvf.h
│ ├── guidtoname.cpp
│ ├── guidtoname.h
│ ├── indexprocess.cpp
│ ├── indexprocess.h
│ ├── iripper.h
│ ├── khook.cpp
│ ├── khook.h
│ ├── khookmgr.cpp
│ ├── khookmgr.h
│ ├── kintruder.cpp
│ ├── kintruder.h
│ ├── klog.h
│ ├── macro.h
│ ├── outtypes__.h
│ ├── ripout.cpp
│ ├── ripout.h
│ ├── shadercompile.cpp
│ ├── shadercompile.h
│ ├── tdxref.h
│ ├── tinitedval.h
│ ├── tools.cpp
│ ├── tools.h
│ ├── topology.cpp
│ ├── topology.h
│ ├── vertexprocess.cpp
│ ├── vertexprocess.h
│ ├── vert_indx_dump.cpp
│ └── vert_indx_dump.h
└── DXSDK/ [OPTIONAL]
├── DXSDK9/
│ ├── Include/
│ │ ├── comdecl.h
│ │ ├── d3d.h
│ │ ├── D3D10.h
│ │ ├── D3D10effect.h
│ │ ├── d3d10misc.h
│ │ ├── d3d10sdklayers.h
│ │ ├── D3D10shader.h
│ │ ├── d3d8.h
│ │ ├── d3d8caps.h
│ │ ├── d3d8types.h
│ │ ├── d3d9.h
│ │ ├── d3d9caps.h
│ │ ├── d3d9types.h
│ │ ├── d3dcaps.h
│ │ ├── d3drm.h
│ │ ├── d3drmdef.h
│ │ ├── d3drmobj.h
│ │ ├── d3drmwin.h
│ │ ├── d3dtypes.h
│ │ ├── d3dvec.inl
│ │ ├── D3DX10.h
│ │ ├── d3dx10async.h
│ │ ├── D3DX10core.h
│ │ ├── D3DX10math.h
│ │ ├── D3DX10math.inl
│ │ ├── D3DX10mesh.h
│ │ ├── D3DX10tex.h
│ │ ├── d3dx9.h
│ │ ├── d3dx9anim.h
│ │ ├── d3dx9core.h
│ │ ├── d3dx9effect.h
│ │ ├── d3dx9math.h
│ │ ├── d3dx9math.inl
│ │ ├── d3dx9mesh.h
│ │ ├── d3dx9shader.h
│ │ ├── d3dx9shape.h
│ │ ├── d3dx9tex.h
│ │ ├── d3dx9xof.h
│ │ ├── ddraw.h
│ │ ├── dinput.h
│ │ ├── dinputd.h
│ │ ├── dls1.h
│ │ ├── dls2.h
│ │ ├── dmdls.h
│ │ ├── dmerror.h
│ │ ├── dmksctrl.h
│ │ ├── dmplugin.h
│ │ ├── dmusbuff.h
│ │ ├── dmusicc.h
│ │ ├── dmusicf.h
│ │ ├── dmusici.h
│ │ ├── dmusics.h
│ │ ├── dpaddr.h
│ │ ├── dplay.h
│ │ ├── dplay8.h
│ │ ├── dplobby.h
│ │ ├── dplobby8.h
│ │ ├── dpnathlp.h
│ │ ├── dsconf.h
│ │ ├── dsetup.h
│ │ ├── dsound.h
│ │ ├── dvoice.h
│ │ ├── dvp.h
│ │ ├── dx7todx8.h
│ │ ├── dxdiag.h
│ │ ├── DxErr.h
│ │ ├── dxerr8.h
│ │ ├── dxerr9.h
│ │ ├── dxfile.h
│ │ ├── DXGI.h
│ │ ├── DXGIType.h
│ │ ├── dxsdkver.h
│ │ ├── dxtrans.h
│ │ ├── multimon.h
│ │ ├── PIXPlugin.h
│ │ ├── rmxfguid.h
│ │ ├── rmxftmpl.h
│ │ ├── strsafe.h
│ │ ├── X3DAudio.h
│ │ ├── xact.h
│ │ ├── xact2wb.h
│ │ ├── xact3d.h
│ │ └── XInput.h
│ └── Lib/
│ ├── x86/
│ │ ├── d3d10.lib
│ │ ├── d3d8.lib
│ │ ├── d3d9.lib
│ │ ├── d3dx10.lib
│ │ ├── d3dx10d.lib
│ │ ├── d3dx9.lib
│ │ ├── d3dx9d.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dinput8.lib
│ │ ├── dplayx.lib
│ │ ├── dsetup.lib
│ │ ├── dsound.lib
│ │ ├── DxErr.lib
│ │ ├── DxErr8.lib
│ │ ├── DxErr9.lib
│ │ ├── dxgi.lib
│ │ ├── dxguid.lib
│ │ ├── dxtrans.lib
│ │ ├── X3DAudio.lib
│ │ └── XInput.lib
│ └── x64/
│ ├── d3d10.lib
│ ├── d3d9.lib
│ ├── d3dx10.lib
│ ├── d3dx10d.lib
│ ├── d3dx9.lib
│ ├── d3dx9d.lib
│ ├── d3dxof.lib
│ ├── ddraw.lib
│ ├── dinput.lib
│ ├── dinput8.lib
│ ├── dplayx.lib
│ ├── dsound.lib
│ ├── DxErr.lib
│ ├── DxErr8.lib
│ ├── DxErr9.lib
│ ├── dxgi.lib
│ ├── dxguid.lib
│ ├── dxtrans.lib
│ ├── X3DAudio.lib
│ └── XInput.lib
├── DXSDK8/
│ ├── lib/
│ │ ├── amstrmid.lib
│ │ ├── d3d8.lib
│ │ ├── d3dx.lib
│ │ ├── d3dx8.lib
│ │ ├── d3dx8d.lib
│ │ ├── d3dx8dt.lib
│ │ ├── d3dxd.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dinput8.lib
│ │ ├── dmoguids.lib
│ │ ├── dplayx.lib
│ │ ├── dsetup.lib
│ │ ├── dsound.lib
│ │ ├── DxErr8.lib
│ │ ├── dxguid.lib
│ │ ├── dxtrans.lib
│ │ ├── ksproxy.lib
│ │ ├── ksuser.lib
│ │ ├── msdmo.lib
│ │ ├── quartz.lib
│ │ └── strmiids.lib
│ └── include/
│ ├── activecf.h
│ ├── amaudio.h
│ ├── amparse.h
│ ├── amstream.h
│ ├── amva.h
│ ├── Amvideo.h
│ ├── atsmedia.h
│ ├── audevcod.h
│ ├── austream.h
│ ├── aviriff.h
│ ├── basetsd.h
│ ├── bdaiface.h
│ ├── bdamedia.h
│ ├── Bdatif.h
│ ├── bdatypes.h
│ ├── comlite.h
│ ├── control.h
│ ├── d3d.h
│ ├── d3d8.h
│ ├── d3d8caps.h
│ ├── d3d8types.h
│ ├── d3dcaps.h
│ ├── d3drm.h
│ ├── d3drmdef.h
│ ├── d3drmobj.h
│ ├── d3drmwin.h
│ ├── d3dtypes.h
│ ├── d3dvec.inl
│ ├── d3dx.h
│ ├── d3dx8.h
│ ├── d3dx8core.h
│ ├── d3dx8effect.h
│ ├── d3dx8math.h
│ ├── d3dx8math.inl
│ ├── d3dx8mesh.h
│ ├── d3dx8shape.h
│ ├── d3dx8tex.h
│ ├── d3dxcore.h
│ ├── d3dxerr.h
│ ├── d3dxmath.h
│ ├── d3dxmath.inl
│ ├── d3dxshapes.h
│ ├── d3dxsprite.h
│ ├── ddraw.h
│ ├── ddrawex.h
│ ├── ddstream.h
│ ├── dinput.h
│ ├── dinputd.h
│ ├── dls1.h
│ ├── dls2.h
│ ├── dmdls.h
│ ├── dmerror.h
│ ├── dmksctrl.h
│ ├── dmo.h
│ ├── dmodshow.h
│ ├── dmoimpl.h
│ ├── dmoreg.h
│ ├── dmort.h
│ ├── dmplugin.h
│ ├── dmusbuff.h
│ ├── dmusicc.h
│ ├── dmusicf.h
│ ├── dmusici.h
│ ├── dmusics.h
│ ├── dpaddr.h
│ ├── dplay.h
│ ├── dplay8.h
│ ├── dplobby.h
│ ├── dplobby8.h
│ ├── dsetup.h
│ ├── DShow.h
│ ├── dshowasf.h
│ ├── dsound.h
│ ├── dv.h
│ ├── dvdevcod.h
│ ├── dvdmedia.h
│ ├── dvoice.h
│ ├── dvp.h
│ ├── dx7todx8.h
│ ├── dxerr8.h
│ ├── dxfile.h
│ ├── dxsdk.inc
│ ├── dxtrans.h
│ ├── dxva.h
│ ├── edevdefs.h
│ ├── errors.h
│ ├── evcode.h
│ ├── il21dec.h
│ ├── Iwstdec.h
│ ├── ks.h
│ ├── ksguid.h
│ ├── ksmedia.h
│ ├── ksproxy.h
│ ├── ksuuids.h
│ ├── mediaerr.h
│ ├── mediaobj.h
│ ├── medparam.h
│ ├── mmstream.h
│ ├── mpconfig.h
│ ├── mpegtype.h
│ ├── Mstvca.h
│ ├── Mstve.h
│ ├── Msvidctl.h
│ ├── Msvidctl.tlb
│ ├── multimon.h
│ ├── playlist.h
│ ├── qedit.h
│ ├── qnetwork.h
│ ├── regbag.h
│ ├── rmxfguid.h
│ ├── rmxftmpl.h
│ ├── Segment.h
│ ├── strmif.h
│ ├── tune.h
│ ├── tuner.h
│ ├── Tuner.tlb
│ ├── uuids.h
│ ├── vfwmsgs.h
│ ├── videoacc.h
│ ├── vpconfig.h
│ ├── vpnotify.h
│ ├── vptype.h
│ ├── xprtdefs.h
│ └── DShowIDL/
│ ├── amstream.idl
│ ├── amvpe.idl
│ ├── austream.idl
│ ├── axcore.idl
│ ├── axextend.idl
│ ├── bdaiface.idl
│ ├── Bdatif.idl
│ ├── control.odl
│ ├── ddstream.idl
│ ├── devenum.idl
│ ├── dmodshow.idl
│ ├── dshowasf.idl
│ ├── dvdif.idl
│ ├── dxtrans.idl
│ ├── dyngraph.idl
│ ├── iamovie.idl
│ ├── mediaobj.idl
│ ├── medparam.idl
│ ├── mmstream.idl
│ ├── Mstvca.idl
│ ├── mstve.idl
│ ├── Mstvgs.idl
│ ├── Msvidctl.idl
│ ├── qedit.idl
│ ├── regbag.idl
│ ├── Segment.idl
│ ├── strmif.idl
│ ├── tuner.idl
│ ├── Videoacc.idl
│ └── Vmrender.idl
├── DXSDK7/
│ ├── lib/
│ │ ├── d3dim.lib
│ │ ├── d3drm.lib
│ │ ├── d3dx.lib
│ │ ├── d3dxd.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dplayx.lib
│ │ ├── DSETUP.lib
│ │ ├── dsound.lib
│ │ ├── dxguid.lib
│ │ └── Borland/
│ │ ├── d3dim.lib
│ │ ├── d3drm.lib
│ │ ├── d3dxof.lib
│ │ ├── ddraw.lib
│ │ ├── dinput.lib
│ │ ├── dplayx.lib
│ │ ├── dsetup.lib
│ │ ├── dsound.lib
│ │ └── dxguid.lib
│ └── include/
│ ├── d3d.h
│ ├── d3dcaps.h
│ ├── d3drm.h
│ ├── d3drmdef.h
│ ├── d3drmobj.h
│ ├── d3drmwin.h
│ ├── d3dtypes.h
│ ├── d3dvec.inl
│ ├── d3dx.h
│ ├── d3dxcore.h
│ ├── d3dxerr.h
│ ├── d3dxmath.h
│ ├── d3dxmath.inl
│ ├── d3dxshapes.h
│ ├── d3dxsprite.h
│ ├── ddraw.h
│ ├── dinput.h
│ ├── dinputd.h
│ ├── dls1.h
│ ├── dls2.h
│ ├── dmdls.h
│ ├── dmerror.h
│ ├── dmksctrl.h
│ ├── dmusbuff.h
│ ├── dmusicc.h
│ ├── dmusicf.h
│ ├── dmusici.h
│ ├── dplay.h
│ ├── dplobby.h
│ ├── dsetup.h
│ ├── dsound.h
│ ├── dvp.h
│ ├── dxfile.h
│ ├── dxsdk.inc
│ ├── multimon.h
│ ├── rmxfguid.h
│ ├── rmxftmpl.h
│ └── rmxftmpl.x
└── DXSDK11/
├── Include/
│ ├── audiodefs.h
│ ├── comdecl.h
│ ├── D2D1.h
│ ├── D2D1Helper.h
│ ├── D2DBaseTypes.h
│ ├── D2Derr.h
│ ├── D3D10.h
│ ├── D3D10effect.h
│ ├── d3d10misc.h
│ ├── d3d10sdklayers.h
│ ├── D3D10shader.h
│ ├── D3D10_1.h
│ ├── D3D10_1shader.h
│ ├── D3D11.h
│ ├── D3D11SDKLayers.h
│ ├── D3D11Shader.h
│ ├── d3d9.h
│ ├── d3d9caps.h
│ ├── d3d9types.h
│ ├── D3Dcommon.h
│ ├── D3Dcompiler.h
│ ├── D3DCSX.h
│ ├── D3DX10.h
│ ├── d3dx10async.h
│ ├── D3DX10core.h
│ ├── D3DX10math.h
│ ├── D3DX10math.inl
│ ├── D3DX10mesh.h
│ ├── D3DX10tex.h
│ ├── D3DX11.h
│ ├── D3DX11async.h
│ ├── D3DX11core.h
│ ├── D3DX11tex.h
│ ├── d3dx9.h
│ ├── d3dx9anim.h
│ ├── d3dx9core.h
│ ├── d3dx9effect.h
│ ├── d3dx9math.h
│ ├── d3dx9math.inl
│ ├── d3dx9mesh.h
│ ├── d3dx9shader.h
│ ├── d3dx9shape.h
│ ├── d3dx9tex.h
│ ├── d3dx9xof.h
│ ├── D3DX_DXGIFormatConvert.inl
│ ├── Dcommon.h
│ ├── dinput.h
│ ├── dinputd.h
│ ├── dsconf.h
│ ├── dsetup.h
│ ├── dsound.h
│ ├── DWrite.h
│ ├── dxdiag.h
│ ├── DxErr.h
│ ├── dxfile.h
│ ├── DXGI.h
│ ├── DXGIFormat.h
│ ├── DXGIType.h
│ ├── dxsdkver.h
│ ├── gameux.h
│ ├── PIXPlugin.h
│ ├── rmxfguid.h
│ ├── rmxftmpl.h
│ ├── rpcsal.h
│ ├── X3DAudio.h
│ ├── xact3.h
│ ├── xact3d3.h
│ ├── xact3wb.h
│ ├── XAPO.h
│ ├── XAPOBase.h
│ ├── XAPOFX.h
│ ├── XAudio2.h
│ ├── XAudio2fx.h
│ ├── XDSP.h
│ ├── XInput.h
│ ├── xma2defs.h
│ ├── xnamath.h
│ ├── xnamathconvert.inl
│ ├── xnamathmatrix.inl
│ ├── xnamathmisc.inl
│ └── xnamathvector.inl
└── Lib/
├── x86/
│ ├── d2d1.lib
│ ├── d3d10.lib
│ ├── d3d10_1.lib
│ ├── d3d11.lib
│ ├── d3d9.lib
│ ├── d3dcompiler.lib
│ ├── D3DCSX.lib
│ ├── D3DCSXd.lib
│ ├── d3dx10.lib
│ ├── d3dx10d.lib
│ ├── d3dx11.lib
│ ├── d3dx11d.lib
│ ├── d3dx9.lib
│ ├── d3dx9d.lib
│ ├── d3dxof.lib
│ ├── dinput8.lib
│ ├── dsetup.lib
│ ├── dsound.lib
│ ├── dwrite.lib
│ ├── DxErr.lib
│ ├── dxgi.lib
│ ├── dxguid.lib
│ ├── X3DAudio.lib
│ ├── xapobase.lib
│ ├── xapobased.lib
│ ├── XAPOFX.lib
│ └── XInput.lib
└── x64/
├── d2d1.lib
├── d3d10.lib
├── d3d10_1.lib
├── d3d11.lib
├── d3d9.lib
├── d3dcompiler.lib
├── D3DCSX.lib
├── D3DCSXd.lib
├── d3dx10.lib
├── d3dx10d.lib
├── d3dx11.lib
├── d3dx11d.lib
├── d3dx9.lib
├── d3dx9d.lib
├── d3dxof.lib
├── dinput8.lib
├── dsound.lib
├── dwrite.lib
├── DxErr.lib
├── dxgi.lib
├── dxguid.lib
├── X3DAudio.lib
├── xapobase.lib
├── xapobased.lib
├── XAPOFX.lib
└── XInput.lib
```
# 概述与历史
我再次审视了是什么造就了原版 NinjaRipper 1.7.1 的伟大。我尝试分析它,逐步检查其行为,试图理解其注入机制,甚至进行了反编译,最终……我非常幸运!我得到了原作者 Black Ninja 的原版源代码!我开始刻苦地分析它,在一些额外的帮助下,很快我就能够开始重新创建它,它与原版极其相似,因此我决定将这个版本的 NinjaRipper 1.7.1(名为 Black Exploit,现名 Black Ripper)开源。我的目标是尽可能减少文件数量,具备良好的文档化结构,并且所有人都能通过几条命令轻松编译....\
### 文件说明:
• NinjaRipper.exe (C++ 或 C#) = 轻量级启动器。它只显示 UI,调用 CreateProcess(target, suspended) 并通过 APC.C# 注入 intruder.dll。\
• injhelper.exe 是一个微型的约 150 行 (C++ 或 C#) 的 EXE。它唯一的工作是:在命令行接收 pid、tid、dllpath,打开目标进程,并执行 APC 注入。它的存在仅仅是为了处理跨架构的情况(64 位启动器注入到 32 位游戏或反之)。它本质上只是 BlackRipper.cs 中包装在 Main() 里的 KInject.InjectApc() 方法。可以用任何语言编写,比如 C#。\
• intruder.dll = 整个提取引擎。单独编译,在目标游戏进程内运行。完全自包含。永远不需要与启动器进行通信。该文件仅限使用原生 C++。\
• d3dwrap.dll = 是一个完整的 DX 封装器(Wrapper)——它导出 d3d9.dll 的实际 API(如 Direct3DCreate9 等),将调用转发给真实的系统 DLL,并从其自身的 DllMain 中通过 LoadLibrary 加载 intruder.dll。这是针对无法使用 APC 注入的游戏的一种替代注入路径。该文件仅限使用原生 C++。
[支持所有重要的 DirectX 版本:DirectX 6, 7, 8, 9, 11....]
# 为什么不用 C# 或 Python?
完全使用 C# / Python 是一个非常糟糕的主意,C# 和 Python 无法在原生层面执行 APC 注入、vtable 钩子或 LdrLoadDll 拦截。因此,intruder.dll 和 d3dwrap.dll 必须使用 C++ 编写\
而且 intruder.dll 是在游戏进程内通过 APC 调用 LoadLibraryW 加载的。这意味着它必须是一个原生的 Win32 DLL —— .NET 程序集根本无法以这种方式加载。\
[尽管这是我最喜爱的编程语言,但存在这个主要问题,因此我决定仅将启动器和辅助程序使用 C# 编写]\
# Ripper 的工作原理是什么?(Intruder 注入)
它本质上是一个 DirectX 几何体/纹理提取器(VRAM 漏洞利用),用于捕获运行时游戏的 3D/2D 资产数据。\
模式 1 — Intruder 注入 (APC)\
你将游戏冻结启动,将 DLL 路径塞入其内存中,告诉它“在唤醒时加载它”,然后解除冻结。游戏对此毫无察觉。这适用于大多数游戏,但在带有反作弊系统(会监控挂起进程启动)的游戏上会失败。\
\
模式 2 — d3dwrap.dll (封装器)\
你不进行注入,而是伪装成 DirectX 本身。你将 d3dwrap.dll 复制到游戏文件夹中并将其重命名为 d3d9.dll。当游戏正常启动并调用 Direct3DCreate9 时,Windows 会加载你的假 d3d9.dll,而不是真正的那个。你的假 DLL 做两件事:加载真正的系统 d3d9.dll 并将调用转发给它,同时附带加载 intruder.dll。游戏完全察觉不到——它拿回了真正的 DirectX,只是带上了一个“搭便车”的。这适用于那些阻止 APC 注入,但无法阻止从其自身文件夹加载 DLL 的游戏。\
\
intruder.dll 一旦进入内部,实际上会做什么:\
它会监视游戏加载的每一个 DLL。当它发现 d3d9.dll 出现的那一刻,它会深入 DirectX 的内部函数表(COM vtable),并将 DrawPrimitive、DrawIndexedPrimitive、Present、SetTexture 的指针替换为自己的函数。从那一刻起,每次游戏绘制任何内容时,intruder.dll 的代码都会首先运行,读取顶点和索引缓冲区,将它们解包为浮点数,保存为 .rip 文件,将每个纹理渲染到离屏表面并将其保存为 .dds —— 然后将控制权交还给真正的 DirectX,以便游戏继续正常运行。玩家按下 F10,该标志开启,捕获一帧的几何体,标志随后关闭。这就是它的全部工作原理。\
### Intruder 模式 - 完整指南:
```
BlackRipper.exe & InjHelper.exe:
│
├─ 1. GetBinaryType(game.exe) → is it 32 or 64-bit?
├─ 2. CreateProcess(game, SUSPENDED) → game thread frozen at ntdll init
├─ 3. VirtualAllocEx + WriteProcessMemory → writes "intruder.dll" path into game RAM
├─ 4. QueueUserAPC(LoadLibraryW, thread, path) → schedules DLL load
└─ 5. ResumeThread → game thread wakes, processes the APC first
→ Windows calls LoadLibraryW("intruder.dll")
→ DllMain(DLL_PROCESS_ATTACH) fires
→ install() runs inside the GAME process
intruder.dll (inside the game process):
│
├─ 1. Hooks ntdll.LdrLoadDll → watches every DLL the game loads
├─ 2. Hooks CreateProcess* → propagates to child processes
│
├─ 3. Game loads d3d9.dll → LdrLoadDll hook fires
│ └─ create_KRipper9() → hooks DrawPrimitive, DrawIndexedPrimitive,
│ SetTexture, Present, CreateVertexBuffer...
│
├─ 4. Every frame: game calls Present()
│ └─ KIntruder::frameHandler() → polls F10/F9/F12 hotkeys
│
├─ 5. Player presses F10 (RipKey)
│ └─ fRipEnabled = 1 → next Draw* calls start capturing
│
├─ 6. Game calls DrawIndexedPrimitive()
│ ├─ Lock vertex buffer → read raw vertices
│ ├─ Lock index buffer → read raw indices
│ ├─ processIndexes*() → convert to triangle list
│ ├─ dumpVertSemantic() → unpack POSITION/NORMAL/TEXCOORD to floats
│ ├─ GetTexture(0..7) → render-to-texture trick → save as .dds
│ └─ saveRipFile() → write .rip file (header + faces + vertices)
│
└─ Player presses F10 again → fRipEnabled = 0, frameEnd()
[W.I.P.]
```
# 说明
```
Instructions:
Requirments: .NET 4.8, MSVC 1.4
// Build X86:
// 1. Build X86 Intruuder.dll (MSVC x86 Developer Command Prompt):
// cl /nologo /W3 /O2 /EHsc /LD /DUNICODE /D_UNICODE /D_WIN32_WINNT=0x0502
// intruder.cpp /Fe:intruder.dll
// /link /DLL d3d9.lib dxguid.lib kernel32.lib user32.lib
//
// 2. Build X64 BlackRipper.exe & InjHelper.exe (.NET 4-8):
// dotnet build injhelper.csproj -c Release -p:PlatformTarget=x86
// dotnet build BlackRipper_171.csproj -c Release -p:PlatformTarget=x86
//
// Build X64:\
// 1. Build X64 Intruder.dll (MSVC x64 Developer Command Prompt):
// cl /nologo /W3 /O2 /EHsc /LD /DUNICODE /D_UNICODE /D_WIN32_WINNT=0x0502
// /D_WIN64 intruder.cpp /Fe:intruder.dll
// /link /DLL d3d9.lib dxguid.lib kernel32.lib user32.lib
//
// 2. Build X64 BlackRipper.exe & InjHelper.exe (.NET 4-8):
// dotnet build injhelper.csproj -c Release -p:PlatformTarget=x64
// dotnet build BlackRipper_171.csproj -c Release -p:PlatformTarget=x64
```
标签:3D rip, Black Exploit, C++, DLL注入, Hook, NinjaRipper, 主机友好, 云资产清单, 内存提取, 图形学, 安全意识培训, 开源, 数据擦除, 模型提取, 注入器, 流量审计, 游戏黑客, 源码分析, 软件开发, 逆向工程