1.认识IDA Pro
交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!
2.Crackme基础分析
1)双击运行恶意代码Crackme.exe,提示语句为haha.Crack me,任意输入数据,提示语句为:try again! haha.Crack me
2)使用IDA pro打开恶意代码Crackme.exe。发现只有2个函数,导入函数很少,由此怀疑恶意代码被加壳了。
3)使用查壳工具PEID,查看恶意代码Crackme.exe添加了( UPX )壳
4)使用UPX Tool对恶意代码Crackme.exe脱壳,选择( 解压缩 ),点击开始按钮进行脱壳。我们可以看出这是一个(压缩壳 )
5)将脱壳后的恶意代码Crackme.exe再次使用IDA pro打开,发现有(200多 )个函数,主程序的入口函数为(_main ),入口函数的起始地址为( 0040100A ),随后程序跳转到地址(_main_0 )
6)_main_0中,按空格键切换视图模式,阅读主函数核心代码,如截图所示主函数主要代码结构为(条件分支 ),如果输入错误将输出提示语句(try agin!);如果用户输入正确将输出提示语句( Congratulation!\n)。
7)分析上图汇编程序,要想函数输出提示语句“Congratulation!”,需要内存单元[ebp+var_4]的值为( 0),此时IDA会向(绿 )色箭头处执行。
3.Crackme跟踪分析
1)按空格键切换视图模式。恶意代码密码验证前调用的子函数名称为(sub_401005);子函数入口地址为(00401005),随后,程序跳转到地址( 00401020)处。
2)按空格键切换视图模式。子函数sub_00401020 中语句 mov ecx, [ebp+Str1]; [ebp+Str1]中存储的数据为(用户输入数据)。
3)F5查看源程序。该函数实现的功能为:依次遍历(用户输入数据),将每个字符ASCCI( +3)形成新的字符串,随后将新的字符串与(程序预先设置数据 "zxmlqj")进行比较,返回比较结果。
4)返回到主调函数,判断比较结果是否为0,当比较结果为(0)破解成功。换句话说,就是判断用户输入字符串依次遍历(+3)后,是否等于程序预先设置字符串("zxmlqj" ),如果等于破解成功,否正继续输入。所以破解密码计算公式为("zxmlqj"-3),破解需要输入的正确的字符串为("wujing")。
4.破解恶意程序
1)找到程序条件跳转逻辑可知,如下代码决定了程序需否跳转到Congratulation处,为此要想输入错误密码也可成功,只需将( jz )修改为( jmp )即可更改程序逻辑。
2)依次选中:编辑edit→修补程序patch program→汇编Assemble。
3)将jz改为jmp后确定。
4)依次选中:编辑→修补程序→修补程序引用到输入文件→确定
5)打开exe文件,运行查看后修改情况,输入错误密码成功登陆,完成破解。