destiny
hi I got warnings on all source files building with -DWITH_HARDENING=ON
destiny
warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Wcpp]
destiny
fixed by edit build/CMakeLists.txt
destiny
in if(WITH_HARDENING) section add -O to CMAKE_CXX_FLAGS
destiny
orignal please add optimization compiler flag to -DCMAKE_BUILD_TYPE=Release
orignal
I'm not familiar woth cmake
orignal
create a PR
destiny
I know nothing about cmake aswell, I only know how I fixed but maybe it's not proper :(
orignal
I use plane Makefile and it supports release version
destiny
ah there are many ways to build, I thought cmake only
orignal
type make DEBUG=N
destiny
I see and in Makefile CXXFLAGS available for CIA protection flags -fPIC -fstack-protector, perfect thank you
agent_fsb
у вас в i2psam дестанейшены херово валидируются
agent_fsb
если в конце будет \n, это приведёт к неопределённому поведению
agent_fsb
причём, судя по всему, оно идёт со стороны роутера
orignal
а не пох?
agent_fsb
Не боитесь, что роутер может случайно приватные ключи выплюнуть?
agent_fsb
откуда-то же эти рандомные значения берутся
agent_fsb
раз их не либа производит, значит этим занимается роутер
orignal
так ты про i2psam или роутер?
orignal
если про роутер рассказывай сценарий
orignal
если i2psam то пох
agent_fsb|2
если через i2psam подключиться к дестанейшену, который заканчивается на \n, то на сервер придут рандомные данные. При этом данные на всём своём пути до сокета остаются корректными
orignal
ну и в чем проблема?
orignal
ну создатся кривой дестинейшин
orignal
я не вижу тут модели угрозы
agent_fsb|2
так проблема в том, что клиент подключается к дистанейшену и отсылает рандомные данные
orignal
if (!keys.FromBase64(destination))
orignal
{
orignal
SendMessageReply(SAM_SESSION_STATUS_INVALID_KEY, true);
orignal
а причем тут роутер?
orignal
i2psam это не наша либа
agent_fsb|2
откуда тогда на сервер поступают кривые данные?
orignal
ты о какой команде говоришь? STREAM CONNECT?
agent_fsb|2
да
agent_fsb|2
вот пример кода
orignal
ну и что там не так?
agent_fsb|2
мне в неткэт такая строка прилетает: "4JHEMsRrx2~zaa"
agent_fsb|2
откуда последние 2 а взялись я понимаю
orignal
я не понимаю ко мне то какой вопрос
agent_fsb|2
откуда в пришедшем сообщении взялось "4JHEMsRrx2~z"?
orignal
так погоди
orignal
а ты сессию создал?
agent_fsb|2
да
orignal
по коду не видно
agent_fsb|2
SAM::StreamSession s("eepget");
agent_fsb|2
как бы он без созданной сессии к дистанейшену подключился?
orignal
там же куча параметров
orignal
так он и не поключается видать
orignal
смотри сюда
agent_fsb|2
class StreamSession : public SAMSession
agent_fsb|2
public:
agent_fsb|2
StreamSession(const std::string &nickname,
agent_fsb|2
const std::string &SAMHost = SAM_DEFAULT_ADDRESS,
agent_fsb|2
uint16_t SAMPort = SAM_DEFAULT_PORT_TCP,
agent_fsb|2
const std::string &destination = SAM_GENERATE_MY_DESTINATION,
agent_fsb|2
const std::string &i2pOptions = SAM_DEFAULT_I2P_OPTIONS,
agent_fsb|2
const std::string &signatureType = SAM_SIGNATURE_TYPE);
orignal
как оно долно работать
agent_fsb|2
эта куча параметров имеет дефолтные значения
orignal
ну допустим
agent_fsb|2
поэтому они не обязательны
orignal
ты созданную сессию в веб консоли видишь?
agent_fsb|2
да
orignal
что ты написал вместо destination?
orignal
s.connect("destanation\n", false);
orignal
вот здесь
agent_fsb|2
дестанейшен до неткэта
orignal
а именно в каком виде
agent_fsb|2
я поставил нэткэт слушать, и сделал ему туннель в tunnels.conf
orignal
base64 от адреса?>
agent_fsb|2
да
agent_fsb|2
если собираешься код тестить, то лучше цикл убери
orignal
и он у тебя ущел с \n после чего ты утверждаешь что в ответ пришла какая то зрень вместо ошибки
orignal
не собираюсь
agent_fsb|2
да
orignal
так а когда без \n нормально соединяется?
agent_fsb|2
да
agent_fsb|2
если хочешь, я могу видос записать
orignal
не надо
orignal
в пришедшем куда? на сервер?
agent_fsb|2
да
orignal
static const char* streamConnectFormat = "STREAM CONNECT ID=%s DESTINATION=%s SILENT=%s\n";
orignal
так понятно?
agent_fsb|2
что понятно?
orignal
у тебя \n после DeSTINATION это конец соощения
orignal
все что после это стало восприниматься как данные
orignal
адресованные той стороне
agent_fsb|2
как-то это странно
orignal
почему?
agent_fsb|2
почему тогда на сервер не пришло SILENT=%s\
orignal
вот это уже бага
agent_fsb|2
b hfpdt jnrhsnbt cjtlbytybz yt cjplf`n yjdsq cjrtn
agent_fsb|2
и разве открытие соединения не создаёт новый сокет
agent_fsb|2
через который все данные идут на дестанейшен
orignal
ты открываешь сокет
orignal
в него пишешь STREAM CONNECT
orignal
потом в него же идут данные
orignal
сразу после STREAM CONNECT
orignal
естественно ты должен снчала дождаться ответа а уже потом писать
orignal
а когда сразу после него в принципе тоже можно если идет неправильно я починю
agent_fsb|2
тогда почему эти данные всегда разные?
orignal
потому что бага
orignal
это я поправлю
orignal
if (rem > 0) // handle follow on data
orignal
{
orignal
memmove (m_Buffer, buf + len + 1, rem); // buf is a pointer to m_Buffer's content
orignal
m_BufferOffset = rem;
orignal
}
orignal
это вот отсюда берется
orignal
я проверю
orignal
agent_fsb|2 я нашел багу
orignal
счас проверю и закоммичу
agent_fsb|2
а в чем проблема была?
orignal
неправильно длина параметров считалась
agent_fsb|2
тоесть всётаки был выход за пределы буффера?
orignal
нет
agent_fsb|2
ну и отлично
agent_fsb|2
я спать
orignal
в буффере том данные от SESSION CREATE остались
orignal
вот они и выдавались
orignal
погодит
orignal
а проверять кто будет? ))
agent_fsb|2
ща затещщу
agent_fsb|2
в какую ветку коммит был?
orignal
твой сценарий то валидный
orignal
просто должно передаваь после \n как есть
orignal
забирай последний коммит
agent_fsb|2
из openssl?
orignal
естествено
orignal
то есть павильный сценарий тебе должно на сервер прилетать SILENT=
agent_fsb
теперь нормально работает
agent_fsb
всё
agent_fsb
всем спокойной ночи
orignal
редкий сценарий