安全--中间人攻击--cSpolit:
功能:
1 网络拓扑结构
2 指纹识别操作系统和开放端口
3 在本地网络之外添加你的主机
4 完整的路由追踪
5 完整 Metasploit 框架 RPCd(远程过程调用守护程序)
查找已知的漏洞
。。。
6 伪造TCP/UDP数据包
7 执行MIMT(中间人攻击):
图片、文字、视频替换
js注入
密码探测
抓取网络流量文件
实时操作替换图片,文字,注入js等到web网页
DNS欺骗,重定向到不同的域名
断开已经存在的连接
重定向到另一个地址
会话劫持:监听未加密的cookies和克隆到Web会话中
使用到的第三方库:
commons-compress:
Apache commons-net:
library implements the client side of many basic Internet protocols.The purpose of the library is to provide fundamental protocol access, not higher-level abstractions
java-semver:
unbescape:
unbescape is a Java library aimed at performing fully-featured and high-performance escape and unescape operations for:HTML、XML、JS...
juniversalchardet:
juniversalchardet is a Java port of 'universalchardet', that is the encoding detector library of Mozilla.
XZ:
XZ Utils is free general-purpose data compression software with a high compression ratio
ACRA:
ACRA is a library enabling Android Application to automatically post their crash reports to a report server
HamCrest:
Matchers that can be combined to create flexible expressions of intent
使用git的子模块技术:
https://github.com/cSploit/android/issues/30
https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97
Book:
Video:
怎么编译modle:
https://github.com/cSploit/android.native/blob/master/README.md
native-module分析:
APR:
Apache可移植运行时( Apache Portable Runtime,简称APR)是Apache HTTP服务器的支持库,提供了一组映射到下层操作系统的API
APRUtil:
一些工具方法
arpspoof:
Arpspoof是一个非常好的ARP欺骗的源代码程序.
bdb:
cSploitClient:
cSploitCommon:
cSploit common library
cSploitDaemon:
守护进程
cSploitHandlers:
ettercap-ng:
ARP欺骗
firebird:
跨平台关系型数据库。
用C和C++开发
freetds:
为unix和linux能够访问本地Microsoft SQL Server提供的一些列库的集合
fusemounts
FUSE:Filesystem in Userspace
突破权限约束
hydra
linux暴力密码在线破解工具
icu4c:
解决国际化的问题
include
libbthread:
bionic(模仿) library that provide some missing posix(可移植) threading function
libcares:
c-ares is a C library for asynchronous DNS requests (including name resolves)
libcurl:
跨平台网络协议库,支持http(s)、ftp等
libedit
命令行帮助工具,例如补全
libexpat
XML parser
libiconv:
iconv是一个计算机程序以及一套应用程序编程接口的名称。它的作用是在多种国际编码格式之间进行文本内码的转换。
libidn
Libidn is a package for internationalized string handling based on the Stringprep, Punycode, IDNA and TLD specifications.
libifaddrs
An implementation of getifaddrs() for Android.
libmysqlclient
mysql相关
libncp
a fast file copy tool for LANs
libneon:
neon is an HTTP and WebDAV client library, with a C interface.
libnet:
libnet是一个小型的接口函数库,主要用C语言写成,提供了低层网络数据包的构造、处理和发送功能。
libpcap:
libpcap是一个网络数据包捕获函数库,功能非常强大,Linux下著名的tcpdump就是以它为基础的。
libpcre:
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。
libreadline:
GNU readline是一个开源的跨平台程序库,提供了交互式的文本编辑功能。
libssh:
SSH 为 Secure Shell 的缩写,
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
libtommath:
libtommath是一个大数算法库。
libxml2
xml解析
libxslt:
XSL 指扩展样式表语言(EXtensible Stylesheet Language)
libyaml:
YAML是“另一种标记语言”的外语缩写,但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。
ncurses
计算机语言,指的是提供字符终端处理库。
network-radar
it's completely written in C, using threads for faster execution and libcares for asynchronous name resolving.
nmap:
Nmap Free Security Scanner, Port Scanner, & Network Exploration Tool.
openldap:
OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。
openssl:
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
postgresql:
PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。
ruby:
Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言
sqlite:
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
subversion:
svn
tcpdump:
TcpDump可以将网络中传送的数据包完全截获下来提供分析
thomson
unixODBC:
unixodbc是一个来连接数据库的组件。
zlib:
zlib是提供数据压缩用的函式库。
项目运行前准备工作:
1 下载:
git clone [email protected]:cSploit/android.git
2 cSploit/jni为空:
git submodule update --init --recursive
多层依赖,需要执行多次
3 编译:
下载ndk,配置环境变量
执行编译命令 ndk-build
4 修改gradle-wrapper.properties(如果gradle可以正常下载,可以跳过此步骤):
distributionUrl=http://om0taayby.bkt.clouddn.com/gradle-4.6-all.zip
5 在model的build.gradle文件中配置libs(在android{ }中):
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
6 直接Run就可以了。哈哈
阅读代码遇到的问题:
1 核心未安装, 应用将仅检查更新:
查找 /data/user/0/org.csploit.android/files/VERSION是否存在,如果不存在就初始化失败,提示核心未安装
使用Core version:
/data/app/org.csploit.android-2/base.apk
/vendor/lib
2 如何开始发现主机,并把扫描结果展示到listview:
更新到Listview:
Adapter实现了Observer方法
3 jni目录为空:
命令执行:
git submodule update --init --recursive
多层依赖,需要执行多次
参考链接:http://stackoverflow.com/questions/1030169/easy-way-pull-latest-of-all-submodules
4 make: *** No rule to make target:
使用旧版ndk,包含toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc就可以正常编译。
局域网扫描:
1 传入IP和子网掩码获取整个局域网所有IP
2 获取ip公网IP:
2.1 curl members.3322.org/dyndns/getip
2.2 traceroutew www.baidu.com
2.3 获取路由器路由表
参考
Apach-Net(非常重要,里面有大量的工具类)
不一样的网站-onlyZero |
不一样的网站-bit.no |
不一样的网站-theshadowbrokers.bit
MAC_OS_BUILD_ENVIROMENT
代码分析:
源码阅读步骤:
11.20日
上午:
core包内源码
下午:
events
gui
helpers
net:
datasource
http
proxy
server
metasploit
plugins:
主要功能的UI在这里
services:
tools:
arpspoof
Ettercap:
Ettercap is a comprehensive suite for man in the middle attacks
TCPDUMP:
TcpDump可以将网络中传送的数据包完全截获下来提供分析。
network-radar:
快速发现主机
wifi:
...
Metasploit:
Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报
Armitage:
Metasploit的图形管理工具。
11.21日 :
上午:
JNI基础
下午:
JNI基础
JNI的调试步骤:
LLDB(LLDB is a next generation, high-performance debugger)
11.22日:
上午:
Native log输出:
1 在Android.mk文件中添加:
:LOCAL_LDLIBS := -llog
2 在要使用LOG的cpp文件中加入:
#include
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "keymatch", __VA_ARGS__)
3 ndk-build生成新so库后,即可正常log输出
11.23日:
怎么执行命令?
怎么返回结果?
JNI-静态注册和动态注册
静态注册:
包名+方法名
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
书写不方便
动态注册:
在JNI_ONLOAD()方法中为每一个方法进行注册
参考:
offensive-security:安全认证平台
Kali | Kali-tools
metasploit
Armitage
NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)
-------------------2017新的开始---------------
第一周
代码阅读:
调用顺序:
cSploitClient--notifier.c--notifier
cSploitClient--event.c--send_event
--->cSploitClient--cache.c--init_csploit_core_childmanager_cache
--->ChildManager.onEvent
-->ChildManager.dispatchEvent
-->NetworkRadar.HostReceiver.onEvent
-->NetworkRadar.onHostFound
-->System.addOrderedTarget
结论:
接收arp请求,更新设备列表
C调用顺序:
notifier.c:
notifier-->on_message-->on_netradar-->send_event
---->ChildManager.onEvent111
结构体:
typedef struct list {
node *head, *tail;
} list;
typedef struct node {
struct node *next;
} node;
Java和C的相互调用:
C调用Java的方法:
CallObjectMethod
Java调用C的方法:
1 静态注册:
2 动态注册
JNI日志及调试:
1 添加log.c头文件:
#include
#define LOG_TAG "cSploitClient"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , LOG_TAG, __VA_ARGS__)
2 修改Android.mk文件:
添加:
LOCAL_LALIBS+=--llog
3 定义log.c文件:
Debug调试相关:
gradle-experimental:
可以在不用编写.mk文件的情况下进行ndk开发
第二次阅读源码
MainActivity-->MainFragment-TargetAdapter-->System.getTargets()-addOrderedTarget-->NetworkRadar.Receiver
MainActivity-->MainFragment-->Target.getDescription()--Endpoint.getHardwareAsString()-Endpoint的构造方法
Endpoint是Target的一个成员变量
初始化Target时(构造方法: Target(InetAddress address, byte[] hardware)),初始化了成员变量Endpoint,Endpoint构造方法中初始化了Mac地址
查找Target(InetAddress address, byte[] hardware)在哪些类中调用了
获取mac地址方法汇总:
1 调用Android的API: WifiManager:
public String getLocalMacAddress() {
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
return info.getMacAddress();
}
2 :读address文件
cat /sys/class/net/wlan0/address
3 :
调用android 的API: NetworkInterface. getHardwareAddress ()(考虑权限问题;内部实现就是读取address文件)
该API的level为9,只有android 2.3以上才有该接口
4 调用java 的方法: nbtstat/arp,一般android不支持这两个命令
5 调用Linux的busybox:
busybox ifconfig,查看结果中的HWaddr
6 根据IP地址获取MAC地址 :
参考:
https://www.cnblogs.com/Amandaliu/archive/2011/11/06/2238177.html
http://blog.csdn.net/baidu_34012226/article/details/72627564
System.reset()[mNetwork.getLocalHardware()]-System.scanThemAll()-->NetworkRadar.onNewTargetFound.synScan-->Nmap.async-->Tool.async()--ChildManager.async()[此处传入的Receiver的属性Target就带有mac地址]