首页
社区
课程
招聘
[原创]DASCTF八月挑战赛 Android 逆向 apkrev
发表于: 2021-9-8 14:30 16103

[原创]DASCTF八月挑战赛 Android 逆向 apkrev

2021-9-8 14:30
16103

Android 逆向
题目链接:https://buuoj.cn/match/matches/28/challenges#apkrev
下载后解压可得一个名为 apkrev 的 apk 文件,扔到模拟器里运行。

包含一个输入框和一个按钮,随便输入123,Toast 显示 fail。使用 jeb 打开。

在 MainActivity 上右键反编译。

可以看到,调用了 so 文件中的检验函数 myCheck(),参数为输入的字符串。

把 so 文件(x86)扔进 IDA,并在函数窗口搜索 myCheck 函数,双击跳转,F5,从返回开始看起:

返回值 v28 只在 136 行被赋值为 1,其余均为 0;
显然,132 行的 while 循环是在比较输入字符串经过一系列处理后是否与密文 enc 相同。v27 从 0 开始自增,直至大于 0x1F(即 31)时,循环结束。
先查看 enc:

用脚本将 enc 复制出来。在 IDA 中按快捷键 Shift + F2:

python 源码:

继续分析代码可以看出,输入字符串长度应为 32,且只在此处进行了异或操作:

于是考虑动态调试 so 文件,思路参考 [1],调试方法参考 [2] 和 [3]。
思路:输入错误的 flag,得到假密文,将错误的 flag 、假密文、真密文进行异或,即可得到真 flag。

新建 cmd 窗口,命令如下:

再建一个 cmd 命令行窗口,使用 forward 程序进行端口转发:

至此,可通过脚本计算出 flag:

提交验证:

over!

参考:

非常感谢!

from idaapi import *
bytes_addr = 0x00033004
bytes_size = 32
data = get_bytes(bytes_addr,bytes_size)
L = [hex(ch) for ch in data]
print (L)
# 真密文
# ['0x8c', '0xc4', '0x0', '0xe6', '0x6a', '0x88', '0xb8', '0x90', '0xc2', '0x7', '0x6b', '0xa9', '0xc3', '0xa', '0x3e', '0xc0', '0x44', '0xa6', '0xfe', '0x7e', '0xf0', '0x59', '0x4c', '0x83', '0x3d', '0x2b', '0xe2', '0xd3', '0x38', '0xcb', '0x82', '0x5b']
from idaapi import *
bytes_addr = 0x00033004
bytes_size = 32
data = get_bytes(bytes_addr,bytes_size)
L = [hex(ch) for ch in data]
print (L)
# 真密文
# ['0x8c', '0xc4', '0x0', '0xe6', '0x6a', '0x88', '0xb8', '0x90', '0xc2', '0x7', '0x6b', '0xa9', '0xc3', '0xa', '0x3e', '0xc0', '0x44', '0xa6', '0xfe', '0x7e', '0xf0', '0x59', '0x4c', '0x83', '0x3d', '0x2b', '0xe2', '0xd3', '0x38', '0xcb', '0x82', '0x5b']
D:\IDA Pro\IDA Pro 7.5\dbgsrv>adb push android_x86_server
adb.exe: push requires an argument
 
D:\IDA Pro\IDA Pro 7.5\dbgsrv>adb push android_x86_server /data/local/tmp
android_x86_server: 1 file pushed, 0 skipped. 30.5 MB/s (1130104 bytes in 0.035s)
 
D:\IDA Pro\IDA Pro 7.5\dbgsrv>adb shell
aosp:/ # su
aosp:/ # cd /data/local/tmp
aosp:/data/local/tmp # ll
total 1104
-rw-rw-rw- 1 root root 1130104 2020-12-11 22:18 android_x86_server
aosp:/data/local/tmp # chmod 777 android_x86_server
aosp:/data/local/tmp # ./android_x86_server
IDA Android x86 32-bit remote debug server(ST) v7.5.26. Hex-Rays (c) 2004-2020
Listening on 0.0.0.0:23946...
D:\IDA Pro\IDA Pro 7.5\dbgsrv>adb push android_x86_server
adb.exe: push requires an argument
 
D:\IDA Pro\IDA Pro 7.5\dbgsrv>adb push android_x86_server /data/local/tmp
android_x86_server: 1 file pushed, 0 skipped. 30.5 MB/s (1130104 bytes in 0.035s)
 
D:\IDA Pro\IDA Pro 7.5\dbgsrv>adb shell
aosp:/ # su
aosp:/ # cd /data/local/tmp
aosp:/data/local/tmp # ll
total 1104
-rw-rw-rw- 1 root root 1130104 2020-12-11 22:18 android_x86_server
aosp:/data/local/tmp # chmod 777 android_x86_server
aosp:/data/local/tmp # ./android_x86_server
IDA Android x86 32-bit remote debug server(ST) v7.5.26. Hex-Rays (c) 2004-2020
Listening on 0.0.0.0:23946...
C:\Users\admin>adb forward tcp:23946 tcp:23946
23946
 
C:\Users\admin>adb forward --list
emulator-5554 tcp:23946 tcp:23946
C:\Users\admin>adb forward tcp:23946 tcp:23946
23946

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 980
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬,招安卓逆向,有兴趣私聊~
2022-1-12 16:01
0
游客
登录 | 注册 方可回帖
返回
//