我开始一个保护/包装/粘合剂像项目。虚拟文件系统设计
的目标是当你有
- /图片/
- /音乐/
- 基地* .ini文件
- 的dll
- 前男友
你只需使用packer.exe就可以了,所有这些文件都被打包,加密和存储n由此产生的exe。
生成的exe然后创建一个透明的虚拟文件系统,如果找不到文件,它将回退到“真实”文件系统。
我媒体链接可以处理(不很精确地)从存储器等加载DLL但我有与HMM的钩一个问题..
现在,作为ProofOfConcept IM附接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等 的具有1M的问题与可用的数据提供的目标。
我应该创建一个假手柄,然后捕获并处理它?还是有太多的东西可能会在这种方法上出错?
这里是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;
}
我应该做一个codecave在这个过程中,推动的shellcode [编辑:对不起,我用许多这样的词语来形容不同的事情,但我想你将抓住我的补习:)]那里执行我的伪造代码?
或者可能注入一个DLL来处理int3s并通过加载器设置的异常处理程序将控制权交给它。然而,这可能会很棘手......该DLL必须在虚拟文件系统!所以我将不得不在任何其他初始化发生之前手动加载它。
我想在最终版本中完成删除调试器。只会造成问题,严重影响项目的保护部分。
ProofOfConcept(从内存中播放mod文件的低音dll)完成并工作.o0 – n00b 2012-03-23 01:21:52