프로젝트와 같은 보호자/포장기/바인더를 시작합니다.가상 파일 시스템 디자인
목표는 당신이
- /이미지/
- /음악/
- 기본 * .INI 파일
- DLL을
- 예전 친구
그냥 packer.exe를 사용하면이 모든 파일이 압축되어 암호화되어 저장됩니다. 결과로 나오는 exe.
그런 다음 결과로 나오는 exe는 파일을 찾을 수없는 경우 "실제"파일 시스템으로 되돌아가는 투명한 가상 파일 시스템을 만듭니다. 지금
내가 allready 처리 수 (없는 매우 정확하게) 메모리 등으로부터 로딩 DLL을하지만이 흠 후크에 문제가..
하는 debbuger 부착용 ProofOfConcept 메신저로서 (C++로)에 target.exe는
내가 유용한 데이터와 타겟을 공급 CreateFileW에서 ReadFile 등 IM 갖는 문제점 같은 것들을 디버거 중단 처리하고 다소
======= 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
같다.
가짜 핸들을 만들어 잡아서 처리해야합니까? 또는 그 접근법에 매우 잘못 될 수있는 너무 많은 것들이 있습니까? 여기
는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을하고 쉘 코드를 [편집을 추진한다 CreateFileW
에 대한 샘플 콜백 함수입니다 : 미안 해요, 내가 다른 일을 설명하기 위해이 말을 많이 사용하지만 난 당신을 생각 나는 무엇을 잡을 것인가?] 내 위조 된 코드를 실행하려면?또는 int3s를 처리하고 로더가 설정 한 예외 처리기를 통해 제어를 전달하는 DLL을 삽입 할 수 있습니까? 그러나 그것은 dll이 가상 파일 시스템에 있어야한다는 까다로운 proove 수 있습니다! 그래서 다른 초기화 작업이 일어나기 전에 손으로로드해야합니다.
나는 최종 버전에서 디버거를 완전히 삭제하려고합니다. 그것은 단지 문제를 일으키고 프로젝트의 보호자 부분을 진지하게 타파 할 것입니다.
ProofOfConcept (메모리에서 mod 파일을 재생하는 저음 dll) 완전하고 작동하는 .o0 – n00b