安卓逆向分析韵达超市app接口及其实现
安卓逆向分析韵达超市app接口及其实现
1.抓包响应的操作(登录-入库-出库等等接口)
2.apk文件解压得出dex文件,然后反编译出jar包,。
3.分析接口
3.1登录接口
抓包得出登录接口主要有六个参数,分别是sign_method,req_time,data,action,appver,version,sign
其中sign_method是固定值yd_md5,req_time是13位时间戳,data里面的数据就是用户名和密码(密码是进行了MD5加密),action应该是固定值,登录这个接口的值应该就是market.appMarket.login,appver和version也是固定值,那么剩下的就只有sign不知道是怎么生成的.
接下来就是分析jar包代码了.
全局搜索login关键词,找到了登录接口的相关逻辑,但这里显然不是登录前的组包过程,这个是登录成功,返回信息后赋值的过程,那么就是继续找
找到了这个函数,很明显这个就是登录请求的组包过程,可以看出来,先new一个Request对象,然后setPhone,setPassword,setData,setAction,setVersion.
其中在setPassword的时候做了一个判断,真的时候用的是rsa加密,公钥就在源码里,false的时候是用的md5加密,很显然,密码是MD5加密的.
但是还是没有看到sign的加密方法,那就得继续找了
找到了这个函数,但是在这个工具里看不到这个函数的内容,那就只能用比较强大的工具了,jeb登场
找到了这个函数,通过分析发现,是将请求参数进行按key的升序排序,然后拼接字符串,然后进行了g.a(g.c(v6.toString()))操作,进去里面的函数,发现是MD5加密.那么sign的生成方式就找到了.登录接口完成.
发现登录接口的返回响应里面有个publicKey,有可能是RSA密钥.
{ "req_time":1589253822588, "body":{ "publicKey":"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAI6ZmE1edc709ZhZQ8dGMGLhYqHyzdU1KUCTP4mamczvqJChHSnGSy8tNBltapz8salszVaWQSp9qHkAlpp2aH0CAwEAAQ==", "message":"请求成功", "result":true, "token":"CKJBCg67eY_Z8djYgAD0ccA_", "data":{ .... }, "openid":"xxxxxxxxxxxx", "code":0 }, "success":true }