app逆向之安卓native层安全逆向分析(七):unidbg自尝试某潮流app+dvmObject[]处理
前言
跟着龙哥搞了几次unidbg了,这次也自己尝试用来分析下某潮流app了。
分析
1.抓包
先抓个包
我们要搞的就是这个sign-v1了。
2.调试找参数
jadx一顿分析,一搜:
搜出来还不少,往下翻,找找一些特征,很快找到这里
点进去
ok,用objection hook之后,发现不是这个方法,但是确实是这个方法所在的类的b方法:
然后调用了这个getsign,getsign就在下面
再来hook下这两个方法:
基本确定,就是这里了,抓包工具也对比就是这里:
3.ida查看:
打开ida看看,发现是静态绑定的
可以的,感觉很简单
调试
1.搭架子
首先搭一下架子,然后既然他不是动态注册的,那就可以不用设置调用jni_load了:
看着没毛病,直接调用吧
2.调用&补环境
废话不多说,直接拿着hook到的参数拿来调用:
看下,这个ach是啥,ok,看样子就是随机生成一个16位的字符串
补一下环境
继续看
原来就是把这几个加起来
补一下:
结果已经出来了。但是打印的是一个dvmobject对象。很奇怪了。再看看hook的结果:
其实是个有三个元素的字符串数组。所以他应该是对象
断点调试一下
结果这么写会报错:
强转string[]也不行,就很尴尬
3.结果修复
问了一下unidbg的大佬,应该这么写:
这么写就可以了。
DvmObject[] result = (DvmObject[])
vm.getObject(number.intValue()).getValue(); String sign = result[2].toString();
4.另一种调用
首先,我们都知道有,地址调用,符号调用,如下:
其实,根据我问的unidbg玩的6的大佬,还有另一种调用
这么写,代码量减少了很多。
但是有个问题就是,那个network类,需要在构造方法里定义一下:
另外,这个方法的签名,怎么拿到,用jadx的smali代码查看:
这里就直接有了,复制过去就可以用,注意最后的【;】也要带上。
5.验证是否可用
试试刚才的两种调用的结果,能不能拿来请求,然后正常返回呢?
ok,两个都可以 ,说明主动调用,整个过程,很成功
结语
整个过程很轻松加愉快。除了最后的dvmObject数组的转换,其他没啥需要记录的。