大佬教程收集整理的这篇文章主要介绍了c – 虚拟文件系统设计,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
目标是当你有一个完整的应用程序目录
> / images /
> / music /
> base * .ini文件
> dlls
> exes
你只需在其上使用packer.exe,所有这些文件都打包,加密并存储在生成的exe中.
然后,生成的exe会创建一个透明的虚拟文件系统,如果找不到文件,它将回退到“真实”文件系统.
我已经可以处理(不是非常准确)从内存加载dll等,但我有一个问题与hmm钩子..
现在,作为ProofOfConcept我将debbuger(用c编写)附加到target.exe
看起来有点像
======= Started [target.exe] ======= > Placing breakpoint on EP : 0x401130 Process started Loaded module : [target.exe] Loaded module : [ntdll.dll] Loaded module : [kernel32.dll] [...] Break point at [0x401130] > Restored EP byte. Loaded module : [bass.dll] Break point at [0x760fcc4e] Found set bp : kernel32!CreateFileW [!] CreateFileW CallBACk Function : Filename : C:\Users\user\Desktop\cppve\loader\bin\Debug\target.exe Access : 0x80000000 Return Addr: 0x741b91e6 > Re-setTing bp at [0x760fcc4e] Break point at [0x760fcc4e] Found set bp : kernel32!CreateFileW [!] CreateFileW CallBACk Function : Filename : .\beyond_v.mod Access : 0x80000000 Return Addr: 0x760fcfa0
我正在调试器中处理断点,例如CreateFileW ReadFile等
我在向目标提供可用数据时遇到问题.
我应该创建一个假手柄,然后抓住并处理它?或者有太多的东西可以用这种方法出错?
这是CreateFileW的示例回调函数
void callBACk_createfilew(COntexT* ct){ //stub cout<<"[!] CreateFileW CallBACk Function :"<<endl; void* returnaddr=MemReadDwordPtr(hProcess,(void*)ct->Esp); String fn=MemReadCString(hProcess,MemReadDwordPtr(hProcess,(void*)ct->Esp+4),truE); void* access=MemReadDwordPtr(hProcess,(void*)ct->Esp+8); void* sharemode=MemReadDwordPtr(hProcess,(void*)ct->Esp+12); void* dwCreationDisposition=MemReadDwordPtr(hProcess,(void*)ct->Esp+20); void* dwFlagsAndAttributes=MemReadDwordPtr(hProcess,(void*)ct->Esp+24); cout<<" Filename : "<<fn<<endl; cout<<" Access : "<<(void*)access<<endl; cout<<" Return Addr: "<<(void*)returnaddr<<endl; if(fn.compare(".\\beyond_v.mod")==0){ // this is wrong,we need to call it from the target process... HANDLE ret=CreateFileA(".\\_beyond_v.mod",(DWORD)access,(DWORD)sharemode,NULL,(DWORD)dwCreationDisposition,(DWORD)dwFlagsAndAttributes,null); ct->Esp+=0x20; ct->Eax=(DWORD)ret; ct->Eip=(DWORD)returnaddr; }
我应该在这个过程中做一个编解码器并推送sHellcodes [编辑:对不起,我用这些词来描述不同的东西,但我想你会抓住我的想法:)]那里执行我的伪造代码?
或者可能注入一个将处理int3并通过加载程序设置的异常处理程序将控制传递给它的DLL?然而,这可能是棘手的…… dll必须在虚拟文件系统中!所以我必须在任何其他初始化之前手动加载它.
我希望,在最终版本中,完全删除调试器.它只会引起问题并严重影响项目的保护部分.
以上是大佬教程为你收集整理的c – 虚拟文件系统设计全部内容,希望文章能够帮你解决c – 虚拟文件系统设计所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。