преамбула: проект на Xamarin.Forms (да-да, c# и кроссплатформа).
инфосеки смогли найти, что после логаута из апки в памяти остается висеть логин + пасс в читаемом виде. Прям плейн джейсон объект {"user":"xxx","password":"yyy", "domain":"zzz"}. А это прям конкретный DTO который мы сами в прямом виде вроде не кешируем.
нашли они вот как:
есть вот такой тул -
https://frida.re/ позволяет работать и "хакать" память приложений.
так же есть вот такие скрипты для фриды, которые прямо дампают память.
https://github.com/Nightbringer21/fridumpпервая проблема с чем столкнулись: попробовали тулы - аппа крешит при чтении и логинов паролей нет. стоит отметить что вытянуть из инфосеков как и что они делают близко к невозможному.
через долгую цепочку общения оказалось что у инфосеков в целом то же самое, но имеется огромный пул девайсов. так что они тупо перебирают девайсы (и версии оси, рутов) пока не будет работать.
в итоге получилось подобрать джейлбрейк на айос. AltStore здесь помог! Unc0ver ставится через танцы с плагином к Mail app (!).
читаем память - иииии, вот оно. повторили результат, видим пароли в памяти.
тут, если честно, слегка опешили. наверн просто кодить не умеем.
https://pastebin.com/vSJtbALH вот тут примерный код самого логина.
GC.Collect() не помогает, занулять всё что можно не помогает. :(
весь loginRequest прям никогда не удаляется из памяти.
собственно, решение такое: заинлайнить loginRequest, чтобы не было лишних ссылок на объект (переключение контекста при await тоже считается) ¯\_(ツ)_/¯
ну и это я пропустил всякие странности инфосеков про то, что скрипт дампа они изначально запускали до самой попытки логина (т.е. искали в памяти пароль который у них и так был). что не является реальным кейсом, типо стырили телефон с аппой в памяти.