1、x甲app登陆算法分析【Android逆向分析学习】

学习安卓逆向分析的一个小菜鸟,记录分析的“快乐时光”,小白图个乐,大佬乎喷


分析的APP

铁甲

包名:com.cehome.cehomebbs

版本号:4.1.1.0

最低版本使用:Android 4.4  (KITKAT)

抓包分析

把APP安装到安卓模拟器上后,配置好代理,打开APP发现Charles有抓取到数据

说明该APP没有做代理验证,不需要通过xposed 进行代理检测过滤 也不需要证书校验;

---------------------------------------------------------------------

通过Charles抓包,输入手机号:13888888888,密码:a12345678 


获取到login登陆的包   /app/appPersonalCenter/login


通过观看,可以发现,大部分的值都是 系统抓取模拟器信息生成,或者是自己生成的


其中 post的 data 数据是被加密的,并且可以看到内容是被URL编码的

还有一个参数  就是  token 是 加密的  

开始反编译分析

打开 jadx-super 进行反编译apk   搜索关键词进行关键点定位

一般来讲 这种post请求,我比较喜欢搜索URL api上的关键词

比方这个  我就比较喜欢用 appPersonalCenter/login  做关键词搜索

 

勾选上代码选款进行搜索后,搜索到一条信息,很明显这个就是我想要的;

双击进去,发现这里没有我想要看到的数据包请求的地方,说明有其他的地方调用了这个类;

 

 

点击这个类,右键查找用例,展现出几个调用了这个类的地方;

在展示出来的地方,我发现了一个关键词 login 

那么有可能就是,在这两个调用的地方进行构造登陆包,然后加密的;

点击第一个进去瞅一眼,发现这个地方没有账号密码获取 加密的点;

 

那么就从第二个地方重新选择进入,诶,在这里就可以发现,在这个函数开始就开始获取

手机号码,并且进行去除空格处理,在获取了密码;

然后判断 两个参数 是否为空,如果不是空就开始进行加密处理;

encrypt(JsonUtils.toJson(replace, obj), "j33$E@GctUXJtVfO")

这个就是加密函数

 

点击进入加密函数中去看一下,可以很明显的看到这个是一个AES的加密


ECB/PKCS5Padding   的加密模式

"j33$E@GctUXJtVfO"  这个就是加密的key值

JsonUtils.toJson(replace, obj) 这个是要加密的值

进入 这个 JsonUtils.toJson 函数中看一下 是怎么处理这个加密的值

肉眼看就是做把手机号码和密码进行json 

 

果不其然,这个方法仅仅就是对 手机号和密码进行了json而已 没有添加另外的值

那么 username 匹配 手机号  password 匹配密码  通过json化的话 应该是 


{
    "username":"13888888888",
    "password":"a12345678"
}

这样的 ,然后去除空格后,连接起来应该就是这样的

{"username":"13888888888","password":"a12345678"}
 

然后打开 wt-js 加密库工具进行 加密调试 


加密值:{"username":"13888888888","password":"a12345678"}

key值:j33$E@GctUXJtVfO

ECB/pkcs7 模式进行调试  

 

 

加密结果数据为:

IFD+RH/T0lUJe1CkZ1tKnKl7t6LVF2Vo46CS1QY8NKl2WsQb80Jk1WWgWq3GI/c5Gnq0yRd9eQf6QQkiNAFzgQ==

原来的抓包数据为:


param=


IFD%2BRH%2FT0lUJe1CkZ1tKnKl7t6LVF2Vo46CS1QY8NKl2WsQb80Jk1WWgWq3GI%2Fc5Gnq0yRd9eQf6QQkiNAFzgQ%3D%3D

进行URL解码后:


IFD+RH/T0lUJe1CkZ1tKnKl7t6LVF2Vo46CS1QY8NKl2WsQb80Jk1WWgWq3GI/c5Gnq0yRd9eQf6QQkiNAFzgQ==

可以看到一模一样


 

那么在这里 这个data 数据中的 加密数据的方式已经解决了,还有一个 token值

针对这个token值的关键代码的定位,我的想法是这样的;

因为token是在请求包构造的时候才出现的,而且搜索token这个关键词的话,估计也会出现很多的代码出现点;

所以可以尝试找一下在请求参数中一些不常出现的一些参数的关键词;

 

最终我找到一个大部分情况下不常用的关键词 : visitorid

jadx 进行关键词搜索  

 

 

可以发现,就可以比较精确的找到一个关键点,双击进入查看

然后就可以清除的看到token的参数的构成,也是进行了一次加密

String uuid = UUID.randomUUID().toString();
systemHeader.put("token", AesUtil.encrypt("cehomeapp@" + uuid, "j33$E@GctUXJtVfO"));

并且可以看到,加密前 这个uuid 是通用唯一识别码,每次是随机生成的;


然后在前面加上了 字符串 “cehomeapp@” 

 

然后进入了这个 encrypt的加密函数中,发现,也是一样是一个AES的加密 

ECB/PKCS5Padding 的模式 

那么就可以直接的进行加密尝试了

uuid 是随机生成的,并且赋值给了 visitorid  

那么我们在  之前抓包的数据里面拿到 visitorid的值

0d208b74-718a-4034-a77c-e58b989ac205 

aes的密钥是:j33$E@GctUXJtVfO 和原来的一样

并且在前面加上 cehomeapp@   然后  在进行 wt-js的加密尝试

 

 

 

加密出来的结果为:


TwvNF/q/bEIuzb1qKbJUsgelUJtjSnnq3dwPsBOye+ENMVWkqbtnpRsg9EMf7JO+


抓包的数据结果为:

TwvNF/q/bEIuzb1qKbJUsgelUJtjSnnq3dwPsBOye+ENMVWkqbtnpRsg9EMf7JO+


一样,至此,两个加密数据分析完毕!

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值