1、抓包 抓两次
2、对比
3、我们来方法刨析一下
登录 他一定有一个点击事件 我们搜onclick 方法刨析了一下 发现没找到有效的信息
4、我们来直接使用jadx-gui来搜索抓取到的字段 居然只发现了一处
5、发现字段全部都在这块了
6、我们来分析一下这些字段
“mzip”
我们来看看这个a方法
这个a方法 做了一些左移右移等数据操作
我们再来看看这个参数
aesEncode是Coded.getInstance().aesEncode()方法的返回值
aesEncode方法返回了一个方法 发现该方法是一个被native修饰的方法
它这块调用了这几个SO文件 一个一个来试试 发现在第四个文件里边 当然 我们可以用Frida 来遍历so文件及其文件内的函数 通过这种方法也能找到最终结果
我们到SO里面来看看
aesEncode是一个导入进来的函数
发现它的aesEncode函数具体实现 在libcoded.so文件中
就一个AES_cbc_encrypt算法
“code_version”
该字段调用了一个g方法
g方法返回了一个this.f54340h
this.f54340h的值 = d方法的参数
我们来看看d方法调用处 发现它是一个变量
该变量又是一个C方法的返回值
this.f54329d又被一个c方法调用了
c方法又返回了一个this.f54355c
this.f54355c=2 是个常数
code_version=2 是一个常数
"map_id"
map_id =时间戳+随机数
“X-KV”
该字段调用了一个h方法
该h方法 返回了一个字段 this.f54339g
c方法参数传的就是 “X-KV”的值
我们回溯一下这个c方法
d2 就是“X-KV”的值
我们来看看他的这个a方法
这就很明显了 一个MD5 加密算法 现在就是找到str参数
str参数的值 为 this.f54627b 的值 截取前8位
我们来看看Coded.getInstance().computeOutputLength(0, 6)这个方法
它这块调用了这几个SO文件 一个一个来试试 发现在第四个文件里边
打开ida
一样的套路 这个方法写在别的SO文件里面 它依赖了libcoded.so文件
我们打开libcoded.so文件
就是一些左移右移操作
“X-Sign”
我们来看看这个a方法
我们来hook一下该方法的参数信息和返回值
hook之后的结果为
参数1 是一个byte数组 未赋值
参数2 是一个map集合 里面储存了一些 请求参数
参数3 是一串加密数据 应该是加密处理了 我们来看看参数3
this.f54362c 我们点进去看一下
this.f54362c赋值操作
那么我们现在得找到“f54345d”的值
我们来看看这个a方法
我们来hook一下
结果
该程序他还跑了两遍
它的参数应该也是加密了 我们来看看a方法它的参数
该参数又调用了一个e方法
e方法又返回了一个字符串
返回的字符串又调用了一个a方法
a方法我们具体点进去
又是这个 好像所有的字段 都有这个操作
刚刚找了a方法的参数 我们现在来看看a方法
他会先跑sdbyecbu37x(bArr, bArr2, bArr3, bArr.length)这个方法 但是他会返回a.a(bArr3)这个方法
a(bArr3)这个参数 是sdbyecbu37x()方法的第三个参数
a方法基本每次字段加密都用到了
sdbyecbu37x(bArr, bArr2, bArr3, bArr.length)是一个被native修饰的方法 我们重点关注它的第三个参数 因为它的第三个参数有在最终的return 方法当中有用到
我们打开ida来看看
关键还是这个sign
sign方法点进去 跟之前如初一辙 sign方法放在了libcoded.so文件中
我们打开libcoded.so文件来看看
这个关键函数 我们来重点来分析一下它的参数(下面为了好分析 我改了参数名 可以结合上文来)
sha1()方法的第一个参数 就是先开辟一个空间 然后在让它这个数组进行赋值操作 操作结果就是我们的参数1
我们这块也对它的一些参数进行了一个赋值
根据分析他会走case 9: 分支 在里面进行一个循环操作
SHA1() 一个标准的sha1 算法
而他们最终操作的值 就是sign字段的值了
以上仅供学习,切勿用于非法用途,文章如有侵犯,请联系删除
个人微信公众号:“安卓逆向菜鸟修炼记”