静态分析第三发 so文件分析(小黄人快跑)

本文作者:i春秋作家——HAI_

0×00 工具

1.IDA pro

2.Android Killer

0×01 环境

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

0×02 支付分析

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

0×03 祭神器

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

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

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

2.第二步,点击安装

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

3.第三步,点击运行

4.第四步,点击日志

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

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

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

8.分析输出日志

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

0×04 关键字分析

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文件的分析了。

0×05 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 - 0×209014)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,就会有一个很大的数字生成,这里可能就是初始化的数值,可以通过好几种方法来观察。

0×06 进行初始化修改。

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

const/16 v3, 0x9

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

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

>>>>>>黑客入门必备技能   带你入坑,和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩!

原文地址:https://www.cnblogs.com/ichunqiu/p/8269697.html

时间: 2024-10-11 12:37:19

静态分析第三发 so文件分析(小黄人快跑)的相关文章

音频算法之小黄人变声 附完整C代码

前面提及到<大话音频变声原理 附简单示例代码>与<声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码> 都稍微讲过变声的原理和具体实现. 大家都知道,算法从实现到最后工程应用,中间的环节和问题特别多. 尤其是编码的架构设计,好的数据结构和代码逻辑封装肯定是可复用,组件化的. 前几天写完<音频识别算法思考与阶段性小结>的时候, 我也提及到了. 会做一些算法编码优化相关的分享. 而有时候我总觉得文字表达很苍白, 所以我尽可能地把代码写得简洁易懂, 一方

微信小程序相关三、css写小黄人

小程序上课第三天,因为今天院里有活动,所以没去上课,第四天上午又因为要召开入党转正大会,又耽误了一上午,下午去上课,要了资料.这两天讲了一些零零碎碎的东西,做的实例有上面这个小黄人 都是用的css,基本上都是用border,transform:rotate(),animation,和一些细节做的,左边的对话框那里的小尖头也是一个重点细节 下面附上代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset=&quo

Quartz2D练习 -- 小黄人

Main.storyboard <?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVers

css3实现小黄人

效果就像这样: 不废话,直接上代码! hrml代码: <!DOCTYPE html> <html> <head lang="zh"> <meta charset="UTF-8"> <title>纯CSS3画出小黄人并实现动画效果</title> <Link href="index.css" type="text/css" rel="styl

iOS开发 - Quartz2D绘制小黄人

Quartz2D绘制小黄人 - (void)drawRect:(CGRect)rect { // 1.上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); // 2.身体 drawBody(ctx, rect); // 3.嘴(微笑) drawMouth(ctx, rect); // 4.画眼睛 drawEyes(ctx, rect); } /** * 眼睛 */ void drawEyes(CGContextRef ctx, CGRect

小绿人小红人和小黄人

(2016/4/14 看了昨天的锵锵三人行继续谈王小波,子东提到一个有趣的观点.路遥和王小波的对照.一个返乡农村青年为成为城市人的奋斗,一个下放青年以普通人的姿态谈自由. 两位都是我喜欢的作家.王小波更是我最喜欢的作家.子东的对照让我想起平等和自由,路遥的苦苦追求能够理解为底层人向往的平等,王小波戏谑地展示的则是一个精神贵族觉得的最可贵的东西,自由.由两者的关系又引发了以下的想象.当然,路遥追求的平等绝不是以下小红人理解的那种. ) 从前有个国家,那里的人分为两种:一种是小绿人,一种是小红人.

小黄人

宝宝今天不开心,用CSS画了个小黄人,源码如下 html部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>小黄人</title> <link rel="stylesheet" href="main.css" /> </head> &l

小黄人这步棋,vivo怎么下?

9月13日<小黄人大眼萌>在国内首映,vivo.Uber也跟着凑起了热闹.12.13日两天,在世贸天阶,vivo联手Uber邀请大家与小黄人手机图标合影.只要上传照片上传照片至微博并@Uber优步北京@vivo智能手机,现场获得活动参与代码,在指定时间打开Uber输入,即有机会赢取小黄人神秘首映礼邀请函. 夏末秋初的凉爽日,却被小黄人"搅黄"了,"小黄人黄"(Minion Yellow)甚至还被定为2015年的流行色. 凭借着讨喜的性格.呆萌的造型.满满

【ZNDS众测】i6 双响炮蓝牙音箱-小黄人上线

娱乐双响炮蓝牙音箱在欣喜中收到,本次吸引我的是双响两个字,比较有可玩性,蓝牙音箱现在已经在市场上比较常见,基本走在挖掘新的市场,比如家庭影音,娱乐,户外等等场景,都在主打细分市场,这次双响蓝牙音箱我个人觉得在携带性与创新方面很好,蓝牙一托儿功能作为主打项,场景应用很加分,户外有手带可以带出去玩,室内现在的笔记本,平板,手机等都有蓝牙,在使用过程中,立体环绕音效绝对是生活的添加剂,接下来就看看本次产品的情况: 产品包装: 收到产品外包装做的相对比较细腻,盒子不大,文字与图案排版都比较简单明确,符合