扫码领资料
获网安教程
JEB反编译APK-静态审计,找到加密算法
参考来源:https://blog.csdn.net/weixin_38819889/article/details/108910525 apk来源:https://app5.scrape.center/ 软件&工具:JEB / 雷电模拟器 / burpsuite 声明:scrape.center是一个爬虫逆向练习网站,本文仅做学习交流使用,并未进行渗透测试,切勿用作其他用途。
抓包分析
-
token字段是必须的 -
token字段可能含有时间戳等信息 -
token字段经过了加密
JEB静态分析
.field public static final indexPath:String = "/api/movie"
package com.goldze.mvvmhabit.data.source.http.service;import io.reactivex.Observable;import retrofit2.http.GET;import retrofit2.http.Query;public interface MovieApiService { public static final String indexPath = "/api/movie"; Observable index( int arg1, int arg2, String arg3);}
public Observable index(int arg3, int arg4) {
ArrayList v1 = new ArrayList();
v1.add("/api/movie");
String v0 = Encrypt.encrypt(v1);
return this.apiService.index((arg3 - 1) * arg4, arg4, v0);
}
package com.goldze.mvvmhabit.utils;
import android.text.TextUtils;
import android.util.Base64;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
public class Encrypt {
public static String bytes2Hex(byte[] arg5) {
String v0 = "";
int v1;
for(v1 = 0; v1 < arg5.length; ++v1) {
String v2 = Integer.toHexString(arg5[v1] & 0xFF);
if(v2.length() == 1) {
v0 = v0 + "0";
}
v0 = v0 + v2;
}
return v0;
}
public static String encrypt(List arg4) {
String v0 = String.valueOf(new Timestamp(System.currentTimeMillis()).getTime() / 1000L); // 时间戳
arg4.add(v0); // arg4 = ['/api/movie','时间戳']
String v4 = Encrypt.shaEncrypt(TextUtils.join(",", arg4)); // 字符串拼接后加密
ArrayList v1 = new ArrayList();
v1.add(v4);
v1.add(v0); // v1 = [sha1(v4),‘时间戳’]
return Base64.encodeToString(TextUtils.join(",", v1).getBytes(), 0); // return base64((v4,时间戳)) , 0表示没有任何标志位
}
public static String shaEncrypt(String arg1) { // sha1加密
try {
MessageDigest v0 = MessageDigest.getInstance("SHA-1");
v0.update(arg1.getBytes());
return Encrypt.bytes2Hex(v0.digest());
}
catch(NoSuchAlgorithmException unused_ex) {
return null;
}
}
}
import hashlib
import base64
import time
import requests
url = "https://xxx/api/movie/?offset={offset}&limit={limit}&token={token}"
offset = 0
limit = 100
v4 = ['/api/movie']
def gen_token(v4):
timestamp = str(int(time.time()))
v4.append(timestamp)
str_sha = hashlib.sha1(','.join(v4).encode('utf-8')).hexdigest()
str_bases = base64.b64encode(','.join([str_sha,timestamp]).encode('utf-8')).decode('utf-8')
return str_bases
token = gen_token(v4)
url = url.format(offset=offset,limit=limit,token=token)
res = requests.get(url)
print(res.text)
# print(url)
# print(gen_token(v4))
申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,
所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.
没看够~?欢迎关注!
分享本文到朋友圈,可以凭截图找老师领取
上千教程+工具+靶场账号哦
原文始发于微信公众号(掌控安全EDU):andriod逆向入门 | JEB静态分析APK
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论