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

i春秋 i春秋     2022-10-09     640

关键词:

本文作者: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

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

 




















jni方法注册源码分析(jni_onload|动态注册|静态注册|方法替换)

文章目录背景举例说明手动注册native方法so方法加载jni方法查找失败加载so文件so文件所在目录nativeLoaddlopen函数dlsym函数so方法延迟解析优点so方法动态注册FindClassRegisterNativesso方法延迟解析出错利用JNI_OnLoad替换系统的native方法 查看详情

横屏小游戏--萝莉快跑源代码分析三

主角出场:初始化主角hero=newGameObjHero();hero->setScale(0.5);hero->setPosition(ccp(100,160)); hero->setVisible(false);addChild(hero,1);进入GameObjHero类ccp文件创建主角及动作 this->setContentSize(CCSizeMake(85, 查看详情

android逆向android逆向方法(静态逆向解析|函数调用分析|动态运行跟踪|运行日志分析|文件格式解析|敏感信息分析|网络信息监控|环境伪装模拟)

文章目录一、Android逆向方法1、静态逆向解析2、函数调用分析3、动态运行跟踪4、运行日志分析5、文件格式解析6、敏感信息分析7、网络信息监控8、软件动态调试9、环境伪装模拟一、Android逆向方法1、静态逆向解析静态逆向解析... 查看详情

静态分析系列1-南大软件分析2.1认识java的soot静态分析框架(待补充)

文章目录前言Soot的类型三地址码:JimpleSoot相关链接Soot是什么?Soot最初的作用官方旧指南:2008年1.1版本教程入门部分Introduction:主要介绍处理哪些文件RunningSootDisassemblingclassfiles(反编译类文件)Soot做了... 查看详情

静态分析系列1-南大软件分析2.1认识java的soot静态分析框架(待补充)(代码片段)

文章目录前言Soot的类型三地址码:JimpleSoot相关链接Soot是什么?Soot最初的作用官方旧指南:2008年1.1版本教程入门部分Introduction:主要介绍处理哪些文件RunningSootDisassemblingclassfiles(反编译类文件)Soot做了... 查看详情

cocos2d-x中使用第三方so库

...态共享库的文件打包给我们使用。怎样使用他们,见以下分析。1、获得库文件假如我们得到的库文件是libxxx.so(注:关于.so文件的命名方式,可百度)。在Jni文件夹下新建prebuilt文件夹,把获得的库文件复制到该目录下。2、使... 查看详情

“吐个槽”产品分析体验报告:小步快跑的用户反馈

反馈模块的一个重要特征是不同类型产品的反馈模块形式比较接近,这也是吐个槽能够存在的基础。它可以以一个相对普适性的模板来服务不同需求的产品,这种思路是很好的,将一套解决方案应用于多个问题提升了利用效率,... 查看详情

android逆向ida安装(使用ida分析so动态库)

文章目录一、IDA安装二、使用IDA分析so动态库一、IDA安装启动IDA安装程序,开始安装IDA;同意用户协议;输入密码;选择安装位置;创建桌面图标;开始安装;等待安装完成;安装完毕;二、使用IDA分析so动态库首次进入,弹出如下对话框;同意... 查看详情

恶意代码分析技术

...、恶意代码分析技术  恶意代码分析有两类方法:静态分析和动态分析。静态分析方法是在没有运行恶意代码时对其进行分析的技术,而动态分析方法则需要运行恶意代码,而这两类技术又进一步分析基础技术和高级技术... 查看详情

怎么加固安卓软件????

...文件加壳以及DEX虚拟化等技术,防止代码被反编译和逆向分析。2、防篡改:通过校验APK开发者签名,防止被二次打包,植入广告或恶意代码。3、防调试:防止应用被IDA、JEB等工具调试,动态分析代码逻辑。VirboxProtector安卓加固... 查看详情

qac静态测试配置及使用教程

使用前提:安装成功QAC软件。.1.打开软件如上.2.file->Auto-Create-Project,出现如下所示对话框1-工程名字2-将要分析的代码路径3-代码报告输出路径4-需要分析文件后缀5-7一般保持默认,除非新建一个独立的可以不被别的工程覆盖掉... 查看详情

关于动态链接库的分析

 关于动态链接库的分析在linux系统中动态链接库文件用.so后缀标记,一般命名规则为libxxx.so。 1 链接产生动态库.so与编译源码产生的二进制文件.o的关系现在有工程,源文件包括:main1.cppmyAPI.cppmyAPI.h其中myAPI.cpp,myAPI.... 查看详情

第三章-词法分析

 (1)编码词法分析将Java源文件的字符流转变为对应的Token流。一些规范的Token定义在Token枚举类中,如下:其实在形成一个Token流时,在词法分析的过程中,可以归纳为三类,分别是:/**AninterfacethatdefinescodesforJavasourcetokens*ret... 查看详情

idapro使用(静态分析+动态调试)

链接:http://skysider.com/?p=458IDAPro使用(静态分析+动态调试)1.静态分析IDAFLIRTSignatureDatabase ——用于识别静态编译的可执行文件中的库函数IDAsignsrch ——寻找二进制文件所使用的加密、压缩算法IDAscope ——自动识别windo... 查看详情

如何通过静态分析从二进制文件中收集系统调用?

】如何通过静态分析从二进制文件中收集系统调用?【英文标题】:Howtocollectsystemcallsfromabinarywithstaticanalysis?【发布时间】:2018-06-0108:08:14【问题描述】:我想通过静态分析获取给定二进制文件(x86_64)中使用的系统调用列表。我... 查看详情

关于动态链接库的分析

作者YangZheng联系[email protected]在linux系统中动态链接库文件用.so后缀标记,一般命名规则为libxxx.so。 1?链接产生动态库.so与编译源码产生的二进制文件.o的关系 现在有工程,源文件包括:main1.cppmyAPI.cppmyAPI.h其中myAPI.cpp,myAPI... 查看详情

第三次作业-效能分析

...功能4(仅由文件重定向读入,不由控制台输入)做效能分析1.cpu使用百分比  要求0 以战争与和平作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。(2分)Windows系统推荐使用ptime.exe。... 查看详情

自制反汇编逆向分析工具迭代第三版本

将一个函数的分支跳转逆向生成cpp文件,使逆向分析过程从分支跳转的分析中解放出来,工具首要的作用是应当解放生产力。下面是效果图:然后附上上面效果图对应的反汇编源代码和工具逆向生成的cpp文件。有了这个逆向出来... 查看详情