EXE 取证 1-5 嫌疑人手机微信聊天记录 dump 出压缩包和密码,放在微步在线沙箱中五个一把梭子。
APK取证 jadx-gui工具。
1 APK signature 直接可以看到。
2 base64 decode aHR0cHM6Ly9hbnNqay5lY3hlaW8ueHl6
4 Manifest.xml1 <meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="exec.azj.kny.d.c|__W2A__nansjy.com.cn|127356250608|"/>
5
感觉这个也算安全检测,选了是
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 用冒号+数字的组合暴力搜索文本内容
服务器地址就是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, 10 i64, &x__hello_40); initBigInt__6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1987( &TM__xLHv575t3PG1lB5wK05Xqg_12, 10 i64, &a__hello_41); v22 = 0 i64; v23 = 0 i64; 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 ) += 8 i64; if ( temp__hello_42 ) { v16 = temp__hello_42 - 16 ; v17 = *(_QWORD *)(temp__hello_42 - 16 ) - 8 i64; *(_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, 10 i64, &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 = 1 i64; return echoBinSafe(&TM__xLHv575t3PG1lB5wK05Xqg_17, 1 i64); }
经过分析发现函数逻辑为大整数乘法,initBigInt__6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1987
这个函数只是一个初始化函数不用管,star___6758Z85sersZ65ZOnimbleZpkgsZbigints4548O53O48Zbigints_1219
点进去发现是一个乘法函数,enc
(也就是那个b)存在res_hello_44
,a存在res_hello_41
,乘出来的结果存在res_hello_43
里,经过动调可以dump出a
和b
,用小端序把他们连成一个大整数再用整除可以得到flag(注意要用整除,一开始没用整除错了好久)
1 2 3 4 b = 0x4732510f4379f99925cf3b2c29eafa1647b1e897a61bfd7c1d1807478d0e18a1ac9791d6dbb1bd74554fececc16519ce12ac443da1877ca8d9 a = 0x666c61677b63393461626261652d353263302d346461302d616666312d383839373730353839356337A7 c = b // a print (c)
运行得到flag{923973256239481267349126498121231231}