• (爱加密系列教程七)程序员应该学习的签名破解


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

      我们以“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行,判断v0v1是否相等。返回值保存在了v0寄存器里

    583行,返回了v0

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

     

    581行,强制返回值v0为真

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

     

    更多内容,期待您的探索,请关注爱加密,让您精彩不断!

    爱加密官方地址:http://www.ijiami.cn/

     

     

     

     

     

     

     

  • 相关阅读:
    【转】开发人员一定要加入收藏夹的网站
    ASP.NET页面之间传递值的几种方式
    查询数据库中字段内容相同的记录
    将csv文件导入到数据库中
    XMLHttpRequest对象(三)
    Ajax基础(一)
    Ajax浏览器支持(二)
    javascript获取浏览器的
    SQL SERVER 通过链接服务器访问ORACLE 包中的存储过程 带参数
    SQL 添加链接服务器
  • 原文地址:https://www.cnblogs.com/ijiami/p/3346870.html
Copyright © 2020-2023  润新知