Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 20 Diciembre 2015, 11:18 AM

Título: Extension spoofing C++, problema multibyte
Publicado por: Kaxperday en 20 Diciembre 2015, 11:18 AM
Código (cpp) [Seleccionar]

wchar_t t = 0x202E;
wstring w;
w += 0x202E;
wstring b = L"C:\\Users\\Usuario\\Desktop\\prueba" + w + L".exe";
_wfopen(b.c_str() , L"wt");


Inserto el carácter multibyte de "puntero de derecha a izquierda", para hacer el spoofing sin éxito, trabjo con wchar_t (16 bits), la cadena antes de llamar a wfopen() se muestra como:

"C:\Users\Usuario\Desktop\prueba"

¿qué pasa?, un saludo.
Título: Re: Extension spoofing C++, problema multibyte
Publicado por: Eternal Idol en 20 Diciembre 2015, 11:26 AM
¿Ya miraste el archivo creado o no?
Título: Re: Extension spoofing C++, problema multibyte
Publicado por: Kaxperday en 20 Diciembre 2015, 12:23 PM
Esto ya es otra cosa:

Código (cpp) [Seleccionar]

wchar_t t = 0x202E;
wstring w;
w += 0x202E;
wstring b = L"C:\\Users\\Usuario\\Desktop\\prueba" + w + L"fdp.exe";
wcout << b; system("pause");
_wfopen(b.c_str() , L"wt");


Si que funciona, pero aún así ¿no sabrás alguna otra manera de hacerlo sin que aparezca el "exe" en el nombre? (supongo que no habrá que usar el carácter derecha a izquierda claro).

Saludos y gracias por la respuesta socio.

Edito: Mejor así:

Código (cpp) [Seleccionar]

bool extension_spoofing(wstring _direccion, wstring _extension){
if (_direccion.find(L".exe") != wstring::npos){
wstring temporal = _direccion;
temporal = wstring(temporal.rbegin(), _extension.rend());
temporal.erase(temporal.find(L".exe"), _extension.length());
temporal += (wchar_t)0x202E + _extension + L".exe";
return !_wrename(_direccion.c_str(), temporal.c_str());
}
return false;
}


Código (cpp) [Seleccionar]

bool extension_spoofing(wstring _direccion, wstring _extension){
if (_direccion.find_last_of('.') != wstring::npos){
wstring direccion = _direccion;
wstring extension = direccion.substr(direccion.find_last_of('.') + 1, direccion.length());
direccion.erase(direccion.find_last_of('.'), extension.length() + 1);
direccion += (wchar_t)0x202E + wstring(_extension.rbegin(), _extension.rend()) + L"." + extension;
return !_wrename(_direccion.c_str(), direccion.c_str());
}
return false;
}


Este último a veces falla y cambia de extensión a cualquier tipo de archivo, pero bueno no le voy a dar más vueltas, solo quería ver que se podía hacer y funciona muy bien, lo único que tiene "exe" en el nombre, pero es lo de menos. Un saludo!!.

Enjoy, ¡saludos!