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数组的转换,其他没啥需要记录的。

 

posted @ 2023-05-10 17:56  Eeyhan  阅读(297)  评论(2编辑  收藏  举报