安卓反编译揭秘(爱加密系列教程八)

浏览:
字体:
发布时间:2013-12-09 23:23:26
来源:
程序员应该学习的签名破解
  我们以“XXXX管家”为例,该apk使用了签名保护。我们对apk二次打包后,程序无法运行。原因是程序运行时会获取当前应用签名和官方签名进行对比。如果发现不一致就会终止程序。
 下面我们对签名保护进行破解
 首先我们需要用到的工具是APK改之理。百度云盘下载:http://pan.baidu.com/share/link?shareid=164149&uk=3291471913#dir/path=%2Fmysoft%2Fapkide
 
点击”项目”->”打开apk”,反编译apk。

获取应用签名的java代码是:
PackageInfo packageInfo = 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为真



保存,重新编译运行。程序可以正常打开了。
 
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();