Подход к проверке памяти для решения проблем CTF - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь научиться обращать приложения, играющие с вызовами CTF.

Я нашел этот вызов , который представляет собой APK, требующий имя пользователя и пароль (которые соответствуют флаг). После разборки приложения легко найти имя пользователя, спрятанное в ресурсах. Чтобы проверить правильность пароля, вместо этого источник java вызывает функцию, которая определена в общей библиотеке, также включенной в приложение.

Теперь, после проверки этой .so (общей библиотеки) с помощью Ghidra Легко сказать, что для проверки правильности пароля код сначала «расшифровывает» некоторые данные в его памяти, чтобы определить реальный пароль, а затем вызывает strcmp как для моего прохода, так и для правильного прохода.

Наивный подход к решению этой проблемы состоит в том, чтобы попытаться понять и затем повторить «деобфускацию», которую .so делает на правильном проходе, и все. Но это только одно решение. Я хотел бы отладить приложение, используя gdb (я почти полностью выполнил это руководство и оно, похоже, работает), а затем поместить breakpoint в библиотеку перед strcmp и осмотрите стопку, чтобы напечатать правильный пароль.

Однако я, похоже, не могу найти какое-либо соответствующее местоположение (разделы кода) или установить какую-либо точку останова. Есть ли способ архивировать то, что я пытаюсь сделать? или я живу только в своих собственных фантазиях?

Спасибо за потраченное время.

...