• [免费专栏] Android安全之和平精英(FZ)APK逆向分析



    欢迎新同学的光临
    … …
    人若无名,便可专心练剑


    我不是一条咸鱼,而是一条死鱼啊!


    0x01 前言

    从小道师傅那边看到一篇文章,看着操作入手要求不是很高,刚好最近在学习逆向分析,就去网上找了一下资源(此篇不提供样本APK)

    在这里插入图片描述

    0x02 工具准备

    2.1 抓包工具

    工具名称使用平台优点缺点
    wiresharklinux、windowslinux平台支持好,功能强大不能解析https的内容
    fidderwindows功能强大,支持修改报文仅支持windows
    Charleswindow、Mac可以按照域名进行分层级查看需要收费
    Burp Suite支持java的平台黑客喜欢用的功能强大工具界面不是很好看

    2.2 模拟器

    • 夜神模拟器

    https://www.yeshen.com

    PS:只支持Windows系统、Mac系统(M1暂不支持)

    • 网易MUMU模拟器

    https://mumu.163.com

    PS:只支持Windows系统、Mac系统(M1暂不支持)

    • 雷电模拟器

    https://www.ldmnq.com

    PS:只支持Windows系统

    • 逍遥模拟器

    https://www.xyaz.cn

    PS:只支持Windows系统

    https://mp.weixin.qq.com/s/eDexuhi3B2vs3gEPPJBJzA

    0x03 加固特征库

    • 360
    assets/.appkey
    assets/libjiagu.so
    assets/libjiagu_art.so
    assets/libjiagu_x86.so
    assets/libprotectClass.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 爱加密
    lib/armeabi/libexecmain.so
    assets/ijiami.ajm
    ijiami.dat
    assets/af.bin
    assets/signed.bin
    assets/ijm_lib/armeabi/libexec.so
    assets/ijm_lib/X86/libexec.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 几维安全
    assets/dex.dat
    lib/armeabi/kdpdata.so
    lib/armeabi/libkdp.so
    lib/armeabi/libkwscmm.so
    libkwscr.so
    libkwslinker.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 梆梆安全

    免费版

    assets/secData0.jar
    lib/armeabi/libSecShell.so
    lib/armeabi/libSecShell-x86.so
    libsecexe.so
    libsecmain.so
    libDexHelper.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    定制版

    assets/classes.jar
    lib/armeabi/DexHelper.so
    libDexHelper-x86.so
    DexHelper.so
    
    • 1
    • 2
    • 3
    • 4
    • 腾讯加固
    tencent_stub
    lib/armeabi/libshella-xxxx.so
    lib/armeabi/libshellx-xxxx.so
    lib/armeabi/mix.dex
    lib/armeabi/mixz.dex
    libtup.so
    libexec.so
    libshell.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 腾讯御安全
    assets/libtosprotection.armeabi-v7a.so
    assets/libtosprotection.armeabi.so
    assets/libtosprotection.x86.so
    assets/tosversion
    lib/armeabi/libtest.so
    lib/armeabi/libTmsdk-xxx-mfr.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 顶象技术
    lib/armeabi/libx3g.so
    
    • 1
    • 阿里加固
    aliprotect.dat
    assets/armeabi/libfakejni.so
    assets/armeabi/libzuma.so
    assets/libzuma.so
    assets/libzumadata.so
    assets/libpreverify1.so
    libsgmain.so
    libsgsecuritybody.so
    libmobisec.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • Dexprotect加固
    assets/classes.dex.dat
    assets/dp.arm-v7.so.dat
    assets/dp.arm.so.dat
    
    • 1
    • 2
    • 3
    • 通付盾加固
    libegis.so
    libNSaferOnly.so
    
    • 1
    • 2
    • APKProtect加固
    libAPKProtect.so
    
    • 1
    • 百度加固
    lib/armeabi/libbaiduprotect.so
    assets/baiduprotect1.jar
    或者
    assets/baiduprotect.jar
    
    • 1
    • 2
    • 3
    • 4
    • 海云安加固
    assets/itse
    lib/armeabi/libitsec.so
    
    • 1
    • 2
    • apktoolplus
    assets/jiagu_data.bin
    assets/sign.bin
    lib/armeabi/libapktoolplus_jiagu.so
    
    • 1
    • 2
    • 3
    • 娜迦
    libedog.so/libddog.so
    libfdog.so
    libedog.so
    libchaosvmp.so
    
    • 1
    • 2
    • 3
    • 4
    • 通付盾加固
    libegis.so
    libNSaferOnly.so
    
    • 1
    • 2
    • 盛大加固
    libapssec.so
    
    • 1
    • 瑞星加固
    librsprotect.so
    
    • 1
    • 网秦加固
    libnqshield.so
    
    • 1
    • 网易易盾
    libnesec.so
    
    • 1
    • uu安全
    assets/libuusafe.jar.so
    assets/libuusafe.so
    lib/armeabi/libuusafeempty.so
    
    • 1
    • 2
    • 3
    • 中国移动加固
    assets/mogosec_classes
    assets/mogosec_data
    assets/mogosec_dexinfo
    assets/mogosec_march
    lib/armeabi/libcmvmp.so
    lib/armeabi/libmogosec_dex.so
    lib/armeabi/libmogosec_sodecrypt.so
    lib/armeabi/libmogosecurity.so
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 珊瑚灵御
    assets/libreincp.so
    assets/libreincp_x86.so
    
    • 1
    • 2

    部分壳的application

    • 爱加密
    s.h.e.l.l.S
    
    • 1
    • 360加固
    com.stub.StubApp
    
    • 1
    • 几维安全
    com.Kiwisec.KiwiSecApplication
    com.Kiwisec.ProxyApplication
    或者干脆没有application
    
    • 1
    • 2
    • 3
    • 梆梆安全
    com.secshell.secData.ApplicationWrapper
    
    • 1
    • 腾讯加固
    com.tencent.StubShell.TxAppEntry
    
    • 1
    • 海云安
    c.b.c.b
    
    • 1
    • 腾讯御安全
    MyWrapperProxyApplication
    
    • 1
    • 顶象技术
    cn.securitystack.stee.AppStub
    
    • 1
    • apktoolplus
    com.linchaolong.apktoolplus.jiagu.ProxyApplication
    
    • 1
    • 珊瑚灵御
    com.coral.util.StubApplication
    
    • 1
    • 魔固云(中国移动加固)
    com.mogosec.AppMgr
    
    • 1
    • apktool助手伪加固特征
    监测application即可
    
    • 1
    • 假360加固
    .appkey
    application为com.qihoo.util.stub2678363137
    
    • 1
    • 2
    • 假梆梆加固
    application为com.secoen.apkwrapper.ApplicationWrapper
    
    • 1

    0x04 和平精英(FZ)分析

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    配置好对应配置,这样我们就可以抓包了

    在这里插入图片描述

    然后返回手机主页,再点击精英Fz APP

    在这里插入图片描述

    点击更新,此处会出现更新的链接,吐槽一哈Burp,该链接抓取时Burp的历史包里面会自动消失,建议更新时直接抓包或者使用其它的抓包协议把该请求获取到

    GET /jdqsc/gx.txt HTTP/1.1
    User-Agent: Dalvik/2.1.0 (Linux; U; Android 7.1.2; VOG-AL00 Build/N2G48H)
    Host: buwo.oss-cn-beijing.aliyuncs.com
    Connection: close
    Accept-Encoding: gzip, deflate
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    在这里插入图片描述

    可以看到服务器是放到阿里云的对象存储OSS服务器上的,下面这个是:

    防F引擎地址:https://pan.lanzouw.com/xxx

    在这里插入图片描述

    F卡地址:https://xxx

    在这里插入图片描述

    该APP主要通过网络通信行为有北京阿里云服务器、蓝奏云网盘、第三方平台的付款和注册卡做通信和验证

    在这里插入图片描述

    先将APK后缀改为ZIP后解压包后,将里面的classes.dex文件复制出来,然后放到dex2jar路径下,执行如下命令:

    d2j-dex2jar.bat classes.dex
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    如上图发现入口类Application类被处理过了,APP做了加固

    • 识别APP是否加固的小方法

    1、将app解压出来查看assets目录下,是否有对应的so文件,这个目录下的so文件名称是可以作为识别是什么加固厂商的方法

    2、将app拖到反编译工具,如jadx工具上,通过工具可看出Application的入口类是否被替换,以及是否存在加固厂商的特征

    PS:APP的Application类中的attachBaseContext和onCreate这两个函数是最先获取执行权进行代码执行的。这也是为什么很多加固工具的主要逻辑都是通过替换APP入口Application,并自实现这两个函数从而达到加固的效果

    上面截图中,发现存在如下特征:

    com.stub.StubApp
    assets/.appkey
    assets/libjiagu.so
    
    • 1
    • 2
    • 3

    PS:发现该APP是360加固

    • 小技巧
      • 应用程序的asset目录,知道这个目录是不参与apk的资源编译过程的,所以很多加固的应用喜欢把加密之后的源apk放到这里
      • 把源apk加密放到壳的dex文件的尾部,这种加固方式会发现使用dex2jar工具解析dex是失败的
      • libs目录
      • 把源apk加密放到so文件中,一般都是把源apk进行拆分,存到so文件中,分析难度会加大的
      • 从AndroidManifest.xml 查找入口类

    4.1 Frida 脱壳工具

    • 壳的分类

    壳的种类非常多,可以简单的分为以下三类:

    • 一代整体型:采用Dex整体加密,动态加载运行的机制(免费类的壳)
    • 二代函数抽取型:将方法单独抽取出来,加密保存,解密执行(某加密)
    • 三代VMP、Dex2C:独立虚拟机解释执行

    4.1.1 Frida-Unpack

    firda-unpack 原理是利用frida hook libart.so中的OpenMemory方法,拿到内存中dex的地址,计算出dex文件的大小,从内存中将dex导出,我们可以查看项目中的 OpenMemory.js 文件中的代码更清晰直观地了解

    项目地址:https://github.com/GuoQiang1993/Frida-Apk-Unpack

    frida -U -f   com.APK进程名   -l. dexDump.js. --no-pause
    
    • 1

    PS:将 dex 文件并 dump 下来,保存在 data/data/packageName 目录下

    4.1.2 FRIDA-DEXDump

    脱壳后的dex文件保存在PC端main.py同一目录下,以包名为文件名

    项目地址:https://github.com/hluwa/FRIDA-DEXDump

    4.1.3 frida_dump

    文件头搜索dex,来脱壳

    项目地址:https://github.com/lasting-yang/frida_dump

    PS:会搜索 dex 文件并 dump 下来,保存在 data/data/packageName/files 目录下

    4.1.4 FART

    Frida 版的 Fart, 目前只能在 andorid8 上使用该frida版fart是使用hook的方式实现的函数粒度的脱壳,仅仅是对类中的所有函数进行了加载,但依然可以解决绝大多数的抽取保护

    项目地址:https://github.com/hanbinglengyue/FART

    解压 frida_fart.zip 将目录中的 fart.so 与 fart64.so 推送到 /data/app目录下 并使用 chmod 777 需要以spawn方式启动app,等待app进入Activity界面后,执行fart()函数即可。如app包名为com.example.test,则
    frida -U -f com.xxx.test -l frida_fart_hook.js --no-pause
    
    • 1
    • 等待app进入主界面,执行fart()
    高级用法:
    
    如果发现某个类中的函数的CodeItem没有dump下来,
    可以调用dump(classname),传入要处理的类名,
    完成对该类下的所有函数体的dump,
    dump下来的函数体会追加到bin文件当中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    PS:于被动调用的脱壳修复,由于代码覆盖率低,不可能触发app中的所有函数的调用,因此,修复的范围有限

    4.1.5 BlackDex

    BlackDex是一个运行在Android手机上的脱壳工具,支持5.0~12,无需依赖任何环境任何手机都可以使用,包括模拟器。只需几秒,即可对已安装包括未安装的APK进行脱壳。

    项目地址:https://github.com/CodingGay/BlackDex

    4.2 脱壳

    • APP脱壳两个最为关键的要素

      • 内存中dex的起始地址和大小,只有拿到这两个要素,才能够成功dump下内存中的dex
      • 脱壳时机,只有正确的脱壳时机,才能够dump下明文状态的dex。否则,时机不对,及时是正确的起始地址和大小,dump下来的也可能只是密文
    • APP脱壳原理

    在壳app解密源apk的dex之后,源apk被加载之前,拦截这个过程中的系统函数,把内存中的dex文件dump拿出来

    对于完整的dex文件,采用暴力搜索方式搜索dex035关键特征,对于抹掉头文件信息的dex如抹掉dex035这个的magic bytes 信息,此时就需通过匹配一些特征来进行搜索

    工具:https://github.com/dstmath/frida-unpack

    • 需要安装frida环境

    https://frida.re

    pip3 install frida-tools
    
    • 1
    adb.exe push C:\xxx\frida-unpack\inject.sh  /data
    cd /data
    chmod +x inject.sh
    
    # 转发frida端口
    adb.exe forward tcp:27042 tcp:27042
    adb.exe forward tcp:27043 tcp:27043
    adb.exe forward tcp:38089 tcp:38089
    # 启动frida并修改监听端口(防止部分app监测默认端口)
    adb.exe shell /data/local/tmp/ -l 0.0.0.0:38089
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • AndroidCPU架构
    CPU架构描述
    armeabi第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢
    armeabi-v7a第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能
    arm64-v8a第8代,64位,包含 Aarch32、Arch64两个执行状态对应32、64bit
    x86intel32位,一般用于平板电脑
    x86_64intel64位,一般用于平板电脑
    mips少接触
    mips64少接触
    • 获取当前模拟器的CPU,好选择frida-server的版本
    adb shell getprop ro.product.cpu.abi
    
    • 1
    adb.exe push E:\xxx\frida-unpack\frida-server-15.1.14-android-x86  /data/local/tmp/
    
    adb.exe shell 
    cd /data/local/tmp/
    chmod 777 frida-server-15.1.14-android-x86
    ./frida-server-15.1.14-android-x86
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    PS: 可能大家会遇到脱壳失败的,多试几次

    在这里插入图片描述

    脱壳失败解决方案:

    • 1、多试几次python main.py -n com.jyzlhkj
    • 2、尝试python main.py -n com.jyzlhkj -p 进程ID号
    • 3、尝试python main.py -n com.jyzlhkj -p 进程ID号 -f
    • 4、非root权限的话,尝试sudo sysctl kernel.yama.ptrace_scope=0 ,或 以root权限运行frida
    • 5、frida版本换一个,不要最新版的

    博主是多次尝试第二种方法成功,有好几次运行的时候程序闪退,可能是模拟器的缘故造成的

    接下来我们再把另外一个脱一下壳

    pyhon3 main.py -p 4943  -n com.zlhkjyq
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    • 精英Fz文件反编译出如下dex文件,其中0xc3ee1a20.dex、0xc3ee1b70.dex未反编译成功
    0xb3c8d000.dex
    0xb3e77f30.dex
    0xb356d000.dex
    0xc3ee1a20.dex
    0xc3ee1b70.dex
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    从上面的几张图,发现是用易语言开发的APK,包的特征比较明显

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    find /  -name "*.txt"
    
    • 1

    在这里插入图片描述
    查看其中的一些文本发现可获得APK下载的地址

    在这里插入图片描述
    在这里插入图片描述
    将校验分享多少次可领注册码的文本内容改一下,改成20,即可领取注册码

    adb.exe pull /data/media/0/stymd/ther/bmn/zscs.txt D:/
    
    • 1

    在这里插入图片描述

    adb.exe push D:/zscs.txt  /data/media/0/stymd/ther/bmn
    
    • 1

    在这里插入图片描述

    再次进入游戏,点击领取注册号

    在这里插入图片描述

    在这里插入图片描述

    在我们已注册成功后,该软件会去下载防F引擎

    在这里插入图片描述

    • 下载防F引擎apk
    GET /tp/xxxxx HTTP/1.1
    Host: iji.lanzout.com
    Connection: close
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Linux; Android 5.1.1; HD1910 Build/LMY48Z; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Mobile Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,en-US;q=0.8
    X-Requested-With: com.android.browser
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    • 防F引擎的破解方法

    跟精英FZ一样,通过本地判断的,白嫖永远是那么的理所当然,哈哈,但千万不要去购买破坏游戏规则,此处只做研究用,不提供APK样本

    在这里插入图片描述

    返回游戏,发现显示注册成功

    adb.exe push D:/ff.txt  /mnt/shell/emulated/0/Dyri/yxme/winop
    
    • 1

    在这里插入图片描述

    之前看代码逻辑时,发现它判断是通过本地,一个是判断本地是否存在vip.txt文本和分享次数是否达到20次来判断是否已注册或满足领取注册号的资格,那么本地直接创建一个vip.txt,丢进去,即可激活

    在这里插入图片描述

    PS:已知vip.txt文本为空,那么看来只是单纯的判断这个文本存不存在了

    在这里插入图片描述

    BB该APP外G的防F引擎,它是通过将ZB功能的代码注入到游戏客户端上,而实现游戏ZB的功能和效果

    要实现游戏ZB功能,从业务层面上就是修改游戏角色属性或者关键函数参数、返回值信息。从底层引擎实现上来说就是通过基于修改底层渲染部分实现ZB功能,如调整子弹的速度,这样当子弹和碰撞体进行碰撞的时候,就会发生穿Q的效果。

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    游戏中GM使用游戏FZ软件,危险系数非常高的,因为使用游戏FZ那么肯定会面临被F号的风险,其二购买游戏FZ容易出现被P的情况

    参考链接

    https://blog.csdn.net/g5703129/article/details/85054405

    https://www.cnblogs.com/wf-l5201314/p/9714435.html

    https://www.zhangkunzhi.com/index.php/archives/211/


    我自横刀向天笑,去留肝胆两昆仑


  • 相关阅读:
    站稳前沿消费趋势,IU酒店持续领跑轻中端品牌
    OKhttp上传图片视频
    最新 .NET 社区工具包, 推出MVVM 源代码生成器!
    【开源项目】mysql大表数据迁移
    List 集合的一些常用操作
    高性能MySQL实战第02讲:深入理解事务与锁机制(上)
    如何开发一款基于 vite+vue3 的在线表格系统(下)
    ubuntu 18 VMWare 如何 命令行 扩展磁盘
    情态动词习题
    vue3事务管理案例、组件基础总结案例
  • 原文地址:https://blog.csdn.net/Ananas_Orangey/article/details/126221618