|
来源:先知社区,作者:小*咔
现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
0x00 前言
0x01 流程
选择相应版本安装到测试机当中
进行抓包,查看数据包
分析登录请求包,找到需要进行逆向的字段
反编译APP,得到java代码
寻找关键字,进行hook验证
还原算法
0x02 逆向破解
#启动adb服务
adb
start
-
server
#安装目标APP
adb
install
目标app.ap
电脑端:配置BP代理端口
逆向密码加密
因为请求的是登录的数据包,所以我们搜索login/login.ashx关键字
如果此时不确定是否是MD5加密时,可以利用Python代码进行确认,对123456进行加密
import
hashlib
md5 = hashlib.md5()
md5.update(b
"123456"
)
(md5.hexdigest())
如果还想更确认,还可以通过hook确认加密位置
adb shell
su
cd
/data/
local
/tmp/
ls
./frida-server-16.1.7-an
进行端口转发
import
subprocess
subprocess
.getoutput
("
adb
forward
tcp
:27042
tcp
:27042")
subprocess
.getoutput
("
adb
forward
tcp
:27043
tcp
:27043")
这时需要分析是否是第一个toSign进行加密的,hook toSign确认位置是否正确
逆向udid
通过上述步骤发现了加密的位置,后面需要破解SignManager.INSTANCE.signByType是如何加密的以及udid是怎么来的
udid加密过程:通过SecurityUtil.encode3Des,传入了context和字符串
getIMEI(context)
# 手机的IMEI
HiAnalyticsConstant.REPORT_VAL_SEPARATOR
# 固定的字符串就是 |
System.nanoTime()
# 手机开机时间
HiAnalyticsConstant.REPORT_VAL_SEPARATOR
# 固定的字符串就是 |
SPUtils.getDeviceId()
# 设备id号
在了解一下context是什么东西
在安卓(Android)开发中,Context是一个非常重要的概念,它代表了应用程序的当前状态信息。每个Android应用程序都有一个Context,它允许应用程序访问系统资源和执行各种操作。Context通常是由Android系统传递给应用程序的各个组件(如Activity、Service、BroadcastReceiver等),以便它们能够与系统和其他组件进行交互。 # getContext() 获取这个对象
Context的主要作用包括:
1、访问资源:通过Context,您可以访问应用程序的资源,如布局文件、字符串、图片等。这是因为Context持有对应用程序资源的引用,使您能够在应用程序中加载和使用这些资源。
2、启动组件:通过Context,您可以启动其他组件,如Activity、Service、BroadcastReceiver等。例如,您可以使用Context启动一个新的Activity来打开新的界面。
3、获取系统服务:通过Context,您可以获取系统级别的服务,例如获取系统的传感器、网络状态、存储管理等。这些服务是通过系统提供的服务注册表(Service Registry)来获取的。
4、应用程序级别的操作:Context还可以用于执行应用程序级别的操作,如发送广播、获取应用程序包名、获取应用程序的数据目录等。
getIMEI(context)
public
static
String
getIMEI
(
Context context
)
{
if
(PermissionsCheckerUtil.hasReadPhoenStatePermission(context)) {
String imei = SPUtils.getIMEI();
if
(imeiIsNull(imei)) {
imei = ((TelephonyManager) context.getSystemService(
"phone"
)).getDeviceId();
if
(imeiIsNull(imei)) {
String macAddress = ((WifiManager) context.getSystemService(NetworkUtil.NETWORK_TYPE_WIFI)).getConnectionInfo().getMacAddress();
if
(macAddress !=
null
) {
try
{
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace();
context = getIMEIbyAndroidIDandUUID(context);
}
if
(macAddress.length() >
0
&& !isInBlackList(macAddress)) {
context = UUID.nameUUIDFromBytes(macAddress.getBytes(
"utf8"
)).toString();
imei = context;
}
}
context = getIMEIbyAndroidIDandUUID(context);
imei = context;
}
if
(!imeiIsNull(imei)) {
SPUtils.saveIMEI(imei);
}
}
return
imei;
}
return
"sssss"
;
}
import random
nano_time = random.randint(5136066335773,7136066335773)
SPUtils.getDeviceId()
public
static
String
getDeviceId
(
)
{
return
getSpUtil().getString(KEY_DEVICE_ID,
""
);
}
从源码中可以看出这里是DES加密,有key和iv值,它所加密的明文就是上文中提到的字符串
appapiche168comappapiche168comap
最后使用代码实现udid加密
# pip install pycryptodome
import base64
from Crypto.Cipher import DES3
BS = 8
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
# 3DES的MODE_CBC模式下只有前24位有意义
key = b'appapiche168comappapiche168comap'[0:24]
iv = b'appapich'
plaintext = pad(
"cf15599b-5e93-3be5-a705-a39403227dfd|13359325995159|366586"
).encode(
"utf-8"
)
# 使用MODE_CBC创建cipher
cipher = DES3.new(key, DES3.MODE_CBC, iv)
result = cipher.encrypt(plaintext)
res = base64.b64encode(result)
print(res)
treeMap
.put
("_
sign
",
SignManager
.INSTANCE
.signByType
(
i
,
treeMap
));
-
str:因为i是1,str=KEY_V2 KEY_V2是固定的值:W@oC!AH_6Ew1f6%8 -
sb.append(str):字符串拼接:先把固定字符串W@oC!AH_6Ew1f6%8拼接上,之后把循环的字典在进行拼接,后面又出现sb.append(str)是把字符串W@oC!AH_6Ew1f6%8拼到最后,然后使用MD5进行加密。
整合代码即可得到_sign的值
import
hashlib
def
md5
(data_string)
:
obj = hashlib.md5()
obj.update(data_string.encode(
'utf-8'
))
return
obj.hexdigest()
data =
"W@oC!AH_6Ew1f6%8"
data_dict = {
"_appid"
:
"atc.android"
,
"appversion"
:
"3.37.0"
,
"channelid"
:
"csy"
,
"pwd"
:
"e10adc3949ba59abbe56e057f20f883e"
,
"udid"
:
"fBricFHfQGIN%2Bam5jCTzG5yze/fO/pLP%2BIZgbuZKaGN0HiRwd1IPVQeCzaqV QpGO0zsKKfLxUlSpiG6FGQaNxA=="
,
"username"
:
"13111111111"
}
result =
""
.join([
"{}{}"
.format(key, data_dict[key])
for
key
in
sorted(data_dict.keys())])
un_sign_string =
f"
{data}
{result}
{data}
"
sign = md5(un_sign_string).upper()
print(sign)
文章来源:先知社区(小*咔)
原文地址:https:
//xz.aliyun.com/t/14306
关注我们
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论