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)
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)
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:
/
aosp:
/
aosp:
/
data
/
local
/
tmp
total
1104
-
rw
-
rw
-
rw
-
1
root root
1130104
2020
-
12
-
11
22
:
18
android_x86_server
aosp:
/
data
/
local
/
tmp
aosp:
/
data
/
local
/
tmp
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:
/
aosp:
/
aosp:
/
data
/
local
/
tmp
total
1104
-
rw
-
rw
-
rw
-
1
root root
1130104
2020
-
12
-
11
22
:
18
android_x86_server
aosp:
/
data
/
local
/
tmp
aosp:
/
data
/
local
/
tmp
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
[注意]APP应用上架合规检测服务,协助应用顺利上架!