好久没做题了,做一道练练手

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

01-16 18:25