EXE 取证

1-5

嫌疑人手机微信聊天记录 dump 出压缩包和密码,放在微步在线沙箱中五个一把梭子。

APK取证

jadx-gui工具。

1

APK signature 直接可以看到。

2

base64 decode aHR0cHM6Ly9hbnNqay5lY3hlaW8ueHl6

4

Manifest.xml

1
<meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="exec.azj.kny.d.c|__W2A__nansjy.com.cn|127356250608|"/>

5

1659608791509

感觉这个也算安全检测,选了是

7

assets/html 下有三个页面

8

解压缩以后找到Info.plist这个文件

1
2
<key>CFBundleIdentifier</key>
<string>com.dd666.hongxin</string>

包名就是com.dd666.hongxin

9

1
2
<key>APIKey</key>
<string>d395159c291c627c9d4ff9139bf8f0a700b98732</string>

key就是d395159c291c627c9d4ff9139bf8f0a700b98732

10

1
2
3
4
<string>红星想使用您的麦克风</string>
<string>红星想使用您的地理位置信息</string>
<string>红星想使用您的摄像头</string>
<string>红星想使用您的相册</string>

四个都有

11

用冒号+数字的组合暴力搜索文本内容

1659609322893

服务器地址就是www.nansjy.com.cn:8161

12

1
2
3
4
5
6
<activity android:theme="@style/AppTheme.Splash" android:name="com.example.weisitas526sad.activity.SplashActivity" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

这个com.example.weisitas526sad.activity.SplashActivity就是函数入口

reverse

经过动调发现关键函数为NimMainModule

前面判断了flag长度为42,且结构为flag{...}

关键部分如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
initBigInt__6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1987(v13, 10i64, &x__hello_40);
initBigInt__6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1987(
&TM__xLHv575t3PG1lB5wK05Xqg_12,
10i64,
&a__hello_41);
v22 = 0i64;
v23 = 0i64;
v21 = _mm_loadu_si128((const __m128i *)&x__hello_40);
v20 = _mm_loadu_si128((const __m128i *)&a__hello_41);
star___6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1219(&v21, &v20, &v22);
v15 = v22;
if ( v22 )
*(_QWORD *)(v22 - 16) += 8i64;
if ( temp__hello_42 )
{
v16 = temp__hello_42 - 16;
v17 = *(_QWORD *)(temp__hello_42 - 16) - 8i64;
*(_QWORD *)(temp__hello_42 - 16) = v17;
if ( v17 <= 7 )
addZCT__system_5314(refptr_gch__system_5267 + 3, v16);
}
temp__hello_42 = v15;
byte_42C188 = v23;
genericSeqAssign(&result__hello_43);
BYTE8(result__hello_43) = byte_42C188;
initBigInt__6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1987(
&TM__xLHv575t3PG1lB5wK05Xqg_16,
10i64,
&res__hello_44);
v21 = _mm_loadu_si128((const __m128i *)&result__hello_43);
v20 = _mm_loadu_si128((const __m128i *)&res__hello_44);
if ( (unsigned __int8)eqeq___6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_259(&v21, &v20) )
{
check__hello_3 = 1i64;
return echoBinSafe(&TM__xLHv575t3PG1lB5wK05Xqg_17, 1i64);
}

经过分析发现函数逻辑为大整数乘法initBigInt__6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1987这个函数只是一个初始化函数不用管,star___6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1219点进去发现是一个乘法函数,enc(也就是那个b)存在res_hello_44,a存在res_hello_41,乘出来的结果存在res_hello_43里,经过动调可以dump出ab,用小端序把他们连成一个大整数再用整除可以得到flag(注意要用整除,一开始没用整除错了好久)

1
2
3
4
b = 0x4732510f4379f99925cf3b2c29eafa1647b1e897a61bfd7c1d1807478d0e18a1ac9791d6dbb1bd74554fececc16519ce12ac443da1877ca8d9
a = 0x666c61677b63393461626261652d353263302d346461302d616666312d383839373730353839356337A7
c = b // a
print(c)

运行得到flag{923973256239481267349126498121231231}