开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3533|回复: 7
收起左侧

[技术专题] 卷皮-9.9包邮 APP 主要算法分析

[复制链接]
结帖率:100% (1/1)
发表于 2018-8-10 21:04:16 | 显示全部楼层 |阅读模式   上海市上海市
PS:APP 提供来源
app 下载 地址:
http://sj.qq.com/myapp/detail.htm?apkName=com.xiudang.jiukuaiyou.ui

app 提供来源:
https://bbs.125.la/forum.php?mod=viewthread&tid=14213102&highlight=APP


第一步 抓登陆抓包:

  1. POST https://muser.juanpi.com/login/check HTTP/1.1
  2. Content-Type: application/x-www-form-urlencoded
  3. User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; oppo a59m Build/LYZ28N)/jiu;4.9.1;oppo a59m;Android;5.1.1;101218
  4. Host: muser.juanpi.com
  5. Connection: Keep-Alive
  6. Accept-Encoding: gzip
  7. Content-Length: 577

  8. apisign=f395adc7b6e2e2c8d1252b3a82c34e44&jpAppName=jiu&jpAppNetwork=4&jpAppVersion=4.9.1&jpDeviceName=oppo+a59m&jpDid=359593493182282&jpFeature=&jpFreshUtype=&jpGoodsUtype=&jpId=00000000-56a5-e113-4dd3-5e175b8a34c1&jpJpidAbAttr=9&jpLocation=上海市&jpLoginSource=&jpPlatform=Android&jpReleaseLevel=1&jpScreen=720x1280&jpSign=&jpSize=l&jpSystemVersion=5.1.1&jpTicks=1533902307556&jpTimeLine=2&jpToSwitch=2&jpUid=0&jpUidAbAttr=8&jpUserGroup=&jpUtm=101218&password=AtVG0TK+tueSC5ukI5qOPQ==&piccode=&username=CtN7Fw+mkXB6D4mel1BIUQ==&verifyid=
复制代码


第二步 分析加密主要参数:
1 apisign=f395adc7b6e2e2c8d1252b3a82c34e44  (MD5加密)
2 password=AtVG0TK+tueSC5ukI5qOPQ==     (AES/CBCPKCS5Padding)
3 username=CtN7Fw+mkXB6D4mel1BIUQ==  (AES/CBC/PKCS5Padding)

第三步 逆向找到其主要算法

1 . apisign
  1.         Map hashMap = new HashMap();
  2.         hashMap.put("type", this.third);
  3.         String str = ལྗོངས.m1086(JPUrl.Oauth_Web) + "?apisign=" + NetEngine.m604(hashMap) + "&type=" + this.third;
  4.         ʼʼ.m1396("", "third url=" + str);

  5. --------------------------------------------------------
  6.     public static String m604(Map<String, String> map) {
  7.         return &#699;&#1497;.m929(m605((Map) map, true, false) + JuanpiJni.m751());
  8.     }
  9. ----------------------------------------------------

  10.     public static String m929(String str) {
  11.         try {
  12.             MessageDigest instance = MessageDigest.getInstance("MD5");
  13.             instance.reset();
  14.             instance.update(str.getBytes());
  15.             return m901(instance.digest());
  16.         } catch (Exception e) {
  17.             return null;
  18.         }
  19.     }

复制代码


2 password/username


  1.     public static MapBean getUserLoginInfo(String arg4, String arg5, String arg6, String arg7) {
  2.         HashMap v0 = new HashMap();
  3.         ((Map)v0).put("username", &#699;&#1497;.ˋˋ(arg4));
  4.         ((Map)v0).put("password", &#699;&#1497;.ˋˋ(arg5));
  5.         ((Map)v0).put("verifyid", arg6);
  6.         ((Map)v0).put("piccode", arg7);
  7. --------------------------------------------------------
  8.     public static String ˋˋ(String arg2) {
  9.         String v0;
  10.         try {
  11.             v0 = com.base.ib.utils.&#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;.&#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;(arg2, &#699;&#1497;.&#3942;&#3988;&#3964;&#3923;(JuanpiJni.&#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;()));
  12.         }
  13.         catch(Exception v1) {
  14.             v1.printStackTrace();
  15.         }

  16.         return v0;
  17.     }
  18. ------------------------------------------------------------
  19. public class &#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306; {
  20.     public static byte[] &#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;;

  21.     static {
  22.         &#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;.&#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306; = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  23.         if(Boolean.FALSE.booleanValue()) {
  24.             System.out.println(Hack.class);
  25.         }
  26.     }

  27.     public static String &#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;(String arg5, String arg6) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
  28.         byte[] v0 = arg5.getBytes("UTF-8");
  29.         IvParameterSpec v1 = new IvParameterSpec(&#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;.&#2325;&#2376;&#2354;&#2360;&#2325;&#2381;&#2352;&#2346;&#2351;&#2379;&#2327;&#2325;&#2381;&#2340;&#2366;&#2323;&#2306;);
  30.         SecretKeySpec v2 = new SecretKeySpec(arg6.getBytes("UTF-8"), "AES");
  31.         Cipher v3 = Cipher.getInstance("AES/CBC/PKCS5Padding");
  32.         v3.init(1, ((Key)v2), ((AlgorithmParameterSpec)v1));
  33.         return Base64.encodeToString(v3.doFinal(v0), 0);
  34.     }


复制代码


第四步 总结

1 . apisign = MD5("jpAppName=jiu&jpAppNetwork=4&jpAppVersion=4.9.1&jpDeviceName=oppo a59m&jpDid=359593493182282&jpFeature=&jpFreshUtype=&jpGoodsUtype=&jpId=00000000-56a5-e113-4dd3-5e175b8a34c1&jpJpidAbAttr=9&jpLocation=上海市&jpLoginSource=&jpPlatform=Android&jpReleaseLevel=1&jpScreen=720x1280&jpSign=&jpSize=l&jpSystemVersion=5.1.1&jpTicks=1533902307556&jpTimeLine=2&jpToSwitch=2&jpUid=0&jpUidAbAttr=8&jpUserGroup=&jpUtm=101218&password=kvDHs5GQlLv2v9hHZR2uBA==
&piccode=&username=CtN7Fw+mkXB6D4mel1BIUQ==
&verifyid=juanpi_oauth#$A.*$%(#$%16rwtr712^")



PS:
apisign =MD5(body + “juanpi_oauth#$A.*$%(#$%16rwtr712^”);


==========================================================================


2. password = AES/CBC/PKCS5Padding(pwd,key,iv);
    username == AES/CBC/PKCS5Padding(user,key,iv);
   
PS:  key = 85d32385edcd3304be7fbf4be51d3a2f;
       iv = Hex.parse(0000000000000000);)







点评

视频教学体验感更好一些   北京市北京市  发表于 2018-8-13 11:15

评分

参与人数 1好评 +1 收起 理由
无敌灰灰 + 1 新技能已get√

查看全部评分


结帖率:92% (12/13)

签到天数: 25 天

发表于 2018-8-21 17:33:15 | 显示全部楼层   河南省郑州市
感谢楼主分享谢谢
回复 支持 反对

使用道具 举报

结帖率:100% (6/6)

签到天数: 3 天

发表于 2018-8-14 23:36:30 | 显示全部楼层   广东省汕头市
大佬,能出视频教程吗
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)
发表于 2018-8-14 11:55:49 | 显示全部楼层   广东省广州市
我想问的第3步的逆向可以查看源代码的吗??
回复 支持 反对

使用道具 举报

结帖率:86% (19/22)
发表于 2018-8-13 22:19:13 | 显示全部楼层   河南省南阳市
支持一下            
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)
发表于 2018-8-11 08:48:24 | 显示全部楼层   山西省运城市
支持支持楼主
回复 支持 反对

使用道具 举报

结帖率:19% (3/16)

签到天数: 4 天

发表于 2018-8-10 21:31:52 高大上手机用户 | 显示全部楼层   浙江省杭州市
看看。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表