静态分析网易新闻搜索加密参数sign

由于需要采集网易新闻的关键词搜索用户并且采集用户发文
爬虫太难混了,简单分析下一般参数加密的思路

通过抓包发现参数sign加密且服务端有校验

在这里插入图片描述

通过 jadx 查看apk客户端源码 搜索 “sign” 相关的字段 最终定位到

在这里插入图片描述

str9是a2和时间戳组成,然后通过加密得出sign,点进去发现加密调用了native方法

在这里插入图片描述
在这里插入图片描述
通过IDA打开librandom.so文件并且找到encrypt方法,发现是静态注册

在这里插入图片描述

通过F5转为C代码

在这里插入图片描述
进入到doEn方法中,很容易分辨出是是AES或者DES加密方式

在这里插入图片描述
转为java代码

在这里插入图片描述

结果图

在这里插入图片描述

完整代码

public class AES {

    private static String iv = "00000000000000000000000000000000";//偏移量
    private static String key = "neteasenewsboard";//秘钥
    private static final String ALGORITHM = "AES/ECB/PKCS5Padding";//"算法/模式/补码方式"
    private static Cipher cipher;

    /**
     * 加密
     *
     * @param sSrc 需要加密的字符串
     * @return
     * @throws Exception
     */
    public static String encrypt(String sSrc) {
        try {
            byte[] raw = key.getBytes();
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            cipher = Cipher.getInstance(ALGORITHM);//"算法/模式/补码方式"
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(sSrc.getBytes());
            return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 解密
     *
     * @param sSrc 需要解密的字符串
     * @return
     * @throws Exception
     */
    public static String decrypt(String sSrc) {
        try {
            byte[] raw = key.getBytes();
            SecretKeySpec skc = new SecretKeySpec(raw, "AES");
            cipher = Cipher.getInstance(ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, skc);
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);
            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original);
                return originalString;
            } catch (Exception e) { 
                return null;
            }
        } catch (Exception ex) {
            return null;
        }
    }

    public static void main(String[] args) {
        System.out.println(AES.encrypt("d74d52a7ccdd3a291c8bf1329d0ffd4b"));
        System.out.println(AES.decrypt("A5j4pBHLPAVcYrsPFf99Mj1vW3Wpgvf9/DLIHMfzogx48ErR02zJ6/KXOnxX046I"));
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值