|
吾爱游客
发表于 2018-7-23 10:15
1、申 请 I D:那一天0320
2、个人邮箱:326305381@qq.com
3、原创技术文章:https://blog.csdn.net/lp18036194881/article/details/81120717
本人
copy版本如下:
最近万能钥匙抓取数据量锐减,查看日志,发现多数请求返回值为空,猜测其对相同用户过量请求做出了访问限制,现在需要对代码进行改进。初版代码访问的url格式如下:http://cds.51y5.net/feeds.sec?st=m&appId=A0008&sign=6387F6AF7C51DC117D0F1DB2980A9319&et=a&pid=cds001001%2Ccds001004&ed=EFADF2B7610115D649BF09107F9544CEC1232FCEB5D6077D588836EC532EFC6BE7E876921F753D1CD3765496137F34EB9EC4572903FD1DA04CA9B8F2B8BB2AAD9BD36EA4069B8D327115CE4F0354F65CBF5E31DFB708F5F77883077B32703A51062D6E03109BFC34C29913225EA4DB96A7211CD0C9C1F68EF72C18E0570A6BEBE3E0AF1C2D9B7F6815579EED6C394E4B1BDD507CDE137C11A9E64927E9CE8093A4B9F3A4B79961FB4A6F130EA09025AD83ED6C6E7E8890C439E181D90A1A24C040B019303126E8FE0A0F7EB19128DEF48E559B994C9075C6D122541C369C1FB73EF1B46A3263B61F4007821B230F9D55297C2B77C895BB3FA0B61D69F108BC1A4751C02335F88E83420FBAEB6DA6899C10F9BC96B4752F0F13655AF28B52F8657D17F6416E9C3E3F800C45F6F58B332FB787C1E255F33E52A03836E522F2047E86B191EEDBBD1269B8FB67602024FE8EBCD7DA9690C7CC29A10C32874E7CB78A4120A28290727C37C911CAB1C3E7E3AD23BC4393941104F5563F1D13A24568B69E0C7F69F1D0C5F75EEE56D6836FD1B7716D5C96388A9F95D85D607027126980FA4CE25E1AB70DA98516145BD3A67182634CDF4C9CA691983FDEF61254D087C751C553A7708907C5455F99358F2A0B67C72D549D631F5E0BC048627000014DF73303951FDB1A5B7B5C3754F9EDABE6FB0FE57CED4E3ABBF8B146E9DA05459D00D9242CD1C84A740DA3ABF43AA8C02D6DC366A2176E75889070D39F18F72E85379624E105540F1D8CBE3F0C8121BB674EB038E441F67346B34A247C7304DA06E3680CAFB551967ED56251D7706CC748FB660D89F325781917FBE7A9F6D573DD244F657D048E74B1388CBF8CC7124AF6A74263402D246615E2AE6AB97B34B0F4D90DF45F2043177542413E84B01A090A237EA79FAD65576B39A13DFACB8347E6C44169C1891BF13ADA24640B40EC93220F34672FB89286631E2357F1C86305CC12F4FAAA16B68C1A49D78E83D3E4F5440B5667531164F8B82339B7788D8B639E8914B301ACD4F518FA5E47A0BFF5EF79FCF1343469E888147A62E4FB617151C574B45B6B7ACE6B54C1680A944C8D5C40BB32FE6C85D9410428BEA61F834902904EF810CD5D5FBD0E829798B60F7A92B128F7096B34C561AD72484218AE12F14287C55CDF01BD64F610082488288CF133360993B79AF92F023B8B85B1DD3CA19969F69749FD630FEA639E24559E4D5CA002034A07F69CBDB5F486AE7D87D25E9796B6ABA174A8E1E8EDBFADDC58E36FF374D462EABDDE900001182C0990C60F8013BE50B8DE848E19E11DF2A7FC41946D79304FC234AA2E8ECD43BF5EB59C657502FEECC23C99FBEFA85D4C586CF8DFFB39F7220B49532A2A66331BD0174B5F47089DD17A31EE2DAEA13DAAB2F77624B86815D86BB18EFD42E69674EF8A5F294589791D9A4BBDD86A4E548B7B6F1C99296B7A45C0C7B2F0E3B309E9EED0CCDDA95FF91FF476E1B1C9A5A5879089EA124C64F7A1F5DF546A6FE0FFEE29D3401B66623CDDBA56B212BCB4EFF6361B7AC3C4D43BC83A03A311679CE44648249641F59E96B00046B58B49CDC6654B67AE3034A7844A2C81D1FD325C5A68CB2BD63884D59F4503DFB08857019D4F246A2AE42185A1E108E8B55F42CADE933F027089ED757B55D8A1AC37B2EA9FB2AA96F51FEB90CDB4C7702F869DD60F729DCE7827DE40D8A1C1C226F52B2FBF3799BEE306C2CACFDE7A9AF7BAC7C6BAAEC490DA5A4B76E9380FE1DB5EF124025263A4D6763B823A59CA5457762D92C77D78FDD5D3BA503C1C4EA3195996D3F3929230A14DCD2762A14E1F29138D2ECAD0F8DCD11E876D其中无法找到任何有效信息,猜测其对数据进行了对称加密处理,主体信息保存在ed属性中。解压缩apk,得到dex文件,用apktool进行反编译,得到jar文件(很轻松,java层没有做任何加壳保护)使用jd-gui打开反编译后的jar文件,发现代码多进行了混淆。根据url特征全局搜索ed=字符串追踪到继续追踪以上代码特征是不是很熟悉?数组先*2再移位,反编译的代码由于编译器优化可能有点混乱上一个自己代码:图1
​​​​到这里ed参数静态分析结束接下来使用hook 分析u类a(string,string,string)函数的传参,这两个参数是AES加密函数必须的key,猜测是固定的hook代码(先看上面的hook,下面一个是hook sign参数的时候用的)在模拟器中运行 查看日志发现两个固定值,用得到的固定值模拟加密(图1的geted方法)传入参数1,运行测试结果跟函数返回值一样。对被加密的url进行urldecode可以得到其传输的参数,得到加密算法的我们可以直接修改参数再重新加密了~~然而在修改了个别参数重新加密之后,请求得到的url发现系统返回签验失败。看来sign参数也必须要破解了。直接jd-gui 全局搜索sign=,我这边搜索结果很多,一个个找过去发现如下方法this.k没有初始化,先放一边,查看k的a方法hook this.k 参数,直接hook k类的a方法即可贴还原方法测试类
/**
* url生成策略
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
JSONObject json = new JSONObject();
json.put("loadType", "1");
//分类相关
json.put("channelId", "1");
json.put("serialId", "5dc591c7dc13493994d60750ba53ce78");
//分页页码
json.put("pageNo", "-1");
//基本信息
JSONObject extInfo = new JSONObject();
//屏幕高度
extInfo.put("screenHeight", "1280");
//系统
extInfo.put("os", "android");
//软件包名
extInfo.put("appPkgName", "com.snda.wifilocating");
//安卓系统版本
extInfo.put("osVersion", "4.4.2");
extInfo.put("screenOrientation", "1");
//internet服务提供商
extInfo.put("isp", "46007");
//设备相关
extInfo.put("screenDensity", "1.5");
extInfo.put("screenWidth", "720");
extInfo.put("deviceType", "1");
extInfo.put("androIDAdId", "");
extInfo.put("deviceVersion", "OPPO R11");
extInfo.put("isOpenScreen", "0");
//系统api版本
extInfo.put("osApiLevel", "19");
extInfo.put("deviceVendor", "OPPO");
JSONObject appInfo = new JSONObject();
//固定字段
appInfo.put("origChanId", "guanwang");
appInfo.put("appId", "A0008");
appInfo.put("netModel", "w");
appInfo.put("chanId", "guanwang");
//语言
appInfo.put("lang", "cn");
appInfo.put("mapSP", "t");
//某个版本号
appInfo.put("feedVer", "1026");
//版本名字
appInfo.put("verName", "4.2.88");
//固定
appInfo.put("uhid", "a0000000000000000000000000000001");
appInfo.put("verCode", "3208");
appInfo.put("dhid", "2afe038d716a4c7899d0b967c041f2cb");
/**
* 可能会造成数据封锁的信息
*/
/**
* 在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置。
厂商定制系统的Bug:不同的设备可能会产生相同的ANDROID_ID:9774d56d682e549c。
厂商定制系统的Bug:有些设备返回的值为null。
*/
extInfo.put("androidId", "509a4c0cd1b23392");
//设备mac地址
appInfo.put("mac", randomMac4Qemu());
//路由器的SSID是:无线网的无线名称
appInfo.put("capSsid", "sagita509a4c0cd1b23392");
//手机串号
appInfo.put("imei", "863254010060324");
//路由器bssid
appInfo.put("capBssid", randomMac4Qemu());
//经度
appInfo.put("longi", "117.698315");
//纬度
appInfo.put("lati", "28.01758");
//时间戳
json.put("ts", new Date().getTime());
json.put("appInfo", appInfo);
json.put("extInfo", extInfo);
String ed = geted(json.toString());
String sign = getsign(ed);
String url = "https://cds.51y5.net/feeds.sec?sign="+sign+"&pid=cds001001,cds001004&st=m&appId=A0008&et=a&ed="+ed;
System.out.println(GoodHTTP.sendGet(url));
}
随意修改都能通过系统验证,终于自由了,再也不怕被针对了 - -
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lp18036194881/article/details/81120717 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|