so文件跳转指令生成

好久没投稿了,主要是最近没学到什么新的东西,也比较忙。。。

今天主要是想写个.so文件在ida中的跳转指令是如何生成的,就拿一个手游实例来讲,

以我的习惯是,如果拿到一个apk文件,首先就是先丢进Android killer反编译,然后重新打包,再运行游戏。。。

为什么不是先安装呢?

主要是因为如果安装了,然后进行游戏,经过一堆新手教程(如果有。。。),看到要破解的内容了(比如要修改金币,或解锁关卡。。。。。。),这时候再去反编译,想要重新安装的话,就无法覆盖安装了,又要过一堆新手教程才能触发那个点。。。,所以就是先反编译,这是我的习惯,下面进入正题:

 

一:需要的工具:

Android killer

IDA

010Editor

计算器(Windows自带)

手机

 

二:

还是和往常一样先丢进Android killer反编译。。。

安装之后发现是手机屏幕一直是黑屏。。。猜测这个apk可能是做了手脚。。。

还是以我以往的步骤,回退一步,使用四哥的kstool hook签名试试。。。

不清楚什么是kstool?

请看http://www.wjdiankong.cn/archives/1006

安装之后又是黑屏,这就哇塞了,

好吧,也有可能这个游戏本身就是不兼容我的手机,安装原版的试试,可以进

 

 

那就可以非常确定这个游戏是真的做了防护。。。

过了签名验证还是没用,这就操蛋了,因为个人习惯,我都是先试了所有的方法后,没辙了,再去看看日志有没有什么发现,这里还是按照我的习惯来,那就把原包直接重新签名试试。。。

安装后,竟然也可以运行,这样看来有可能是对dex文件做了完整性校验,这种情况就很难办了,可能是验证.dexMD5值,或者xxx,各种校验.。。。

既然直接重新签名可以运行,那我就改改.so文件试试,(这里是要破解内购,国内的很多游戏基本上内购都是从smali层入手,我们这里就不从smali层入手了,由于上面做了一堆校验,这里就先放弃去找smali中的校验了(也有可能在别的地方校验))。

我们解压这个apk文件,找到lib\armeabi-v7a目录下最大的那个.so文件,

 

ida载入后,如果smali层要跟native层交互的话,肯定有要以java_xxxxx为函数名,这里我们直接在Export栏搜索:pay 试试,如下图:

 

 

果真有一堆跟smali层交互的支付函数,这里我们点击最后一个函数进去看看

 

 

 


 

 

从上上上图中我们可以看到支付失败和支付成功的逻辑差不多,就只有一个点是不一样的,那这个地方很大可能性就是起到失败和成功的关键,我们先假设smali层的支付会跟native层的这些函数交互,那我们就直接把PayFailed中的那个关键跳转也改为和PaySuccess一样,

接下来就是关键的东西来了,会涉及到一些公式。。。

 

 

 

计算公式: (B-(A+8))/4

以上面为例

22B640 - (37F15C + 8)) / 4 = FFFFFFFFFFFAB137

得到结果后,取最后6位,

即:FAB137

再倒序,得到:37B1FA + EB

 

EB怎么来的?不知道,问四哥,反正支付失败那也是EB,猜测都是这么写的,哈哈哈

 

按照这个公式,我们就把PayFailed中的那个改过来,都是跳转到 sub_22B640,

具体怎么算就按照上面那个公式来算,

算出来之后使用010Editor编辑器,根据偏移地址把指令改过来

 

 

最后改完之后应该是这样的,如下图:

 

 

 

不要忘记这里还有些支付方法(第一,二,三条),也顺手把他改过来,套路跟上面一样

 

 

改完之后,替换原来的那个.so文件,重新打包,签名,运行游戏。。。

 

 

哈哈哈,成功

 

总结:

这里主要讲到跳转指令是怎么生成的,和利用一些关键词去修改,这只是我的一些思路,如果你有搞怪的方法,还请留言一起探讨下,最后还是那句:以上只是用来技术交流,如果您使用该已经破解的游戏用于任何非法用途,均与本作者无关。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值