1.下载附件,exeinfo查壳,无壳
2.拖进IDA进行静态分析,找到main函数,F5反编译,分析函数
从返回的正确的结果判断是主要的过程,前面的都是系统函数。
3.开始进行分析if语句功能
如图,其中的strlen(bufParentRead) == 42,得到长度内容
看到下面的{daf29f59034938ae4efd53fc275d81053ed5be8c}的长度很想,对其中的123,125进行转化为ASCII码(IDA中的快捷键R)分别代表的是{,},所以长度也包括花括号。
计算长度:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char a[]="{daf29f59034938ae4efd53fc275d81053ed5be8c}";
int b=strlen(a);
printf("%d",b);//结果为42
}
4.对其重要进行分析
后的confuseKey(bufParentRead, 42),使用key的用法,双击进去
观察得到key的顺序为3,4,1,2
{daf29f59034938ae4efd53fc275d81053ed5be8c},对其字符进行分成四份(记得将花括号给去掉)
然后按照顺序得到:53fc275d81053ed5be8cdaf29f59034938ae4efd
首尾都和判断参数一致。
这个就是flag.
5.总结错误:
(1)、找到if语句为重点后, !strncmp(&bufParentRead[1], "53fc275d81", 0xAuLL)以为这个函数是对其与bufParentRead存储的字符进行比对。没有注意到bufParentRead前的&取地址符号。
(2)、对无关的系统函数进行了分析,还得加强观察重点,分清楚系统函数与其他函数的区别。
观察不仔细。