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() /
1000
L);
// 时间戳
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):安卓逆向 | JEB静态分析APK
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论