其他
关于抓包的碎碎念
本文为看雪论坛优秀文章
看雪论坛作者ID:ChenSem
抓包是作为apk分析的首要切入点,获取apk的通信协议的必要手段。常见的抓包手段是基于中间人攻击来进行的,还有另外一种抓包手段是基于手机VPN进行的。这里将罗列常见的抓包手段,以及SSL Pinning手段的对抗。
基于中间人攻击的抓包
手机App不走代理
OkHttpClient client = new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();
还有的检测手段就是检测代理状态,如果设置代理了就拒绝通信,这种情况下也可以使用SocksDroid工具直接转发流量,这种情况下检测不到代理,另外的方法就是将检测的代码Bypass掉。
证书绑定(单向绑定)
frida-trace
-U \
-F \
--runtime=v8 \
-j '*!verify/iu'
const groups = Java.enumerateMethods('*!verify/u')
// console.log(JSON.stringify(groups, null, 2));
var classes = null;
for(var i in groups){
var classes = groups[i]['classes']
for(var i in classes){
Java.use(classes[i]['name'])
.verify
.overload('java.lang.String', 'javax.net.ssl.SSLSession')
.implementation = function(){
console.log("[+] invoke verify");
return true
}
}
}
此方法不能实现通用脚本。
证书绑定(双向绑定)
Java.perform(function () {
var StringClass = Java.use("java.lang.String");
var KeyStore = Java.use("java.security.KeyStore");
KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementation = function (arg0) {
console.log("KeyStore.load1:", arg0);
this.load(arg0);
};
KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {
send(arg0)
console.log("KeyStore.load2:", arg0, arg1 ? StringClass.$new(arg1) : null);
this.load(arg0, arg1);
};
});
奇淫技巧抓包
0x01 Hook SSL_write SSL_read
var ssl_write = Module.getExportByName(null,"SSL_write");
var ssl_read = Module.getExportByName(null,"SSL_read");
Interceptor.attach(ssl_write,
{
onEnter: function (args)
{
send(,Memory.readByteArray(args[1], parseInt(args[2])));
},
onLeave: function (retval){
}
Interceptor.attach(ssl_read,
{
onEnter: function (args)
{
send(,Memory.readByteArray(args[1], parseInt(args[2])));
},
onLeave: function (retval){
}
0x02 SSL key logger
function startTLSKeyLogger(SSL_CTX_new, SSL_CTX_set_keylog_callback) {
function keyLogger(ssl, line) {
console.log(new NativePointer(line).readCString());
}
const keyLogCallback = new NativeCallback(keyLogger, 'void', ['pointer', 'pointer']);
Interceptor.attach(SSL_CTX_new, {
onLeave: function(retval) {
const ssl = new NativePointer(retval);
const SSL_CTX_set_keylog_callbackFn = new NativeFunction(SSL_CTX_set_keylog_callback, 'void', ['pointer', 'pointer']);
SSL_CTX_set_keylog_callbackFn(ssl, keyLogCallback);
}
});
}
startTLSKeyLogger(
Module.findExportByName('libssl.so', 'SSL_CTX_new'),
Module.findExportByName('libssl.so', 'SSL_CTX_set_keylog_callback')
)
0x03 CE扫描内存
总结
看雪ID:ChenSem
https://bbs.pediy.com/user-771450.htm
*本文由看雪论坛 ChenSem 原创,转载请注明来自看雪社区。
推荐文章++++