Android Java Apk 反組譯分析 decompile reflection應用--BigFont為例
有需求才有動機,最近看到一款 BigFont 的 Apk 可以修改沒有root權限的手機的系統字型大小,我覺得算實用,該作者也滿厲害的,可以持續在Android上賺錢,我都放棄了(謎之聲:沒有開始哪來放棄Orz) 直接切入正題,安裝完確定他的功能可以Work之後,就隨便google了一下關於字型放大的API,網路上有人在教root完之後可以放大的,但確定沒有官方的API。 於是讓我想玩玩看 java 反組譯的技術,所以下載了工具 dex2jar跟 jd-gui 就可以把原始碼撈出來了。初步來看感覺是有混淆過的,沒想到一個小小的程式用了這麼多個Java 先從有名稱的 Java 看起,有一個明顯的是 SetFontWnd.java,於是進去看,配合應用程式的操作流程,我首先由字串找起,像是要開始設定之前,會出現甚麼提示文字,或是之後會出現甚麼文字,搜尋了"Normal" 跟 "Wait" 都沒有看到,看起來是 dex2jar 並沒有解出 android 的資源檔。於是開始做苦工,大略看了一下,看到了BgSrvc的叫用,看起來主功能就是在這個java裡面了,於是打開。 在BgSrvc.b()的呼叫,還滿像的,因為修改系統字型大小只有一個參數,float paramFloat 開頭如下,看起來很恐怖。 Object localObject1 = Class.forName(c).getMethod(d, new Class[0]).invoke(null, new Object[0]); Object localObject2 = localObject1.getClass(); Configuration localConfiguration = (Configuration)((Class)localObject2).getMethod(e, new Class[0]).invoke(localObject1, new Object[0]); localConfiguration.fontScale = paramFloat; ...