-
-
[原创]一款Swift写的软件逆向分析
-
发表于:
2018-3-12 11:16
19329
-
一、目标程序:
Prisma v2.2.1(通过人工智能把你手机中那些普通的照片模仿出著名艺术家画作的风格)
二、任务描述:
通过分析Prisma的POST机制并写出Demo(实现本地POST来批量获取结果图片,针对那些核心代码放在服务器上的styles)。
三、分析步骤:
分析前奏:可以通过把玩几番软件和用PP助手大致浏览其home目录和APP运行目录的结构来收集一些对逆向分析有帮助的信息:
1. 记录未联网的出错信息(后面会用来倒推软件的逻辑)。
2. 记录home目录和APP运行目录一些重要原始文件和运行后产生的文件(发现此软件是OC+Swift混编的和用到了Alamofire第三方库)。
3. 等等信息。
分析开始:
方案一:首先通过正向分析从UI入手通过V拿到C(具体步骤略过),最终拿到处理图片的View对应的Controller是
prisma. StylesViewController(swift的都长这样),这里注意了并不是复制你的Controller 名字然后在IDA的Function Window去找它的成员函数,因为Swift的语言和编译器的特性不和OC一样反倒是和C++里面的虚函数一样,所以这里我们复制StylesViewController在IDA的String windows找到类似这样的_TtC6prisma20StylesViewController然后就可以找到StylesViewController类的成员函数如下:
可以从此Controller的ViewDidLoad函数开始分析,但是这样太盲目了,
我们可以从collectionView:didSelectItemAtIndexPath
这里开始分析,但是分析到后来才发现毕竟这是很外层的UI操作函数而且由于语言特效swift的含很多的间接调用,还是很难定位到关键的代码地方,所以这条路先放一放。
方案二:通过联网出错着手,因为未联网会出现如下错误:
只要我们对UIAlertView下个符号断点命令如下:
br s -n "[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]"
然后通过回朔调用堆栈就能定位到关键逻辑处。具体lldb+ida分析细节略过,最终找到prisma.ArtWorker这个重要的类顺藤摸瓜依次找到prisma.ArtWorkerUpLoad、prisma. ArtworkerProcesser、prisma. APIService、prisma.FileService、等等
然后就是在IDA找到这几类的成员函数对其下断不断的动态调试结合IDA的静态分析大致的理顺软件的逻辑,如下是几个类的重要信息:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)