很多人说找不到签名验证在的地方,这个签名验证暂时并不在so里,还在smali中,我们直接看.class public Lcom/DBGame/DiabloLOL/BLHelper,这个smali类有下列代码:
.end local v0 # "arrayOfByte":[B
.end local v3 # "mPackageInfo":Landroid/content/pm/PackageInfo;
.end local v5 # "xx":[Landroid/content/pm/Signature;
上述代码很清楚的告诉我们,这是签名验证,因为有pm这个很明显的信号。继续看一个方法:
public static native void exitGame();
这是一个原生函数,意思就是退出游戏,看来当验证不过,就是要执行退出游戏函数了。办法此时就很多了,可以修改so里的这个函数,可以找到smali调用这个函数的地方,然后删掉,这里,我想更加透彻一些,下面这种方法就是直接让代码返回正确的签名值的加密值,这个值可以动态调式原版去获得: