天天看點

安卓逆向系列教程 4.2 分析鎖機軟體安卓逆向系列教程 4.2 分析鎖機軟體

安卓逆向系列教程 4.2 分析鎖機軟體

作者: 飛龍

這個教程中我們要分析一個鎖機軟體。像這種軟體都比較簡單,完全可以順着入口看下去,但我這裡還是用關鍵點來定位。

首先這個軟體的截圖是這樣,進入這個界面之後,除非退出模拟器,否則沒辦法回到桌面。

安卓逆向系列教程 4.2 分析鎖機軟體安卓逆向系列教程 4.2 分析鎖機軟體

上面那個“時空先生”是個按鈕,直接按下會提示“密碼錯了”。我們以這個詞為關鍵詞來搜尋:

安卓逆向系列教程 4.2 分析鎖機軟體安卓逆向系列教程 4.2 分析鎖機軟體

發現字元串資源的名稱是

_?m@0x7f040007

。我們到

public.xml

裡面查一下,發現它的序号是

0x7f040007

,轉成十進制是

2130968583

<public type="string" name="_?m@0x7f040007" id="0x7f040007" />           

然後我們在反編譯的 Java 代碼裡面搜尋這個值:

paramAnonymous2View = (TextView)Floatw.access$L1000002(Floatw.this).findViewById(2131099651);
paramAnonymous2View.setText(Floatw.this.getResources().getString(2130968583));           

第一句是加載某個文本框,第二句是擷取字元串并設定文本。

我們再往上看:

@Override
public void onClick(View paramAnonymous2View)
{
    int i = Floatw.this.my_password;
    if (this.val$etext.getText().toString().equals(String.valueOf(i)))
    {
        paramAnonymous2View = Floatw.this;
        Floatw localFloatw = Floatw.this;
        try
        {
          Class localClass = Class.forName("com.as.xiaoyu.Floatw");
          paramAnonymous2View.stopService(new Intent(localFloatw, localClass));
          return;
        }
        catch (ClassNotFoundException paramAnonymous2View)
        {
          throw new NoClassDefFoundError(paramAnonymous2View.getMessage());
        }
    }
    // 剛才的代碼
    // ...
}           

如果

val$etext

的内容等于

i

的字元串值,那麼就會關閉服務并退出。我們往下看看便可知道,這個軟體啟動之後就建立了一個服務,服務中擷取了

WindowsManager

,然後加載了一個

LinearLayout

并添加它,來實作鎖屏的效果:

private void createFloatView()
{
    this.wmParams = new WindowManager.LayoutParams();
    Application localApplication = getApplication();
    this.mWindowManager = ((WindowManager)localApplication.getSystemService(Context.WINDOW_SERVICE));
    this.wmParams.type = 2010;
    this.wmParams.format = 1;
    this.wmParams.flags = 1280;
    this.wmParams.width = -1;
    this.wmParams.height = -1;
    this.mFloatLayout = ((LinearLayout)LayoutInflater.from(getApplication()).inflate(2130903041, (ViewGroup)null));
    this.mWindowManager.addView(this.mFloatLayout, this.wmParams);
    this.mFloatLayout.measure(View.MeasureSpec.makeMeasureSpec(0, 0), View.MeasureSpec.makeMeasureSpec(0, 0));
}           

也就是說,如果使服務關閉,那就解除了鎖屏。

我們檢視

onClick

的第一行,發現

i

my_password

,然後再找找

my_password

int my_password = this.number * 2 + 1;
int number = (int)((Math.random() + 1) * 100000);           

發現了這兩句,知道了它的值是

number

乘二再加一。但是

number

是什麼呢?我們再找找

number

Object localObject = (TextView)Floatw.access$L1000002(Floatw.this).findViewById(2131099650);
String str = Floatw.this.getResources().getString(2130968582);
((TextView)localObject).setText(str + String.valueOf(Floatw.this.number));           

這些代碼加載了一個文本框和字元串,然後将字元串與

number

拼接再顯示出來。這個字元串,我們以相同方式尋找,是

此機ID:

,那麼

number

就應該是後面的數字。我這裡是

108316

,那麼密碼就應該是

216633

下面有一句代碼:

localObject = (EditText)Floatw.access$L1000002(Floatw.this).findViewById(2131099649);           

2131099649

的十六進制為

0x7f060001

,經查找可知它是個輸入框:

<EditText android:textColor="#ff000000" android:id="@id/_?m@0x7f060001" android:background="#ffffffff" android:layout_width="200.0dip" android:layout_height="4.0dip" android:layout_marginEnd="200.0dip" />           

這裡反編譯出了一些問題,沒見到

val$etext

的直接指派,不過它應該就是這個編輯框。接下來的任務就是找到它。其實也不難,我們可以看到這個編輯框的高度很小,但是還有寬度,我們在按鈕左下方的大緻位置上點一點,它就出來了。

安卓逆向系列教程 4.2 分析鎖機軟體安卓逆向系列教程 4.2 分析鎖機軟體

我們把編輯框的内容全部删除,然後輸入

216633

,再次點選這個按鈕。

安卓逆向系列教程 4.2 分析鎖機軟體安卓逆向系列教程 4.2 分析鎖機軟體

解鎖成功。現在我們可以按下傳回鍵來退出了。

參考

繼續閱讀