Android逆向分析实例(一)-绕过搜狗输入法的签名验证

写在前面:我们在做逆向工程时,经常会对apk文件进行反编译,分析其中的代码,然后重打包,重签名。但本apk为了防止重打包,设置了签名验证,它会验证当前apk的签名是否与官方的一致,如果不一致就会提示盗版信息,且无法正常打字。原apk下载载接

首先介绍下签名验证的两种方式:一种是服务器上的签名验证,另一种则是本地的签名验证。

区分两种验证的方法:将apk以压缩包的形式打开删除原签名后再签名,如果在断网的情况下出现异常,则是本地的签名验证;如果首先出现的是提示网络没有连接,则是服务器端的签名校验。本apk使用的是本地的签名验证。

重打包,重签名后进入app,无法正常打字,且会显示如下信息:

1.定位代码

逆向工程中我个人觉得最难的地方就是代码定位,一旦定位准确了,修改代码就很简单了。

那么对于这个apk该如何快速定位呢?

其实上面图片中的"你安装的是盗版输入法,请到官网下载"已经给了我们提示。

现在用jeb打开这个apk,在工程浏览器中搜索strings.xml(存放apk所有字符串的文件),然后在该文件中搜索"你安装的是盗版",然后可以搜索到以下内容:

 可以发现这句话对应的就是代码中的"check_key",接下来我们去代码中搜索"check_key";用jadx打开apk,全局搜索"check_key",可以看到下图:

我们发现只有红框标出的地方是调用这个变量,其它的地方都是定义这个变量,于是双击这一行进入到代码调用处;

发现了对"setupNative"这个函数返回值进行判断的语句,并且这个函数有两个参数,很像是字符串比较的函数,难道就是这个函数嘛?当时我就解压了apk文件,并找到了这个函数的smali文件,将if-nez改成了if-eqz,然后保存后重打包,重签名,安装后测试发现打开后不会显示"你安装的是盗版输入法,请到官网下载"这个消息了,本以为已经大功告成了,但是后面还是无法正常打字。

那就只能看一下这个函数了,右键查看"setupNative"函数声明:

发现了"native_setup"这个函数,跳到函数声明,原来是native层的函数;

那就只能借助这个星球上最强大的反编译工具ida来分析so文件了。

将apk解压;

用010Editor打开各个so文件,并搜索文本"native_setup",最终在assets\raw\sogouime文件中找到了这个函数

用ida打开sogouime文件,按快捷键"Alt + T"搜索文本"native_setup":

点进去:

就是"sub_16D78"这个函数(这个函数本身意义上就是native_setup,只是在ida中用sub_16D78表示而已);切换成图表模式,可以看到这个函数的执行流程:

从图中我们可以了解大概意思:如果R0 = 0,则执行绿线跳转到地址loc_16DEC处,R0 = 1则执行红线(估计解除限制打字的操作)。

按F5查看伪代码:

原来R0就是这个"sub_16D78"函数的返回值result,那我将result(R0)的值直接改为1,让这个函数一直返回"真"不就行了嘛。

2.修改代码

点击CMP指令,转为汇编代码并查看指令地址:

再次用010Editor打开sogouime文件,跳转到地址16D90处:

"00"修改为"01",保存后重打包,重签名,安装后就可以正常打字了。

最后附上绕过签名验证的apk地址:修改的apk下载链接

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿航的博客

我比你有钱,请不要打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值