本测验IDA的使用
使用环境:IDA version 6.6.141224
open文件的时候 可能会出现
强行打开后 发现
这种情况 查看函数本身内容可以看到,但函数本身的命名已经无法阅读了
这种情况只有经过砸壳才能处理
open还会出现
这个时候表面IDA无法识别这样的二进制文件。
出现这种情况的原因 可能是因为之前的选择文件处 未能正确选择
如MD5是:2D987244AE37F66B4C54592853B5D2D6。这个文件无法识别 打开如下
发现里面都是资源文件 这个时候需要对其解压,找到其中的plist文件,plist文件里对有效的app文件有说明
如图
简单能判断MultiCall为它的执行文件,将这个文件拖入IDA,即能识别
有些只需要简单识别,和文件名保持一致的即可识别打开
如MD5为02EA5313EBFFACDA1700E4FE44BE97D7
下面开始正式分析一个样本 样本列表如下图
解压完层层tar文件
解压过程为:
1:将文件改为.deb后缀
2:终端 tar xvf .deb
这个时候有无插件的解压结果是分情况的,下面是无插件的解压结果
并无外挂插件,在外挂层面上这个样本没有恶意行为。
接下来主要分析私有API的使用。
plist文件如下
因目前暂无iphone,无法动态运行该样本,放入IDA中如下
app的入口函数为 TwangAppDelegate applicationDidFinishLaunching,其他几个都是里面的函数 c伪码为
这个函数里简单分析如下
1:获取本例的audiosession会话,调用AVAudioSessionCategoryPlayback:这个类别会静止其他应用的音频回放。可以使用AVAudioPlayer的prepareToPlay和play方法,在应用中播放声音。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放都会继续。
2:获取sharedApplication本例application句柄,将状态栏方向设置为3(暂不管3为什么方向) setStatusBarOrientation
3:初始化TwangViewController并将其添加在主windows上,并使主window可见。
好,接下来分析TwangViewController里面的东西
这个类里面粗略一看
-[TwangViewController shouldAutorotateToInterfaceOrientation:]:这个函数意思很简单 该界面是否自动化支持界面旋转
-[TwangViewController viewDidUnload]:这个函数也很简单,是指界面在消失,即类的实例在析构的时候,界面的指针要设置成nil避免成为野指针
-[TwangViewController dealloc]:这个函数同上
-[TwangViewController didReceiveMemoryWarning] :这个函数是指app使用内存超标的时候发出的警告
-[TwangViewController pickerView:widthForComponent:]
-[TwangViewController pickerView:rowHeightForComponent:]
-[TwangViewController pickerView:numberOfRowsInComponent:]
-[TwangViewController pickerView:didSelectRow:inComponent:]
-[TwangViewController pickerView:viewForRow:forComponent:reusingView:]
-[TwangViewController pickerFrameWithLandscapeSize:]
-[TwangViewController numberOfComponentsInPickerView:] 这几个函数是控件pickerView的datasource和delegate,简单的说就是提供pickerview的component间距有多宽,每一行高度是多少,有多少个component,每个component有多少个rows,点击了会怎样等等。
重点来看一下-[TwangViewController viewDidLoad] 这个函数 如下
分析如下:
1:初始化一个glView,并将其添加到view上(当然并不清楚glView是什么东西),对这个glView添加一个观察者对象,它的响应函数是flippedEvent,触发条件是 Flipped
2:又添加一个观察者对象,这次的观察动作是 UIApplicationWillResignActiveNotification,响应函数是regignactive。简单点说,就是程序从后台切换到前台被激活的时候,触发这个函数。
3:又添加一个观察者对象 这次的动作是UIApplicationDidBeacomeActiveNotification,响应函数是becameActive。
4:触发glView的startAnimation动作
分别来看这几个函数是干嘛的
flippedEvent:
点击这个事件,则方向转为1方向,并设置这一动画的时间和角度,获取glView,触发playSwivelSound函数
resignactive:
glView调用停止播放,停止动画的函数
becameActive:
glView调用开始播放,开始动画的函数
如果就这样按照顺序去分析 分析恶意代码的耗时时间太长了
在无插件的情况下 分析恶意代码从四个内容入手
1:funtion。IDA提供代码中使用funtion列表,从function列表从浏览可能的恶意API的使用,如果有,进入实现处进行分析。
2:imports。IDA提供导入头文件,导入的framework,浏览这个列表也能发现可疑行为。
3:strings。从代码文件中抽离strings进行浏览,发现可疑行为。
4:names。从代码文件中抽离names进行浏览,发现可疑行为。
本样本未能发现恶意代码···
但是在样本MD5 = 2B98489938AAFA0D4DEB281239B913F6中 import里发现了AddressBook的框架调用
这个时候需要定位到此处去查看addressBook是否有未经用户允许擅自查询通讯录的行为
定位代码处为
有三处
+[ABAddressHelper getPersonNote:] 为
分析如下:
+[ABAddressHelper getPersonURL:] 代码为
+[ABAddressHelper getServerURL] 处代码为
其中ABAddressBookCopyPeopleWithName这个函数并未在ABAddressBook的数据源里实现,而仅仅在取得用户同意的基础之上才能在数据源里实现这个函数,
在别处使用这个函数都将是不合法的。
所以此处使用了私有API,属于恶意代码。