Reversing.kr-Ransomware

打开后,发现是乱码,这是个悲伤的故事。。
在这里插入图片描述
再查一下壳,有壳,在这里插入图片描述
直接上脱壳机,可以把壳给脱掉,在这里插入图片描述
接着放进IDA里,发现还不太行,F5不管用了,ida提示文件太大,没法反汇编。
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190807164903278.png
在这里插入图片描述
仔细看一下主函数,有大量的无用的代码,花指令。直接写IDC脚本给nop掉,结果还是不行,再找找其他函数,发现sub_40100也是大量花指令,同样写脚本nop掉。
同时更改main函数的开始地址
在这里插入图片描述
然后再使堆栈平衡就可以F5了。

  printf("Key : ");
  nop();
  scanf("%s", file);
  v3 = strlen(file);
  nop();
  v4 = fopen("file", "rb");                     // 直接操作文件
  nop();
  if ( !v4 )
  {
    nop();
    printf("\n\n\n颇老阑 茫阑荐 绝促!\n");
    nop();
    exit(0);
  }
  fseek(0, 0, 2);
  nop();
  v7 = ftell(v11);
  nop();
  rewind(v11);
  nop();
  while ( !feof(v11) )
  {
    nop();
    key_0[v8] = fgetc(v11);
    nop();
    ++v8;
    nop();
  }
  nop();
  for ( i = 0; i < v7; ++i )
  {
    key_0[i] ^= file[i % v3];
    nop();
    key_0[i] = ~key_0[i];
    nop();
  }
  fclose(v11);
  nop();
  v6 = fopen("file", "wb");
  nop();
  nop();
  for ( j = 0; j < v7; ++j )
  {
    fputc(key_0[j], v6);
    nop();
  }
  printf(
    "\n"
    "颇老阑 汗备沁促!\n"
    "唱绰 各矫 唱悔瘤父 距加篮 瘤虐绰 荤唱捞促!\n"
    "蝶扼辑 呈啊 唱俊霸 捣阑 玲绊, 棵官弗 虐蔼阑 罐疽促搁 颇老篮 沥惑拳 登绢 乐阑 巴捞促!\n"
    "窍瘤父 父距 肋给等 虐甫 持菌促搁 唱绰 酒林酒林 唱悔扁 锭巩俊 呈狼 颇老篮 肚 噶啊龙 巴捞促!");
  nop();
  return getch();
}

可以看到,file文件先和key异或,再取反,得到加密后的文件,首先便要将key找出来。
用winhex打开file文件,再打开一个exe文件夹,可以找到他们的不同,再写脚本解就可以了

m=[ 0xC7, 0xF2, 0xE2, 0xFF, 0xAF, 0xE3, 0xEC, 0xE9, 0xFB, 0xE5, 0xFB, 0xE1,
 0xAC, 0xF0, 0xFB, 0xE5, 0xE2, 0xE0, 0xE7, 0xBE, 0xE4, 0xF9, 0xB7, 0xE8,
 0xF9, 0xE2, 0xB3, 0xF3, 0xE5, 0xAC, 0xCB, 0xDC, 0xCD, 0xA6, 0xF1, 0xF8,
 0xFE, 0xE9]
n=[ 0x54, 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D,
 0x20, 0x63, 0x61, 0x6E, 0x6E, 0x6F, 0x74, 0x20, 0x62, 0x65, 0x20, 0x72,
 0x75, 0x6E, 0x20, 0x69, 0x6E, 0x20, 0x44, 0x4F, 0x53, 0x20, 0x6D, 0x6F,
 0x64, 0x65]
key=''
for i in range(len(m)):
	key=key+chr(m[i]^0xFF^n[i])
print(key)

解出来是‘letsplaychessletsplaychessletsplayches’,可以得到,key是letsplaychess。
接着可以写脚本来解了

key = "letsplaychess"
f = open("file", "rb")
data = f.read()
exe = []
for i in range(len(data)):
    exe.append(((~data[i] ^ ord(key[i%len(key)])) % 256))
f.close()

f = open("file_de.exe", "wb")
f.write(bytes(exe))
f.close()

得到一个exe文件,
在这里插入图片描述
参考:https://blog.csdn.net/xiangshangbashaonian/article/details/84110506
https://blog.csdn.net/whklhhhh/article/details/78137138

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值