前言
交互式反汇编器专业版(Interactive Disassembler Professional
),人们常称其为 IDA Pro,或简称为 IDA。是目前最棒的一个静态反编译软件,为众多 0day 世界的成员和 ShellCode 安全分析人士不可缺少的利器!IDA Pro 是一款交互式的,可编程的,可扩展的,多处理器的,交叉 Windows 或 Linux WinCE MacOS 平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro 已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种 CPU 指令集其中包括 Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000,c8051 等等。
本文通过攻防世界一道逆向题目 Hello, CTF 来入门学习下 IDA Pro 反汇编神器的使用和 exe 文件的逆向分析。
Hello CTF
题目如下,附件下载地址:
下载后是个 exe 的文件,双击执行后如下:
应该是需要输入正确的字符串才能得到想要的结果。
IDA反汇编
1、使用查壳工具查看目标 exe 文件,无壳,32位:
2、将目标 exe 文件拖入 IDA 神器:
3、点击
Tab
健或者 F5
键,可对程序进行反编译并查看伪代码:
4、完整代码如下:
int __cdecl main(int argc, const char **argv, const char **envp)
{
int i; // ebx
char v4; // al
int result; // eax
int v6; // [esp+0h] [ebp-70h]
int v7; // [esp+0h] [ebp-70h]
char Buffer[2]; // [esp+12h] [ebp-5Eh] BYREF
char v9[20]; // [esp+14h] [ebp-5Ch] BYREF
char v10[32]; // [esp+28h] [ebp-48h] BYREF
__int16 v11; // [esp+48h] [ebp-28h]
char v12; // [esp+4Ah] [ebp-26h]
char v13[36]; // [esp+4Ch] [ebp-24h] BYREF
strcpy(v13, "437261636b4d654a757374466f7246756e");
while ( 1 )
{
memset(v10, 0, sizeof(v10));
v11 = 0;
v12 = 0;
sub_40134B(aPleaseInputYou, v6);
scanf("%s", v9);
if ( strlen(v9) > 0x11 )
break;
for ( i = 0; i < 17; ++i )
{
v4 = v9[i];
if ( !v4 )
break;
sprintf(Buffer, "%x", v4);
strcat(v10, Buffer);
}
if ( !strcmp(v10, v13) )
sub_40134B(aSuccess, v7);
else
sub_40134B(aWrong, v7);
}
sub_40134B(aWrong, v7);
result = --Stream._cnt;
if ( Stream._cnt < 0 )
return _filbuf(&Stream);
++Stream._ptr;
return result;
}
代码第 36 行处进行了一个字符串比较,如果 v10 的值等于 v13 的值会反馈一个 success 的输出。v13 的值在第 15 行给出,因此需要知道 v10 是怎么处理的。
代码的第 18 行对 v10 进行了初始化,并在 32 行进行了拼接处理。分析 26-35 行的循环,其逻辑是:依次取出用户输入字符串的字符,将字符值的 ASCII 码值转成 16 进制的形式拼接到 v10 中。因此,若想令 v10 的值等于 v13 的值,需将字符串 v13 中的值两个一组,当作16进制的值,换算成ASCII 码并转成对应的字符即可。得到的结果即为 flag,也是要输入的内容。
Flag值计算
上面已经分析了如何获取 Flag 的思路了,下面通过几种方式来计算。
1、Python 代码计算:
# encoding: utf-8
x='437261636b4d654a757374466f7246756e'
y=''
i=0
while(i<len(x)):
y+=chr(int(x[i:i+2],16))
i+=2
print(y)
在线运行结果如下(获得 flag:CrackMeJustForFun
):
执行程序进行 Flag 验证:
2、在线工具自动转换:
总结
关于 IDA Pro 的基础学习,请参考以下文章:
- 杨秀璋:网络安全自学篇(五)| IDA Pro反汇编工具初识及逆向工程解密实战 ;
- CS基础:ida的基本使用教程(1) ;
- IDA Pro 破解版下载:IDA Pro 7.5 绿色版(2021.01.28更新)。