Android 逆向
题目链接:67dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1N6i4g2G2K9W2)9J5k6h3y4F1i4K6u0r3L8h3q4@1j5$3S2Q4x3V1k6E0j5i4c8U0K9r3g2K6i4K6u0r3x3U0S2Q4x3V1k6U0K9r3q4D9L8r3g2F1k6$3g2K6i4K6t1K6j5i4m8C8M7X3g2$3
下载后解压可得一个名为 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
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!