首页 电脑 电脑学堂 查看内容

程序员应该学习的签名破解

2013-11-15 11:36 624 0

摘要: 我们以“XXXX管家”为例,该apk使用了签名保护。我们对apk二次打包后,程序无法运行。原因是程序运行时会获取当前应用签名和官方签名进行对比。如果发现不一致就会终止程序。下面我们对签名保护进行破解首...
关键词: 方法 寄存器 SIGNATURES Signature Landroid content 程序 packageInfo apk 保护

我们以“XXXX管家”为例,该apk使用了签名保护。我们对apk二次打包后,程序无法运行。原因是程序运行时会获取当前应用签名和官方签名进行对比。如果发现不一致就会终止程序。下面我们对签名保护进行破解首先我们需要用到的工具是APK改之理。百度云盘下载:http://pan.baidu.com/share/link?shareid=164149&uk=3291471913#dir/path=%2Fmysoft%2Fapkide点击”项目”->”打开apk”,反编译apk。获取应用签名的java代码是:PackageInfopackageInfo=getPackageManager().getPackageInfo("xx.xxx.xx",PackageManager.GET_SIGNATURES);Signature[]signs=packageInfo.signatures;其中“Signature”对应的smali代码是“Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature”我们在改之理搜索“Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature”有两个文件用到了签名。首先看下ct.smali发现这个S(Ljava/lang/String;)是获取签名的方法。Ctrl+F搜索下“->s(”,看谁调用了s这个方法。搜索后定位到了gy()方法。返回值是布尔型。该方法491行查询了当前apk的签名,并保存在了v0寄存器里500行,获取了保存的官方签名,并保存在了v1寄存器里579行,判断v0和v1是否相等。返回值保存在了v0寄存器里583行,返回了v0通过分析我们发现这个gy()方法,就是判断签名的地方。我们只需要修改下让该方法返回真,就能突破签名保护。在581行,强制返回值v0为真保存,重新编译运行。程序可以正常打开了。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部