正在学习安卓逆向的萌新SR绝赞刷题中,昨天做了三道有意思的题目,感觉很适合入门,于是写了个wp发了出来
题目已上传至文章附件,想摸的dalao们可以看看(
安装并打开app,是一个简单的 输入-校验 式app
我们用JADX打开apk,看一下反编译代码
首先打开xml文件,这里写明了app启动时打开的Activity,确定是MainActivity后转到反编译代码处
如图,很容易确定代码逻辑——简单的异或操作
flag即为"versionName"的各个字符与"versionCode"进行异或操作的结果
跟进代码,找到需要的两个常量,写解题脚本
得到flag:W3l_T0_GAM3_0ne
本题结束
如同分析APP1一般,我们安装并打开APP2,同时使用JADX进行反编译
APP2界面上要求填写账号密码,但无论什么账号密码都有效,影响不大
对反编译代码进行分析,发现无论我们怎么输入,都会打开SecondActivity界面
同时发现代码中有一段校验
我们跟进加密方法,发现是个native方法,即利用JNI,调用写好在so文件中的函数
使用IDA打开so文件
从关键字AES_128_ECB_PKCS5Padding中即可知道加密方式
使用在线工具解密字符串,即可获得flag:“aimagetencent”
不过,得到的flag是错误的,我们继续分析代码
观察左侧的几个类,我们发现了第三个Activity:FileDataActivity
进入后发现存在使用了相同方式加密的字符串
解密后获得真正的flag:Cas3_0f_A_CAK3
提交后,考虑到我们在app中从未进入过FileDataActivity,决定打开这个Act一探究竟
使用adb自带的am命令(adb配置与连接的方法不多赘述)
手机app便跳转到了这个Activity,如图所示
使用这个方法,同样可以获得flag
本题结束
工具:JADX,DB Browser for SQLite,android-backup-extractor
题目文件是ab文件,即adb的备份文件,我们使用android-backup-extractor工具将其解压
压缩包内能找到apk文件和两个数据库文件
使用JADX打开apk,发现反编译出来的代码有点复杂(
我们还是跟踪到MainActivity处进行分析
关键字demo.db告诉我们,要找的关键代码就在这里,简单阅读了下代码逻辑后得出以下结论:
程序对Strange和123456字符串进行了一些操作,作为数据库的密码
至于进行了什么操作,我们慢慢分析
首先,调用了Cipher类的"mo6317a"函数(此处由JADX的反混淆功能生成,不同设备可能有所不同),该函数的作用是取两个字符串的前四个字符进行拼接
即"Stra1234"
然后以得到的字符串为参数,调用了Cipher类的"mo6318b"函数,跟踪过去发现,该函数进行了MD5和base16操作
最后,在加密结果的首部填上"Stra1234",以此为参数调用”mo6316a“函数,该函数的作用是:在参数尾部接上”yaphetshan“,进行SHA-1和base16操作
得到结果的前八位即为数据库密码:ae56f99
上方两个图片为Cipher类及其调用的加密类的代码,可以对照查看
使用DB Browserd打开db文件,输入密码,得到flag
将其进行base64解密,拿到最终的flag:Tctf{H3ll0_Do_Y0u_Lov3_Tenc3nt!}
本题结束
若有疑问可以在评论区提出!感谢各位的阅读与支持啦!
int
main()
{
char
str
[]
=
"X<cP[?PHNB<P?aj"
;
int
num
=
15
;
for
(
int
i
=
0
; i <
15
; i
+
+
)
{
printf(
"%c"
,
str
[i] ^ num);
}
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-4-8 17:41
被郁雨编辑
,原因: