汽车报价大全app sign解密过程
首先抓包包体如下:POSThttp://msn.api.app.yiche.com/api.ashx HTTP/1.1
dvtype: android
cha: c34
Connection: keep-alive
dvid: 865166021610251
Accept-Encoding: gzip
av: 9.9.8
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; redmi note 3 Build/LMY47I)
Host: msn.api.app.yiche.com
Content-Length: 494
method=user.vcode&phoneno=vBBSH4w3rMKrMxOTR5GwLKWH%2FWRP3PQWNRPQwYmJDyL%2BvPMVjxbNeP%2Fkb0aPLhqV20yda0qiS%2FMw%0AsqSJJssfJEu7xlXjOT8fzdwIsjHjLwx5kEY3fCx3e9g1UPi%2FzLq%2B5SdFf65ql4ADOgaPQaOWnhRz%0AL8kw5BpRenlVZquP6xM%3D%0A&udid=jFr7FcoaEyUpoLwNG6wkpQrOfJPxfYfRRasAwr%2Fteho4HG%2BgbEaovKzXM6WKX%2FNnrlvVINV569t6%0At5HuRBz4gDOA7rcNBm0NT59md1ST2YiqpbHnt0oe3V6IFJXElXxWSVpIf2OqNwDlz7H1ijdunqBy%0A8zjBWPcDlSIBNJJm%2BKE%3D%0A&type=4&IMEI=865166021610251&ver=9.9.8&sign=8e9d54737f45d6c331da0db7d918ba25
sign就是我们要找的加密至于user跟pass应该是RSA加密 稍后看吧
装上apk打开Jeb 反编译查找sign但是 并没有找到我们想要的东西都不是那怎么办? 换个字符串在搜呗 比如phoneno定位到一下地方
很明显手机号是个RSA加密双击进入 encrypt函数到达:
很干净 就一个RSA加密Class那么 手机号加密就是RSA了 但是 里面并没有发现我们要的sign加密怎么办呢返回上一层我们会发现:
在RSA加密的上方我们发现了一个Get_SignUrl的方法并且传递进去了一个网址正是我们抓包Post提交的网址那么 我们当然必须进去瞅瞅啊于是我们又来到这里:
假装没有看到上面那个md5加密 emmmmm 继续跟进getUrl方法
发现就在它下面这个方法就是浏览一下发现
代码为:
public static String getUrl(String arg9, LinkedHashMap arg10, boolean arg11) {
if(TextUtils.isEmpty(((CharSequence)arg9))) {
return null;
}
arg9 = arg9.trim();
String v0 = "?";
int v1 = arg9.indexOf(v0);
if(v1 != -1) {
v0 = arg9.substring(v1, arg9.length());
arg9 = arg9.substring(0, v1);
}
if(arg10 != null && !arg10.isEmpty()) {
String v2 = "&";
if(v0 != null && v0.length() > 1) {
v0 = v0 + v2;
}
v4 = new StringBuilder();
Iterator v5 = arg10.keySet().iterator();
while(v5.hasNext()) {
Object v6 = v5.next();
Object v7 = arg10.get(v6);
if(TextUtils.isEmpty(((CharSequence)v7))) {
continue;
}
v4.append((((String)v6)) + "=");
v4.append(ToolBox.URLEncode(((String)v7)));
if(!v5.hasNext()) {
continue;
}
v4.append(v2);
}
v0 = v0 + v4.toString();
if(!v0.endsWith(v2)) {
goto label_61;
}
v0 = v0.substring(0, v0.length() - 1);
}
label_61:
if(arg11) {
v10 = new StringBuilder();
v10.append(v0);
v10.append("2CB3147B-D93C-964B-47AE-EEE448C84E3C");
String v10_1 = MD5.getMD5(v10.toString());
return arg9 + v0 + "&sign=" + v10_1;
}
return arg9 + v0;
}
注意这段return arg9 + v0 + "&sign=" + v10_1;
在这个方法的最后 return了这么一句 sign=v10 v10=MD5.getMD5(v10.toString());
经过了一个md5方法双击进去
一个md5加密Class 并且 作者很漂亮的为我们在下面写了一个main函数 emmmm真贴心.......
找到这里 那么有这么几中方法
1.下段动态调试
2.下钩子 Hookmd5这个方法
3.添加Log日志重新编译apk把明文打印出来(不建议使用此方法,因为apk如果有签名 你就重打包不成功了 在我来说比较鸡肋,当然仅在此时此刻 )
4.找到写这个apk的作者 舔着B脸去要!!!
我选择第四个方法!!!!
1.动态调试
明文数据 :
?appid=17&bjloginsource=0&cityId=0&method=userlogin.baalogin&password=su%2FvMDtaFYDCU2DSMAoHO3PKEpz8dx0IPWz0M7BmaMsuDKlS2qjkPMrhao5x2c6HVoew%2BjZc%2Fp69%0AEZelq5dJ28tatl8c9hVfXUQzQ652bT3RFkk1NBoEiZ%2BYhH46upXOA8ElSKbF5hf7s2qP01uFgkcR%0AbYFzuotE4X2FyxfM%2Fkc%3D%0A&phoneno=15845454545&sourceName=%E6%98%93%E8%BD%A6%E8%B4%A6%E5%8F%B7%E7%99%BB%E5%BD%95&username=AGlr21gXWkgaKQgaqe3IygqLnSibpWLKmN34Dd6xh2dYgBYvfC%2Bgi0Yz7Eo3bJJ3IenOIGfm6L8I%0AwGXZMlu14nkzK8uUh2rGJdoHwT%2BIs5uzJ%2Ff%2F3AUv7oi%2BZP0IKQWW8MHtuK7VOTruHgP98HHeOMNm%0AQyE8mu2zw4N0GXlsbag%3D%0A&ver=9.9.82CB3147B-D93C-964B-47AE-EEE448C84E3C
Hook结果:
明文:?method=user.vcode&phoneno=MoJ%2FX%2F2ygc7O1R51R2ePAj9SzoBTxTttgaGEOVPk9ghvBpiNF6KgtZeNuEewxr2ijdSIT0ORpIud%0A4C3cpNh%2Fe1pmvMg2Uall2tQsSJ84Ja%2BLkm%2F%2BeK75HjCdlv2eoT0tkMfqh5z0qdLBBpsTHYAzWG2E%0AN%2BKboYTJe2ZB7Jer0qQ%3D%0A&udid=lXIhBEprZzv2T3BTr9CQNO5TUdVkbFAnPB7M0jEzQvy2rDNorI8FZfJiRkowkN%2FGsxj0wgleMGRy%0AsMfJRZs5LEwZ1pCcx3iOSALO4uiw4oUwF9RL0lnBD6ujNcPcnd5w9ysbAyuyNgQR6SvxUP5GnRmn%0AtbXxr8klFgdbsYRluvM%3D%0A&type=4&IMEI=865166021610251&ver=9.9.82CB3147B-D93C-964B-47AE-EEE448C84E3C
密文数据:47d12963353c3e81f1dc1f9d1c927e6b
至于Log注入我就不写了 找到位置 插入log代码 重新打包编译就可以了
哦还有第四种方法留待你们测试吧
初學者,看起來好難 好好学习一番,谢谢分享 正在努力学习中 感谢大佬分享 感谢楼主
炒鸡牛鼻,顶顶顶顶顶顶 帮顶一下 谢谢分享 [快捷回复]-学破解防逆向,知进攻懂防守!