RE1

其实并不怎么会驱动方面的东西,据说是有个点没弄好。IDA看了下,有个:

push eax
mov eax, offset sub_110A4
pop eax

觉得诡异~~~ 然后就没做了。~

RE2

exe2pyc,pyc2py,然后就开始看代码了。

RE3

每个人下载的exe都不同吧,里面有特定的校验值。倘若输入的账户不是自己下载的,那就无任何反应。具体判定应该是,先用下面这个算法处理用户名,得到一个值A1。

f1:

  do
  {
    if ( v15 >= 0x3FF )
      break;
    v17 = &v70[v15];
    v18 = *(&v70[v15++] + v8 - v70) ^ 0xF0;
    *v17 = v18;
  }
  while ( v15 < strlen(v8) );

再判断Crc32(A1)与PE头中的CRC校验值是否一致。若一致,则通过校验。

然后,通过Fun1处理前面的A1得到一个16字节的值A2,“=360safe360safe=”就是key了,加密的内容是Crc32(A1)。
Fun1如下:(估计是AES,因为peid说的,并没有去证实)

int __thiscall crypto(int this, int crc32, size_t len_1, int output, int a5, int a6, int a7)
{
  signed int v7; // esi@1
  int v8; // edi@1
  int v9; // eax@1
  int v10; // eax@3
  int v12; // [sp+1Ch] [bp-20h]@1
  CPPEH_RECORD ms_exc; // [sp+24h] [bp-18h]@1

  v12 = this;
  v7 = 0;
  ms_exc.registration.TryLevel = 0;
  v8 = this + 32;
  memset_0((void *)(this + 32));
  v9 = (int)sub_4023B0();
  if ( sub_401850((void *)v8, v9, 0, v12, "=360safe360safe=", 0) )
  {
    v12 = 0;
    if ( sub_401020(v8, output, (int)&v12, (void *)crc32, len_1) )
    {
      v10 = v12;
      *(_DWORD *)a5 = v12;
      if ( sub_4011B0(v8, output + v10, (int)&v12) )
      {
        *(_DWORD *)a5 += v12;
        v7 = 1;
      }
    }
    sub_4015D0((void *)v8);
  }
  return v7;
}

然后,A3 = (Base64(A2))。
然后,将A3对应的16进制值,以ASCII码输出,得到A4。 然后,比较输入的密码需要经过取出单双号,然后拼接的算法得到P1。

如输入123456 返回 135246

RE4

peepdf说是cve-xxxx-xxxx
然后Adobe reader 8.1打开弹key。

RE5

http://www.purpleroc.com/MD/Crackme5.html
要补充的是:
首先反调试 似乎并没有起到很好的作用 因为 我连结果都是调试出来的。
然后反调试应该是:

注册机算法是,key = MD5(unicode(username))。
没时间继续分析下去了~~~

就酱紫吧。

——Tracy_梓朋