某江app算法分析

一、抓包分析

1、数据包

GET  http://m.api.zt.jsw.com.cn/v2/member?password=a123456&clientid=1&device_id=010067028741939&ip=1.1.1.1&system_name=android&sign=e96e177e2b9ed89680ac754916333527&siteid=10001&time=1630198142862&type=android&account=15836353612&modules=cloudlogin%3A1 HTTP/1.1Content-Length: 0Host: m.api.zt.jsw.com.cnConnection: Keep-AliveAccept-Encoding: gzip

2、分析参数,只有sign是密文

二、将app拖进jeb分析

1、搜索关键词"sign"

2、tab键转换成java代码,需要查看b.a方法

public RequestParams a(RequestParams params, Context context) {        params.put("device_id", PhoneInfoUtils.getDeviceId(context));        params.put("clientid", "1");        params.put("ip", AppUtil.getLocalIP());        long timestamp = System.currentTimeMillis();        params.put("siteid", "10001");        params.put("system_name", "android");        params.put("type", "android");        params.put("sign", b.a(params.getURLHashMap(), timestamp + ""));        params.put("time", timestamp + "");        return params;    }

3、双击进入b.a方法,倒着看,v4是最终结果,v9_2是第一次md5,v6是第二次md5,v9_1是md5的参数

public static String a(HashMap arg14, String time) {        LinkedHashMap sortParams = new LinkedHashMap();        Object[] key_arr = arg14.keySet().toArray();        Arrays.sort(key_arr);        int v10;        for(v10 = 0; v10 < key_arr.length; v10 = (((int)v9)) + 1) {            Object key = key_arr[v10];            try {                String v12 = key.toString();                String v9 = URLEncoder.encode(((String)arg14.get(key)).toString(), "UTF-8");                sortParams.put(v12, v9);            }            catch(UnsupportedEncodingException e) {                e.printStackTrace();            }        }        StringBuilder result = new StringBuilder();        for(Object v1: sortParams.entrySet()) {            Map.Entry entry = (Map.Entry)v1;            if(result.length() > 0) {                result.append("&");            }            result.append(((String)entry.getKey()));            result.append("=");            result.append(((String)entry.getValue()));        }        String v9_1 = result.toString().replace("*", "%2A").replace("%7E", "~").replace("+",  "%20");        crack.log(v9_1);        String v6 = MD5.md5(v9_1);        crack.log(v6);        String v9_2 = v6 + "1fa50ba25ed527f3fd1eb9467686f2bb" + time;        crack.log(v9_2);        String v4 = MD5.md5(v9_2);        crack.log(v4);        return v4;    }

4、在上面三处处下断

5、动态调试,触发断点

v9=account=15836353612&clientid=1&device_id=010067028741939&ip=1.1.1.1&modules=cloudlogin%3A1&password=a123456789&siteid=10001&system_name=android&type=android

V6=585179fa211c64189ef1cfb45b8b5e52

6、v6是v9的md5值

7、第二个

v9=2db65aefd5f993ee290b7b709edc8f46+1fa50ba25ed527f3fd1eb9467686f2bb+1630223825602,再进行一次md5加密,记得去了+,这里只是让大家看清楚

禁止非法,后果自负

欢迎关注公众号:逆向有你

欢迎关注视频号:之乎者也吧

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
某flutter-app逆向分析是指对于一个使用flutter框架开发的应用进行逆向工程分析。逆向工程是通过分析应用的代码、二进制文件等来了解其内部实现细节。 首先,我们需要获取该应用的安装包文件(APK或IPA文件),然后进行解包操作,将其转换为可读取的文件目录结构。 接下来,我们可以使用一些工具来提取应用的资源文件、代码文件等。对于flutter-app来说,可以提取出dart文件,这是flutter的主要代码文件,其中包含了应用的逻辑实现。 通过阅读dart文件,我们可以了解应用的代码结构、数据模型、界面设计等。可以分析应用的逻辑实现方法,包括各种函数、类、方法的调用关系。 同时,还可以通过分析相关配置文件、资源文件等来了解应用的各种设置、资源加载方式等。 在逆向过程中,还可以使用一些调试工具来进一步了解应用的运行机制。例如,hook工具可以拦截应用的函数调用,并捕获输入输出数据,用于进一步分析。 逆向分析的目的可以有很多,比如了解应用的工作原理、发现潜在的漏洞或安全问题、提供参考用于自己的开发等。 需要注意的是,逆向分析需要遵守法律规定。未经授权的逆向分析可能侵犯他人的知识产权,涉及到隐私等方面的问题。因此,在进行逆向分析之前,应该了解并遵守当地相关法律法规,避免产生法律纠纷。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值