0x00 日常查殼?
安卓逆向,我用JADX
0x01 值得注意的檔案
只有在這里檔案里所注冊的活動頁 才會被手機用戶觀察

0x02 分析主函式
于是直接分析MainActivity

關于這些R.string.xxx都一般存盤在
strings.xml存盤字串

然后現在簡單分析一下:
1. 經過用戶名和密碼的檢查
2. 密碼有段加密然后 - 1的操作
比賽的時候是連vpn登陸 當時用到就是靠這個登陸
然后在資源檔案里找
![]()
![]()
![]()
借鑒一下別人腳本
a = 'c232666f1410b3f5010dc51cec341f58'
for i in range(0,len(a),2):
f = a[i] + a[i+1] #加前后兩個數
f = int(f,16) + 1 #轉成十進制+1
print("%02x"%f,end="") #列印成16進制 列印兩位 不夠補0
然后解密一下獲得密碼

登錄就送碼表
![]()
0x03 分析程式流
當上面所有驗證通過之后跳轉到getKeyAndRedirect

這邊的會開始CheckFlagActivity的操作 安卓正向開發經驗不足 不過大概可以先猜key就是回傳來的那串字符

跳轉到這之后簡單看一下發現比較flag的地方
經過EncodeUtils后和encodeFlag比較

![]()
進去一看發現又是base加密,這時候key也可以確實就是打亂的碼表(沒有重復的字符長度64位)

0x04 GetFlag!
解密腳本
#include <stdio.h>
#include <string.h>
int main(void)
{
unsigned char key[] = "3lkHi9iZNK87qw0p6U391t92qlC5rwn5iFqyMFDl1t92qUnL6FQjqln76l-P";
char data[] = {"TGtUnkaJD0frq61uCQYw3-FxMiRvNOB/EWjgVcpKSzbs8yHZ257X9LldIeh4APom" };
int i, j;
unsigned int v3;
int flag[100] = {0};
// printf("\n");
for(i = 0; i < 60; i++)
for(j = 0; j < 64; j++)
if(key[i] == data[j])
{
key[i] = j;
// printf("%d:%d ",i,j);
break;
}
for(i = 0, j = 0; i < 60; i += 4, j += 3)
{
v3 = key[i+3] + (key[i+2] << 6) + (key[i+1] << 12) + (key[i] << 18);
flag[j] = (v3 >> 16) & 0xFF;
flag[j+1] = (v3 >> 8) & 0xFF;
flag[j+2] = v3 & 0xFF;
}
for(i = 0; i < 100; i++)
printf("%c",flag[i]);
return 0;
}
解密腳本詳情見
Buuctf-Reverse FlareOn3-Challenge Write up_水番正文的博客-CSDN博客
GetFlag!
![]()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/301552.html
標籤:其他
