用户
搜索
  • TA的每日心情
    开心
    7 天前
  • 签到天数: 132 天

    连续签到: 1 天

    [LV.7]常住居民III

    i春秋作家

    推荐小组成员

    Rank: 7Rank: 7Rank: 7

    115

    主题

    285

    帖子

    1147

    魔法币
    收听
    0
    粉丝
    19
    注册时间
    2017-7-24

    幽默灌水王突出贡献春秋文阁i春秋签约作者i春秋推荐小组积极活跃奖春秋游侠秦

    HAI_ i春秋作家 推荐小组成员 幽默灌水王 突出贡献 春秋文阁 i春秋签约作者 i春秋推荐小组 积极活跃奖 春秋游侠 秦 楼主
    发表于 2018-1-2 01:53:11 47281

    0x00 工具

    1.IDA pro

    2.Android Killer

    0x01 环境

    小黄人快跑 下载地址http://download.csdn.net/download/qq_36869808/10179100

    0x02 支付分析

    这里写图片描述

    和其他的支付不一样,没有使用原生的Toast,所以我们要进行进一步分析。

    0x03 祭神器

    之前隐藏了一个技能,当然不是我的哈,是神器的技能。这个技能厉害到不需要动态调试就可以查看LOG。也是感谢程序员的辛勤奉献,不知道是不是调试完之后忘记删除还是偷懒,不过这对做逆向的反而是一个好事情。换句话说,程序员自己给逆向分析人才留下了可以操作的后门地址。不多说了,直接祭出神器吧。

    1.首先在这里连接Android模拟器

    这里写图片描述

    关于Android模拟器,下载了夜神还有海马玩,还有蓝叠。蓝叠是刚开始的时候的用的,卡鼠标,好处是游戏不卡。海马玩性能还好,游戏一般,但是不支持拖拽,不喜欢。夜神,不知道是在我的电脑上有问题还是普遍问题。游戏超级卡,而且需要通过夜神的应用商店进入。最后还是用蓝叠吧,卡就卡点,但是模拟真机性能没有问题。

    2.第二步,点击安装

    如果安装出现问题,直接安装在虚拟机就行,可以不通过Android Killer安装。

    这里写图片描述

    3.第三步,点击运行

    这里写图片描述

    4.第四步,点击日志

    这里写图片描述

    5.第五步,LOG界面一个简单的介绍

    这里写图片描述

    6.第六步,首先设置过滤筛选,然后点击开始

    这里写图片描述

    7.第七步,在游戏里点击购买,查看LOG

    这里写图片描述

    8.分析输出日志

    这里写图片描述

    在我们每次点击返回的时候都会输出一大串字符,每次都有,这里就是我们的终点了,这里就是程序员留下来的突破点了。

    0x04 关键字分析

    1.不细讲了,看https://bbs.ichunqiu.com/thread-30248-1-1.html这里就好了。

    这里写图片描述

    这里找到了这串字符,并且向上查看,发现了一个X类()。

        sget-object v0, Lcom/gameloft/android/ANMP/GloftDMHM/Game;->N:Lcom/gameloft/android/ANMP/GloftDMHM/Game;
    
        new-instance v1, Lcom/gameloft/android/ANMP/GloftDMHM/x;
        # 这里的意思就是new 了一个名为 x的类。

    2.打开这个x()类

    这里写图片描述

    分析发现这里有一个GameInterface->doBilling,继续溯源。

    3.搜索GameInterface

    这里写图片描述

    根据方法来进行判断,找到了一个NDK调用的方法,nativeBillingDone,意思就是购买完成,或者支付完成的意思。如果看了之前有关于NDK开发的,并且进行过尝试的,这里应该会认得,会简单一些。

    4.搜索加载so的文件。

    这里写图片描述

    找到了文件名despicablemefree

    这里写图片描述

    关键字分析到这里就结束了,我们成功的找到了so文件,接下来就该到so文件的分析了。

    0x05 so 文件静态分析

    1.在export中搜索一下nativeBillingDone

    这里写图片描述

    2.双击,然后进行分析

    这里写图片描述

    这里的B是调用的意思,调用了addCash,cash是现金的意思,addcash就是增加金币的意思。

    3.进入函数进行一个简单的分析(为了更加了解ARM汇编所以这里会进行一个详细分析)。

    这里写图片描述

    (1)STMFD  SP!, {R3-R8,R10,LR} 这个看起来很复杂其实作用就是入栈
    (2)CMP  R0, #1 CMP指令的作用是把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,更新CPSR中条件标志位的值。CMP会进行一次减法运算,不存储结果,只更改条件标志位。这里是 把传入的R0和1进行比较。
    (3)LDR   R5, =(_GLOBAL_OFFSETTABLE - 0x209014)LDR的作用就是把数据送入R5,_GLOBAL_OFFSET_TABLE_的含义就是全局偏移量。
    (4)MOV  R6, R0 传入的参数给R6
    (5)ADD  R5, PC, R5 ; _GLOBAL_OFFSETTABLE ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。
    (6) BNE   loc_209028BNE指令是“不相等(或不为0)跳转指令”:

    以上六条语句大意就是如果输入的值是1的话就把传入的参数给R6

    然后接着往下看。

    (7) LDR  R3, =(off_A45CC4 - 0xA48944)
    (8)MOV   R2, #2,给R2赋值为2
    (9) LDR   R3, [R5,R3] ; unk_A56BE0把R5+R3的地址写入R3
    (10) STR   R2, [R3] 32位的大小送入寄存器,把R3的地址送入R2
    (11)LDMFD    SP!, {R3-R8,R10,PC} 出栈,也就是所谓的释放。

    我们去看看如果条件不满足跳转到loc_209028的语句。

    (1)CMP    R0, #0比较,如何R0=0就执行一下语句。
    (2)MOV   R3, #1 R3赋值为1
    (3)LDREQ  R2, =(off_A45CC4 - 0xA48944) EQ的意识是如果相等的话就执行。
    (4)MOVEQ     R1, R0如何R1==R0,则执行mov R1,R0。
    (5)LDREQ     R2, [R5,R2] ;如果R2的地址==R5+R2则执行
    (6)STREQ     R3, [R2]如果R3的值和R2的相等,则执行
    (7)BEQ        loc_209074 如何R3==R2,跳转
    (8)CMP      R0, #3 BNE     loc_20905C,如果R0!=3就跳转。

    loc_20905C代码分析

    CMP    R0, #4 BNE   loc_20907C如果不等于4则跳转到loc_20907C

    loc_20907C分析

    (1)CMP     R0, #6 BEQ    loc_209064如果R0==6则跳转
    (2)LDR    R0, [R4]   BNE             loc_2090D4如果R0!=R4就跳转。

    loc_2090D4分析

    (1)CMP             R6, #8   BNE     loc_209118,如果R6!=8就跳转
    (2)MOV   R1, #0x49C8 BL      sub_208DAC如果8R==6,就会有一个很大的数字生成,这里可能就是初始化的数值,可以通过好几种方法来观察。

    0x06 进行初始化修改。

    1.返回Android killer,在何时的位置加上

    const/16 v3, 0x9
    
        invoke-static {v3}, Lcom/gameloft/android/ANMP/GloftDMHM/Game;->nativeBillingDone(I)V

    2.然后进行测试即可,这个时候会发现初始的香蕉数量已经变成了18888

    本帖被以下淘专辑推荐:

    破解的目的是为了更好的开发
    发表于 2018-1-2 17:04:46
    学习!!学习!!学习!!
    使用道具 举报 回复
    学习学习学习学习
    使用道具 举报 回复
    谢谢楼主分享,希望继续有好的文章
    使用道具 举报 回复
    发表于 2018-1-18 09:23:51
    楼主厉害,哈哈
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册