从小道师傅那边看到一篇文章,看着操作入手要求不是很高,刚好最近在学习逆向分析,就去网上找了一下资源(此篇不提供样本APK)
工具名称 | 使用平台 | 优点 | 缺点 |
---|---|---|---|
wireshark | linux、windows | linux平台支持好,功能强大 | 不能解析https的内容 |
fidder | windows | 功能强大,支持修改报文 | 仅支持windows |
Charles | window、Mac | 可以按照域名进行分层级查看 | 需要收费 |
Burp Suite | 支持java的平台 | 黑客喜欢用的功能强大工具 | 界面不是很好看 |
夜神模拟器
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
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
爱加密
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
配置好对应配置,这样我们就可以抓包了
然后返回手机主页,再点击精英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服务器上的,下面这个是:
防封引擎地址:https://pan.lanzouw.com/xxx
发卡地址: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 查找入口类
壳的分类
壳的种类非常多,可以简单的分为以下三类:
一代整体型:采用Dex整体加密,动态加载运行的机制(免费类的壳)
二代函数抽取型:将方法单独抽取出来,加密保存,解密执行(某加密)
三代VMP、Dex2C:独立虚拟机解释执行
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 目录下
脱壳后的dex文件保存在PC端main.py同一目录下,以包名为文件名
项目地址:https://github.com/hluwa/FRIDA-DEXDump
文件头搜索dex,来脱壳
项目地址:https://github.com/lasting-yang/frida_dump
PS:会搜索 dex 文件并 dump 下来,保存在 data/data/packageName/files 目录下
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中的所有函数的调用,因此,修复的范围有限
BlackDex是一个运行在Android手机上的脱壳工具,支持5.0~12,无需依赖任何环境任何手机都可以使用,包括模拟器。只需几秒,即可对已安装包括未安装的APK进行脱壳。
项目地址:https://github.com/CodingGay/BlackDex
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:27042adb.exe forward tcp:27043 tcp:27043adb.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.dex0xb3e77f30.dex0xb356d000.dex0xc3ee1a20.dex0xc3ee1b70.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
再次进入游戏,点击领取注册号
在我们已注册成功后,该软件会去下载防封引擎
下载防封引擎apk
GET /tp/xxxxx HTTP/1.1Host: iji.lanzout.comConnection: closeUpgrade-Insecure-Requests: 1User-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.36Accept: 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
防封引擎的破解方法
跟精英辅助Fz一样,通过本地判断的,白嫖永远是那么的理所当然,哈哈,但千万不要去购买破坏游戏规则,此处只做研究用,不提供APK样本
返回游戏,发现显示注册成功
adb.exe push D:/ff.txt /mnt/shell/emulated/0/Dyri/yxme/winop
之前看代码逻辑时,发现它判断是通过本地,一个是判断本地是否存在vip.txt文本和分享次数是否达到20次来判断是否已注册或满足领取注册号的资格,那么本地直接创建一个vip.txt,丢进去,即可激活
PS:已知vip.txt文本为空,那么看来只是单纯的判断这个文本存不存在了
该APP外挂的防封引擎,它是通过将作弊功能的代码注入到游戏客户端上,而实现游戏作弊的功能和效果
要实现游戏作弊功能,从业务层面上就是修改游戏角色属性或者关键函数参数、返回值信息。从底层引擎实现上来说就是通过基于修改底层渲染部分实现作弊功能,如调整子弹的速度,这样当子弹和碰撞体进行碰撞的时候,就会发生穿墙的效果。
游戏中购买使用游戏辅助软件,危险系数非常高的,因为使用游戏辅助那么肯定会面临被封号的风险,其二购买游戏辅助容易出现被骗的情况
参考链接:
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/