android逆向知识集
android逆向知识集
抓包
我们在逆向过程中,需要使用抓包技术来对应用的数据交互进行获取:
常见的抓包类型:
- 中间人抓包
- 单向验证
- 双向验证
- VPN抓包
- 网络层
- 路由层
- hook抓包
- http网络请求
- 三方网络框架请求
Hook
hook是代码插桩技术。就是在正常运行的代码,在不影响正常程序运行的前提下,嵌入一段自己的代码逻辑。
常见的hook类型:
- js hook:查看源程序代码,找到hook的点,编写js代码。配合frida工具,将js的hook代码注入到工具内。
- xposed hook:通过xPosed工具提供的hook函数,这是java写的。很简答,继承某个类,反射想要hook的类,实现某些方法。
- so文件hook:反编译程序找到程序中调用的native方法,自己编写hook native层的函数,打包so文件注入到反编译程序中,重打包,需要注意的是so是用c++写的。
密码学
在逆向过程中,程序难免会对一些关键数据进行加密或编码。对于这些加密编码的数据我们需要了解其加密、编码类型。所以我们需要了解这类知识:
常见的数据处理算法分为如下几类:
- 消息摘要算法:消息摘要算法又称为散列算法或哈希算法,常见的算法有:MD5,SHA、MAC。这些算法不是加密算法,仅仅是编码算法。
原理就是:通过一些编码规则,将明文编成固定长度的一串编码。 - 非对称加密算法:此算法也是我们常用的。它有公钥和私钥两个密钥,开发者通过公钥加密,私钥解密。一般的公钥容易获得,私钥一般存于创建者,也就是发放公钥端的开发者。常见算法有:RSA。
- 对称加密算法:类似于消息摘要算法,密钥只有一个,发送和接收端将其存在本地,就可通过密钥将明文加密后传送,接收方通过密钥来解密。常见的算法有:DES、AES、3DES。
- 数字签名算法:反编译程序找到程序中调用的native方法,自己编写hook native层的函数,打包so文件注入到反编译程序中,重打包,需要注意的是so是用c++写的。
- 特殊编码算法:反编译程序找到程序中调用的native方法,自己编写hook native层的函数,打包so文件注入到反编译程序中,重打包,需要注意的是so是用c+