用apktool 反編譯出smali, 而後再打包回去時,由於不知道百度的簽名,因此必須用另外的簽名。java
java -jar sign.jar .\baiduyun\dist\BaiduYun_7.12.1.apk
然而,百度的程序內部仍是會認證簽名,從而致使打包的程序不能運行。android
跟蹤smali文件,能夠看到這段代碼函數
.class public final Lcom/baidu/bdcvf/CertVerifier;
.method public _(Landroid/content/Context;Lcom/baidu/bdcvf/CertVerifier$ResultListener;)V .locals 0 .prologue .line 54 invoke-static {p1, p2}, Lcom/baidu/bdcvf/N;->a(Ljava/lang/Object;Ljava/lang/Object;)V .line 55 return-void .end method
[com/baidu/bdcvf/N;->a] 函數是用來調用lib\armeabi\libbdcvf.so 來驗證簽名的。
若是成功, 會調用CertVerifier$ResultListener的 _()V 函數, 若是失敗 調用 _(I)V 函數。
所以,全部應用了CertVerifier$ResultListener的類,用如下改法便可。
(測試時,由於com/baidu/netdisk/ui/Navigate 啓動Active 用到了 com/baidu/netdisk/ui/bg
因此就改了這一個)
.method public _(I)V .locals 2 .line 71 .prologue invoke-virtual {p0}, Lcom/baidu/netdisk/ui/bg;->_()V return-void .end method .method public _222(I)V .locals 2 .prologue <省略> return-void .end method
新的 _(I)V 函數,調用了_()V 函數, 就經過了。老的函數命名爲 _222(I)V 以防改錯。測試