欢迎新同学的光临
… …
人若无名,便可专心练剑
我不是一条咸鱼,而是一条死鱼啊!
从小道师傅那边看到一篇文章,看着操作入手要求不是很高,刚好最近在学习逆向分析,就去网上找了一下资源(此篇不提供样本APK)
工具名称 | 使用平台 | 优点 | 缺点 |
---|---|---|---|
wireshark | linux、windows | linux平台支持好,功能强大 | 不能解析https的内容 |
fidder | windows | 功能强大,支持修改报文 | 仅支持windows |
Charles | window、Mac | 可以按照域名进行分层级查看 | 需要收费 |
Burp Suite | 支持java的平台 | 黑客喜欢用的功能强大工具 | 界面不是很好看 |
https://www.yeshen.com
PS:只支持Windows系统、Mac系统(M1暂不支持)
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
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
assets/classes.dex.dat
assets/dp.arm-v7.so.dat
assets/dp.arm.so.dat
libegis.so
libNSaferOnly.so
libAPKProtect.so
lib/armeabi/libbaiduprotect.so
assets/baiduprotect1.jar
或者
assets/baiduprotect.jar
assets/itse
lib/armeabi/libitsec.so
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
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
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
com.linchaolong.apktoolplus.jiagu.ProxyApplication
com.coral.util.StubApplication
com.mogosec.AppMgr
监测application即可
没.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服务器上的,下面这个是:
防F引擎地址:https://pan.lanzouw.com/xxx
F卡地址:https://xxx
该APP主要通过网络通信行为有北京阿里云服务器、蓝奏云网盘、第三方平台的付款和注册卡做通信和验证
先将APK后缀改为ZIP后解压包后,将里面的classes.dex文件复制出来,然后放到dex2jar路径下,执行如下命令:
d2j-dex2jar.bat classes.dex
如上图发现入口类Application类被处理过了,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加固
壳的种类非常多,可以简单的分为以下三类:
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
高级用法:
如果发现某个类中的函数的CodeItem没有dump下来,
可以调用dump(classname),传入要处理的类名,
完成对该类下的所有函数体的dump,
dump下来的函数体会追加到bin文件当中
PS:于被动调用的脱壳修复,由于代码覆盖率低,不可能触发app中的所有函数的调用,因此,修复的范围有限
BlackDex是一个运行在Android手机上的脱壳工具,支持5.0~12,无需依赖任何环境任何手机都可以使用,包括模拟器。只需几秒,即可对已安装包括未安装的APK进行脱壳。
项目地址:https://github.com/CodingGay/BlackDex
APP脱壳两个最为关键的要素
APP脱壳原理
在壳app解密源apk的dex之后,源apk被加载之前,拦截这个过程中的系统函数,把内存中的dex文件dump拿出来
对于完整的dex文件,采用暴力搜索方式搜索dex035关键特征,对于抹掉头文件信息的dex如抹掉dex035这个的magic bytes 信息,此时就需通过匹配一些特征来进行搜索
工具:https://github.com/dstmath/frida-unpack
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
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 | 少接触 |
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: 可能大家会遇到脱壳失败的,多试几次
脱壳失败解决方案:
博主是多次尝试第二种方法成功,有好几次运行的时候程序闪退,可能是模拟器的缘故造成的
接下来我们再把另外一个脱一下壳
pyhon3 main.py -p 4943 -n com.zlhkjyq
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引擎
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
跟精英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/
我自横刀向天笑,去留肝胆两昆仑