也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大

少走了弯路,也就错过了风景,无论如何,感谢经历


0x01 前言

0x02 工具准备

2.1 抓包工具

工具名称 使用平台 优点 缺点
wireshark linux、windows linux平台支持好,功能强大 不能解析https的内容
fidder windows 功能强大,支持修改报文 仅支持windows
Charles window、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
  • 爱加密
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
  • 几维安全
assets/dex.dat
lib/armeabi/kdpdata.so
lib/armeabi/libkdp.so
lib/armeabi/libkwscmm.so
libkwscr.so
libkwslinker.so
  • 梆梆安全

免费版

assets/secData0.jar
lib/armeabi/libSecShell.so
lib/armeabi/libSecShell-x86.so
libsecexe.so
libsecmain.so
libDexHelper.so

定制版

assets/classes.jar
lib/armeabi/DexHelper.so
libDexHelper-x86.so
DexHelper.so
  • 腾讯加固
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
  • 腾讯御安全
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
  • 顶象技术
lib/armeabi/libx3g.so
  • 阿里加固
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
  • Dexprotect加固
assets/classes.dex.dat
assets/dp.arm-v7.so.dat
assets/dp.arm.so.dat
  • 通付盾加固
libegis.so
libNSaferOnly.so
  • APKProtect加固
libAPKProtect.so
  • 百度加固
lib/armeabi/libbaiduprotect.so
assets/baiduprotect1.jar
或者
assets/baiduprotect.jar
  • 海云安加固
assets/itse
lib/armeabi/libitsec.so
  • apktoolplus
assets/jiagu_data.bin
assets/sign.bin
lib/armeabi/libapktoolplus_jiagu.so
  • 娜迦
libedog.so/libddog.so
libfdog.so
libedog.so
libchaosvmp.so
  • 通付盾加固
libegis.so
libNSaferOnly.so
  • 盛大加固
libapssec.so
  • 瑞星加固
librsprotect.so
  • 网秦加固
libnqshield.so
  • 网易易盾
libnesec.so
  • uu安全
assets/libuusafe.jar.so
assets/libuusafe.so
lib/armeabi/libuusafeempty.so
  • 中国移动加固
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
  • 珊瑚灵御
assets/libreincp.so
assets/libreincp_x86.so

部分壳的application

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

0x04 某游戏APK分析



配置好对应配置,这样我们就可以抓包了

然后返回手机主页,再点击精英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


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

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

F卡地址:https://xxx

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

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

d2j-dex2jar.bat classes.dex


如上图发现入口类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

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

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
  • 等待app进入主界面,执行fart()
高级用法:如果发现某个类中的函数的CodeItem没有dump下来,
可以调用dump(classname),传入要处理的类名,
完成对该类下的所有函数体的dump,
dump下来的函数体会追加到bin文件当中

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
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
  • AndroidCPU架构
CPU架构 描述
armeabi 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢
armeabi-v7a 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能
arm64-v8a 第8代,64位,包含 Aarch32、Arch64两个执行状态对应32、64bit
x86 intel32位,一般用于平板电脑
x86_64 intel64位,一般用于平板电脑
mips 少接触
mips64 少接触
  • 获取当前模拟器的CPU,好选择frida-server的版本
adb shell getprop ro.product.cpu.abi
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

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


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



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



find /  -name "*.txt"


查看其中的一些文本发现可获得APK下载的地址



将校验分享多少次可领注册码的文本内容改一下,改成20,即可领取注册码

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

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

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

在我们已注册成功后,该软件会去下载防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

  • 防F引擎的破解方法

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

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

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

之前看代码逻辑时,发现它判断是通过本地,一个是判断本地是否存在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/


你以为你有很多路可以选择,其实你只有一条路可以走


[免费专栏] Android安全之某游戏APK逆向分析相关推荐

  1. [免费专栏] Android安全之APK逆向入门介绍

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  2. [免费专栏] Android安全之Android Xposed插件开发,小白都能看得懂的教程

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  3. [免费专栏] Android安全之数据存储与数据安全「详解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  4. [免费专栏] Android安全之Android Fragment注入

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  5. [免费专栏] Android安全之动态调试APP的一些技巧「Android Studio调试」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  6. [免费专栏] Android安全之Android奇淫run-as命令,调用系统受UID限制的API

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知 ...

  7. [免费专栏] Android安全之Android APP应用程序的汉化功能 (修改so中的字符串内容)

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  8. app反爬测试之apk逆向分析-frida

    前言: 目前为止,很多app的防护基本也还是用的ssl pinning检测证书. 因为,目前的app要么不用ssl,要么用就是一般的ssl,基本就是在手机上装个相关软件 的代理即可,而且这个代理基本就 ...

  9. [免费专栏] Android安全之检测APK中调试代码是否暴露敏感信息

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  10. [免费专栏] Android安全之静态逆向APK应用浅析「手动注入smali」+「IDA Pro静态分析so文件」+「IDA Pro基础使用讲解」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

最新文章

  1. HDLBits 系列(0)专题目录
  2. squid 的配置详解 (转)--SeriesI 收藏
  3. C、C++中的逻辑运算符
  4. 中文自然语言处理(NLP)(三)运用python jieba模块计算知识点当中关键词的词频
  5. (转)如何使用caffe的MATLAB接口
  6. Spring jdbc Template和Spring 事务管理
  7. Linux网络设置(第二版) --互联网寻址过程
  8. 理论基础 —— 索引 —— 2-3 树
  9. 创业团队合久必分吗?
  10. 头条三面: String.valueOf、toString()、(String)强转,有啥区别?
  11. 响应activex事件
  12. 云服务器怎么多人进去编辑文档,服务器如何设置多人登陆
  13. CSDN积分计算方法
  14. 应急指挥中心整体建设方案(ppt)
  15. 双 JK 触发器 74LS112 逻辑功能。真值表_【数电笔记】时序逻辑电路设计举例
  16. Dorado7 首页菜单CSS调整
  17. odi oracle to mysql_【ODI】| 数据ETL:从零开始使用Oracle ODI完成数据集成(三)
  18. java共享文件夹SMB1服务报错jcifs.smb.SmbException: Failed to connect: 0.0.0.0<00>/122.168.23.26
  19. 《图说区块链》读书笔记(完整版)
  20. 华硕服务器进入重装系统界面怎么办,进不了桌面怎么重装系统,华硕电脑卡在欢迎界面...

热门文章

  1. 使用迅雷等下载工具下载Android SDK快速安装
  2. notepad python 单步调试_用Notepad++ 调试 Python 及缩进问题 – 槑烎
  3. 分享50道硬核Python编程题,面试前过一遍
  4. linux非lvm分区在线扩容,Linux硬盘扩容(非LVM)
  5. 安道麦四季度以最佳年度销售额和EBITDA收官全年
  6. 豆瓣链接打开之后总是跳转首页
  7. 2018-03-05 百度AI API说明
  8. 麻省理工成立计算机学院,麻省理工学院宣布10亿美元成立新计算机学院
  9. 隐马尔可夫模型(三): 算法分类、解决方法
  10. UG二次开发GRIP过滤