2020网鼎杯玄武组移动安全wp

ps:题目是别人发给我的,本人太菜没资格参加这个比赛

vulcrack

首先jadx打开,发现是一个壳程序
在这里插入图片描述

libjiabu.so和包名这些很容易看出是一个360壳,这里采用最近各大论坛比较流行的frida-dexDump进行脱壳

讲道理这题挺恶心人的,我用安卓模拟器打开的时候无法运行,感觉可能是该360壳存在模拟器检测,那么没办法只有使用真机进行操作,然鹅我的真机的比较辣鸡,启动frida经常报错,其中甚至考虑过手动脱壳,最后折腾半天终于完成脱壳。

脱壳过程

启动frida_server:

cd /data/local/tmp
./frida_server

端口转发:

adb forward tcp:27042 tcp:27042

然后运行apk,运行main.py

python main.py

分析dex

拿到dex之后,查看发现主要加密地址
在这里插入图片描述

脱壳完成后的逻辑就非常简单了

(1)将keyFirst和keySecond进行base64解码,

(2)传入到comm方法中进行一些处理

python脚本解密:

import base64

keyFirst = "Zm1jan85NztBN0c0NjJIOzJGLzc8STk0OTZFSDE="
keySecond = "QTpISTlFNEkxRTY8fQ=="
flag = []
First=base64.b64decode(keyFirst)
Second=base64.b64decode(keySecond)
for i in range(len(First)):
    flag.append(First[i] - (i % 8))
for i in range(len(Second)):
    flag.append(Second[i] - (i % 4))
print(bytes(flag))

在这里插入图片描述

解密得出flag为:
flag{414A6E12-B42E-48D3-95CE-A9FF9D2F1D49}

总结

本题的难点主要在脱壳上,使用工具脱壳极大简化了这一步,以后研究一些脱壳过程写一份手动脱壳方案。

java

首先打开jadx分析,题如其名,所有的代码都在java层

在这里插入图片描述

分析

主要的加密逻辑存放在a方法中:

(1)首先初始化数组bArr

(2)将字符串a,b进行AES加密操作

在这里插入图片描述

(3)调用a方法,先将aes加密后的字符串和按位异或22后,在和c类中的c数组按位异或操作

在这里插入图片描述

(4)将异或完成后的字符串进行base64编码后和字符串b进行比较

这里有一个小坑,就是程序代码中有一个地方将字符串c.a中的一个字符进行了替换

在这里插入图片描述

我起初写脚本时始终报错
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 3: invalid continuation byte,最后通过动态调试查看具体逻辑才发现了这个替换的地方

python脚本

import base64
from Crypto.Cipher import AES

b = "VsBDJCvuhD65/+sL+Hlf587nWuIa2MPcqZaq7GMVWI0Vx8l9R42PXWbhCRftoFB3"

c = [214, 144, 233, 254, 204, 225, 61, 183, 22, 182, 43, 103, 20, 194, 40, 251, 44, 5, 43, 103, 154, 118, 42, 190, 4,195, 43, 103, 170, 68, 19, 38, 73, 134, 43, 103, 153, 156, 66, 80, 244, 145, 80, 103, 239, 152, 122, 98, 50, 214]

x = base64.b64decode(b)

y = []
for i in range(len(x)):
    y.append(x[i] ^ 22 ^ c[i])
y = bytes(y)

aeskey = "aes_check_key!@#".replace('e','o').encode("utf-8")
cipher = AES.new(aeskey, AES.MODE_ECB)
z = cipher.decrypt(y)
flag=str(z,encoding="utf-8")
print(flag)

输出结果为:
flag{67587AAF-C20A-4B6D-991B-A40FD3C2098E},测试结果通过。

在这里插入图片描述

总结

这个题目还是比较简单了,我也是后来才得到这个题目,此题都是java逻辑,唯一坑人的地方就是那个替换,我是借助动态调试的方式解决的

欢迎个人关注公众号了解更多资料:

猜你喜欢

转载自blog.csdn.net/weixin_43632667/article/details/106389279