apk包签名破解

抬头申明出处    lz201234 的     《程序员应该学习的签名破解》   http://blog.csdn.net/lz201234/article/details/45690087





我们以“XXXX管家”为例,该apk使用了签名保护。我们对apk二次打包后,程序无法运行。原因是程序运行时会获取当前应用签名和官方签名进行对比。如果发现不一致就会终止程序。关于如何防止apk被二次打包请移步:http://blog.csdn.net/lz201234/article/details/45073029   http://t.cn/Rz0bhUA

 下面我们对签名保护进行破解

 首先我们需要用到的工具是APK改之理。百度云盘下载:http://pan.baidu.com/share/linkshareid=164149&uk=3291471913#dir/path=%2Fmysoft%2Fapkide

 

点击”项目”->”打开apk”,反编译apk

获取应用签名的java代码是:

[java]  view plain copy
  1. <span style="font-family:Arial;font-size:14px;">PackageInfo packageInfo = getPackageManager().getPackageInfo(  
  2.   
  3.                     "xx.xxx.xx", PackageManager.GET_SIGNATURES);  
  4.   
  5. Signature[] signs = packageInfo.signatures;</span>  


其中“Signature” 对应的smali代码是

[plain]  view plain copy
  1. “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行,判断v0v1是否相等。返回值保存在了v0寄存器里

583行,返回了v0

通过分析我们发现这个gy()方法,就是判断签名的地方。我们只需要修改下让该方法返回真,就能突破签名保护。

 

581行,强制返回值v0为真

保存,重新编译运行。程序可以正常打开了。

再次重申,此教程只是一个简单的共享,请不要用于做坏事!谢谢!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值