吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6243|回复: 26
收起左侧

[Android 原创] 记录某书中的包内容签名值

[复制链接]
qtfreet00 发表于 2017-1-18 09:38
随便抓了个请求包显示如下:
QQ截图20170118092703.png

发现在Header头中多了几个auth参数,后面像是md5,反编译看下具体是怎么计算的

jadx搜索X-Auth,很好找到
[Java] 纯文本查看 复制代码
        String timestamp = (System.currentTimeMillis() / 1000) + "";
        aa modifiedResponse = chain.a(request.e().a(url).a(headers).a("X-Timestamp", timestamp).a("X-Auth-1", ao.a(JSMainApplication.f() + timestamp)).a("X-AUTH-2", ao.a(userRB.mobile_token + (System.currentTimeMillis() / 1000))).a());
        if (modifiedResponse.d()) {
            return modifiedResponse;
        }
        a(errorMessage);

可以看到第一个auth参数是根据f()函数的值和当前时间戳(此处/1000,所以单位为秒),最后进行了a函数的调用,首先看下a函数
[Java] 纯文本查看 复制代码
    public static String a(String s) {
        char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] strTemp = s.getBytes("UTF-8");
            MessageDigest mdTemp = MessageDigest.getInstance("MD5");
            mdTemp.update(strTemp);
            char[] str = new char[(j * 2)];
            int k = 0;
            for (byte b : mdTemp.digest()) {
                int i = k + 1;
                str[k] = hexDigits[(b >> 4) & 15];
                k = i + 1;
                str[i] = hexDigits[b & 15];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";
        } catch (UnsupportedEncodingException ue) {
            ue.printStackTrace();
            return "";
        }
    }

很简单的md5,那就关注一下f()函数,
[Java] 纯文本查看 复制代码
 sAppSecurityKey = Safejni.encryptAppKey();

发现f函数的作用就是返回一个encryptAppKey,跟进后发现最终调用了个native函数,IDA载入后找到对应函数
QQ截图20170118093217.png
f5后发现函数反汇编是不正常的
QQ截图20170118093304.png
空格来到流程图模式下,点击remove funtion tail --> force BL call后效果如下
QQ截图20170118093439.png

再次f5后即正常显示了
QQ截图20170118093520.png
可以看到这里就是简单的字符串复制和拼接,最后返回的就是18ce9f021f1840fb93108ed2a899fb3a

第二个auth参数是根据用户当前token来的,没什么好分析的了

总结:
不太懂他起名为safe-jni的原因是什么

点评

不太懂他起名为safe-jni的原因是什么”,原因就是给人一种安全的感觉!!  发表于 2017-1-19 18:03

免费评分

参与人数 5吾爱币 +14 热心值 +5 收起 理由
duanbin_109 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
siuhoapdou + 1 + 1 谢谢@Thanks!
联盟少侠 + 2 + 1 safe给人一种安全的感觉
Hmily + 8 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
帅的谁爱 + 2 + 1 嘿嘿,崇拜中。。。。

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
liuhaijiji5807 发表于 2017-1-18 10:12
提示: 作者被禁止或删除 内容自动屏蔽
淡然出尘 发表于 2017-1-18 10:55
本帖最后由 淡然出尘 于 2017-1-18 10:56 编辑

用反射得需要传进去对象吧
虽然可以直接获取CurrentApplication,这种情况还是比较少的
小锤子起钉儿 发表于 2017-1-18 09:43
wyy1818118 发表于 2017-1-18 10:26

厉害了我的哥,十分崇拜
淡然出尘 发表于 2017-1-18 10:31
傻..
看下 JSMainApplication.f() 函数的结构,
Native层没有传参,返回一个String,
显而易燃,一定是固定的,不用分析SO,直接打印就好
 楼主| qtfreet00 发表于 2017-1-18 10:46
淡然出尘 发表于 2017-1-18 10:31
傻..
看下 JSMainApplication.f() 函数的结构,
Native层没有传参,返回一个String,

万一我用了反射呢
 楼主| qtfreet00 发表于 2017-1-18 11:26
淡然出尘 发表于 2017-1-18 10:55
用反射得需要传进去对象吧
虽然可以直接获取CurrentApplication,这种情况还是比较少的

擦 膜拜淡然大神啊
Ericky 发表于 2017-1-18 12:34
过来膜拜,最后的总结亮了

云中岳 发表于 2017-1-18 12:40
吃瓜群众坐看两位大神切磋
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 23:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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