本帖最后由 wang857198309 于 2015-10-12 23:03 编辑
破解思路:1.首先是签名验证,在Lcom/kunlun/spark/SparkTools;下有GetPackageSignature()Ljava/lang/String;方法,该方法作用获取签名值得md5,思路强行赋值: 将 return-object v2 改为 const-string v2,”0240bc48ece8dd1dd4367205ebf500a5″ #签名md5 使用原签名log输出
return-object v2 2.文件验证,暂时没找到好的方法,提供个不太好的方法,也是我这次采用的方法,游戏运行时会对apk包做校检
修改验证文件指向路径,获取apk安装路径方法有很多,他这里采用Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String;方法来获取路径, 我们把正版的包放到assets目录系并且命为“_data”下面提供在程序运行的时候将_data文件写入到sd卡下面(我提供的压缩文件中默认是data,因为此游戏assets中存在一个data的文件夹,所以命名为_data) 将原来的 iget-object v0, v0, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String; 修改为:iget-object v0, v0, Landroid/content/pm/ApplicationInfo;->sourceDir:Ljava/lang/String; new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v1
const-string v2, "/xxxx.apk"
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
然后在:Lcom/unity3d/player/UnityPlayerNativeActivity;的oncraet方法的开始添加
invoke-virtual {p0, p0}, Lcom/unity3d/player/UnityPlayerNativeActivity;->outapk(Landroid/content/Context;)V
再在我提供文件中的有个 out.txtt 文件打开复制全部内容,粘贴到这个文件的,的尾部
最后就是,把我提供文件中smali文件夹,复制合并到 反编译目录下的smali文件夹下即可
|