好久没做题了,做一道练练手
32位exe,无壳
拖入ida,找到关键函数
看sub_4010F0
是对v7的修改,将代码改一下
#include<stdio.h>
int sub_4010F0(char* a1, int a2, int a3)
{
int result;
int i;
int v5;
int v6;
result = a3;
for ( i = a2; i <= a3; a2 = i )
{
v5 = i;
v6 = a1[i];
if ( a2 < result && i < result )
{
do
{
if ( v6 > a1[result])
{
if ( i >= result )
break;
++i;
v5[a1] = a1[result];
if ( i >= result )
break;
while ( a1[i] <= v6 )
{
if ( ++i >= result )
goto LABEL_13;
}
if ( i >= result )
break;
v5 = i;
a1[result] = a1[i];
}
--result;
}
while ( i < result );
}
LABEL_13:
a1[result] = v6;
sub_4010F0(a1, a2, i - 1);
result = a3;
++i;
}
return result;
}
int main(){
char v[]="ZJSECaNH3ng";
sub_4010F0(v,0,10);
printf("%s",v);
return 0;
}
得到修改后的v7=3CEHJNSZagn
在看sub_401000,
可看出这是base64
对sub_401000的使用这么看不太清楚,看汇编部分
可以看出v4处是输入的string后三位,v5处为三,四,五位
string第一位="3"+34
第二位=v11
三,四,五位为“V1Ax”base64解码
后三位为"ak1w"解码
得到flag