逆向补充

近期有个逆向任务,为了更全面了解信息,打算从iOS和Android双端同时入手,之前也并没有整理iOS的部分,这次也遇到了些新坑,一并都总结一下。

具体的操作流程呢,网上文章也是一大堆的,同样的东西就直接贴链接就好了,这里说下大致思路和网上一些教程没有提到的小坑,毕竟逆向的东西很多都还是很早之前的,对新设备新系统都不太适用。

iOS逆向基本流程

砸壳

iOS砸壳基本需求:越狱手机一部

常用工具:Clutch/dumpdecrypted/frida-ios-dump/CrackerXI

前三个需要一些环境和自己操作一些命令,最后一个是越狱商店下载后手机上自动脱壳然后导出即可。这里有个兄弟总结的相对全面:https://www.jianshu.com/p/1991854c65af

我最开始用了iphone6,12.4.7,版本相对高一些,完美越狱似乎不可行,使用了爱思助手的CheckRa1n,几乎可以越狱所有版本,但不是完美越狱,装部分Cydia插件需要重启,重启后需要再次操作越狱。经过尝试,以上几乎所有砸壳方法都会遇到各种报错,本打算手动砸一下,突然想起之前有几台4和5,装的都是ios8和9,不妨一试。最终在iOS9.0.1上成功用Clutch和dumpdecrypted顺利砸壳。

Dump头文件

经典的class-dump:http://stevenygard.com/projects/class-dump/

砸壳拿到二进制文件或者IPA后,直接运行命令 class-dump filename -H -o outputdir

值得一提的是,如果是swift+oc混编的原生项目,官方的这个工具会不适配,MonkeyDev那边已经做了改进版:https://github.com/AloneMonkey/MonkeyDev/blob/master/bin/class-dump

不由得感叹这些提供工具的人才是真的强,我还是停留在使用层面。

注入调试

这里使用上面已经提到的MonkeyDev

在.xm文件内可根据上一步dump出的头文件中获取的参数和方法进行动态注入和调试。

wiki上也都写得很清楚。

需要注意的是,在macOS10.15上,新版xcode有一个Specifications路径不一样,在MonkeyDev安装过程中会读取这个地方,老版本升上来的不会有问题,所以可能也没什么人提到这个。最近在帮别人新电脑装的时候遇到了,最简单的办法就是找一个10.14的电脑,把未找到的那个路径和文件都拷贝一份就ok了。

Android一些小补充

砸壳

不管是什么壳,安卓砸壳的本质就是从内存中动态dump出dex。注意点在于android4.4和5.0这个分界点,分界点前是Dalvik模式,主要操作libdvm下与dex相关的函数来获取起始地址,分界点后是art模式,通过libart下openmemory函数进行调试。

分别贴一个讲的相对细致的文章:

Dalvik:http://www.520monkey.com/archives/806

Art:https://www.cnblogs.com/ichunqiu/p/8618815.html

动态调试

IDA+adb,通过android_server开启手机端口,转发后在ida中attach到进程,可以直接断点调试汇编代码,修改二进制达到绕过模拟器检测和反调试检测等。上面文章内也都有提到,感谢耐心整理,我也可以省下不少事直接拿来记录。

Cocos

前阵子又看了下cocos游戏的逆向相关,其中对于js语言的包,搜索了下so文件下一些关键字,发现并不含加密,只是将js编译为类似于字节码的jsc,找到了一个脚本来反编译。

用了一下还不错,是php的脚本,可以自己配合python脚本,批量转换,记录在这:

https://github.com/irelance/jsc-decompile-mozjs-34

最后

整体看下来呢,双端的逆向上各有难点,iOS由于受苹果管制,只要是上架的App,都只有官方的一种壳,所以砸壳相对多样的安卓加固会简单一些,但同样由于官方的把控,如果不是专门搞这一方向,砸壳操作在其他大佬还没有把最新版本研究出来的情况下,软硬件版本限制也多些。

砸壳后来看,安卓基本就能看到大部分业务代码了,顶多就是加些混淆增加阅读难度,如果是native方法可以动态调试so文件修改二进制,但毕竟都是能看得到的代码;iOS的话基本就是拿到头文件,还有一些方法能拿到伪代码,通过方法名参数名动态注入可以大致猜到逻辑。

所以觉得还是安卓更简单,并且这块还是相对敏感的,学习为主。年轻人耗子尾汁/手动滑稽

Powered by Hexo

Copyright © 2018 - 2022 Yshen's Blog All Rights Reserved.

UV : | PV :

Fork me on GitHub