Tamam, burada Chrome ile korumalı alan koduyla ilgili bulduğum şey.
İlk önce, get the chromium source code'a gitmeniz gerekecek. Bu büyük, ve almak için biraz zaman alacaktır, ama hala kullanılabilir sonuçlar hala layout ödeme için herhangi bir güvenilir kısayol bulmak için henüz. Alos, bu sayfadaki talimatları takip etmenizin çok önemli olduğunu ÇOK KAPALI. Google ekibi ne yaptığını biliyor ve işe yaramaz adımlara meraklı değil. Bu sayfadaki her şey gerekli. Evet. Her şey.
Şimdi, kaynağı aldığınızda, sandbox'ı kullanmak için aslında bütünüyle (saatlerce sürebilir!) Krom yapmak zorunda değilsiniz.Bunun yerine size, bağımsız olarak oluşturulabilen ayrı bir sanal alan çözümü (sandbox klasöründe bulunur) vermek için yeterince iyiydiler. Bu projeyi oluşturun ve her şeyin derlendiğinden emin olun. Eğer yaparsa, harika! Yapmazsa, yapı sayfasındaki adımları izlemediniz, değil mi? Kafanı utançta tut ve aslında bu sefer git.
Artık her şey ilgi ana noktasını inşa etti ... bekleyeceğim, Üzülmeyin sandbox_poc projesi ("poc" Kavramın = Kanıtı) 'dir. Bu proje temel olarak, korumalı bir ortamda belirli bir giriş noktasında keyfi bir dll başlatan bir sanal alan etrafında minimum bir GUI sarmalayıcısıdır. Bir sanal alan oluşturmak ve kullanmak için gereken tüm adımları gösterir ve sahip olduğunuz en iyi referans hakkındadır. Sık sık bakın! Eğer kod bakarken
muhtemelen aslında kum havuzu kod kendisi olduğunu göreceksiniz. Bu, tüm sanal alan örnekleriyle çok yaygındır ve according to this thread (güncel olmayabilir) muhtemelen şu anda sandbox'ın çalıştığı tek çalışma şeklidir. Konu, kişinin teorik olarak ayrı bir işlemi nasıl kısıtlayacağını anlatıyor, ancak denemedim. Sadece güvenli olmak için, kendi kendine çağrı yapan bir uygulama olması "bilinen iyi" yöntemidir.
sandbox_proc pek çok statik kütüphanelerini içerir, ancak bunlar çoğunlukla onlar inşa ettik örnek UI için görünmektedir.
sandbox.lib base.lib dbghelp.lib
olsa projeye bakarak tamamen belli değil başka dependancy var ve ben en uzun üzerinde yakalandılar ne: minimal kum havuzu için gerekli gibi görünüyor buldum sadece olanlardır. Korumalı alan çözümünü oluşturduğunuzda, çıktı dosyalarından biri "wowhelper.exe
" olmalıdır. Herhangi bir yerde asla belirtilmese de, bu dosya, korumalı olduğunuz yürütülebilir dosyayla aynı dizine kopyalanmalıdır! Değilse, kodunuzu sanallaştırmaya yönelik girişimleriniz her zaman genel bir "dosya bulunamadı" hatasıyla başarısız olur. Ne olduğunu bilmiyorsanız, bu çok sinir bozucu olabilir! Şimdi, (WOW 16/32/64bit arasındaki birlikte çalışma uygulamaları için ortak bir kısaltmadır) wowhelper şartı ile bir ilgisi olabilir, Windows 7 64bit geliştiriyorum ama test iyi bir yol olmadığını şimdi. Lütfen başka bir şey öğrenirse bana haber verin!
Ve buda çevre şeyler, burada smaple kod biraz olacak sizin bu! Burada çocuk işleminde wcout kullanmamıza rağmen, sanal alanda çalışırken herhangi bir konsol çıkışı göremediğini lütfen unutmayın. Bunun gibi herhangi bir şey, IPC yoluyla ana sürece iletilmelidir.
#include <sandbox/src/sandbox.h>
#include <sandbox/src/sandbox_factory.h>
#include <iostream>
using namespace std;
int RunParent(int argc, wchar_t* argv[], sandbox::BrokerServices* broker_service) {
if (0 != broker_service->Init()) {
wcout << L"Failed to initialize the BrokerServices object" << endl;
return 1;
}
PROCESS_INFORMATION pi;
sandbox::TargetPolicy* policy = broker_service->CreatePolicy();
// Here's where you set the security level of the sandbox. Doing a "goto definition" on any
// of these symbols usually gives you a good description of their usage and alternatives.
policy->SetJobLevel(sandbox::JOB_LOCKDOWN, 0);
policy->SetTokenLevel(sandbox::USER_RESTRICTED_SAME_ACCESS, sandbox::USER_LOCKDOWN);
policy->SetAlternateDesktop(true);
policy->SetDelayedIntegrityLevel(sandbox::INTEGRITY_LEVEL_LOW);
//Add additional rules here (ie: file access exceptions) like so:
policy->AddRule(sandbox::TargetPolicy::SUBSYS_FILES, sandbox::TargetPolicy::FILES_ALLOW_ANY, "some/file/path");
sandbox::ResultCode result = broker_service->SpawnTarget(argv[0], GetCommandLineW(), policy, &pi);
policy->Release();
policy = NULL;
if (sandbox::SBOX_ALL_OK != result) {
wcout << L"Sandbox failed to launch with the following result: " << result << endl;
return 2;
}
// Just like CreateProcess, you need to close these yourself unless you need to reference them later
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
broker_service->WaitForAllTargets();
return 0;
}
int RunChild(int argc, wchar_t* argv[]) {
sandbox::TargetServices* target_service = sandbox::SandboxFactory::GetTargetServices();
if (NULL == target_service) {
wcout << L"Failed to retrieve target service" << endl;
return 1;
}
if (sandbox::SBOX_ALL_OK != target_service->Init()) {
wcout << L"failed to initialize target service" << endl;
return 2;
}
// Do any "unsafe" initialization code here, sandbox isn't active yet
target_service->LowerToken(); // This locks down the sandbox
// Any code executed at this point is now sandboxed!
TryDoingSomethingBad();
return 0;
}
int wmain(int argc, wchar_t* argv[]) {
sandbox::BrokerServices* broker_service = sandbox::SandboxFactory::GetBrokerServices();
// A non-NULL broker_service means that we are not running the the sandbox,
// and are therefore the parent process
if(NULL != broker_service) {
return RunParent(argc, argv, broker_service);
} else {
return RunChild(argc, argv);
}
}
Diğer tüm meraklı kodlayıcıları kum havuzuna almak için bu kadarı yeterli! İyi şanslar!
Bilginize: Sonunda bir kum havuzu (deney lot sonra) çalıştıran kazanılmış ve burada benim bulguları göndeririz Ben bir dolaşmayı ya da iki işe sonra gelmiş. – Toji
Lütfen onları gönderin :) –
Üzgünüz, hala üzerinde çalışıyor. Yapmak istediğim son şey yanıltıcı veya kırık bir şey göndermek. Yine de yayınlamayı planlıyorum. İlginiz için teşekkürler! – Toji