【续篇】再次调戏勒索软件大黑客

首先为什么说再次调戏呢,因为这个大黑客之前已经被调戏过了一次,如果各位看官不知道以前是如何调戏的,可以转到调戏勒索软件大黑客围观

为什么会写这篇文章呢,因为这个叫Xiaoba的大黑客显然不服输,很快他开发了新的勒索软件,然后再次大肆传播

1.png

笔者呢,最近也闲着,而且继上次调戏后可能觉醒了”攻”的一面,这个叫Xiaoba的大黑客,重新树立了自信再次发上了他的”新作品”,要么他就是觉得不服,觉得上次只是失误才让他的勒索软件那么快沦陷,这次不知道从哪找了那么多信心想要”Play Again”,那么他就是一个纯粹的”抖M”在被调戏中找到了莫名的快感,不管怎么样,我还是觉得调戏下自信心膨胀的大黑客比steam上喜加一好玩多了。

当然,纯粹调戏大黑客就没啥意思了,所以这次的内容,除了用最简单的办法干掉大黑客的勒索软件,写出OneKey Cracker 一键破解软件,然后联系大黑客让他认识到IT界的险恶外,我们简单科普一些逆向与反逆向还有反反逆向的知识。一起见识下现在幼儿园小朋友都会做的“一键加壳”“一键加花”在某些反破解手段上有多么的不耐艹。

简单来说就是让XiaoBa大黑客死也死个明白。

那么回到主题,我们把再次把这款勒索软件下载下来

2.png

我们将软件拷贝到虚拟机中,运行一下,很快,出现了如下界面

3.png

现在,使用ollydbug加载这个软件,很快提示这个软件被加壳过了

4.png

我们使用ExeInfos看看

5.png

遗憾的是,ExeInfo也无法查到这个壳的特征,我们打开sections看看

6.png

可以看到,有两个Section Name被修改为了XiaoBa,当然,以这个大黑客的智商要写壳还得过100年吼,应该是使用其它壳加壳并且多次加花指令,为了找点“我是大黑客”的自信,把壳的Section Name用某些工具自行修改了一下,以显示自己的牛逼。

不过没关系,我们直接运行这个勒索软件,用附加的方法来查看这个壳

7.png

然后和上一次一样,我们换汤不换药,继续查找这个“宇宙第一语言先有易语言后有易语言”的神奇易语言作品的字符串比对特征值

8B5424048B4C240885D2750D

8.png

很快,在内存映像中找到了结果,我们在汇编窗口中跳转到这个地址,然后下断点

9.png

之后随便输入一个密码,点击开始解密,很快,断点被断了下来,我们观察堆栈,直到出现所谓的“密码”

10.png

很快,在第二次执行到断点的时候,我们抓到了密码

11.png

执行跟随,看看ret到哪里

12.png

如果没记错的话,这个特征码应该和上次的没什么不一样,我们只需要比对一下这段代码在内存中的哪一个位置就可以了

通过比对,发现在内存中存在2处这个比对。

13.png

14.png

那不就和上次一样么,我们尝试修改这里的代码,看看能不能破解成功。

15.png

很快,这款勒索软件缴械投降,这部就和上次一样换汤不换药么,大黑客还以为换了个强点的壳就能够阻止逆向分析,实际上并没有卵用,实际上就算是SE VMP之类的强壳,如果没有专门使用其SDK对一些关键的代码进行反调试虚拟化,结果还是一样的,当然以这个勒索软件作者的智商,要理解到这一点恐怕还早。

16.png

17.png

这次的破解代码几乎可以和上次的代码共用,都不用改,就是进程名从xiaoba.exe换成wannadie.exe

#include<Windows.h>
#include<tlhelp32.h>
#include<iostream>
#include<fstream>
#include<stdio.h>
#defineEXEJ_EXENAME &quot;WannaDie.exe&quot;
static unsignedchar constbin[]={0x83,0xf8,0x00,0xb8,0x00,0x00,0x00,0x00,0x0f,0x94,0xc0,0x89,0x45,0xf8,0x8b,0x5d,0xfc,0x85,0xdb,0x74,0x09};
static unsignedchar constcrkbin[]={0x33,0xc0,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};
voidMESSAGE(char *s)
{
         MessageBox(NULL,s,&quot;&quot;,MB_OK);
}
int main()
{
         char buffer1k[1024];
         unsigned int oft=0;
         int bfound=FALSE;
         HANDLE procSnap =CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
         if(procSnap == INVALID_HANDLE_VALUE)
         {
                   MESSAGE(&quot;无法枚举进程\n&quot;);
                   return 0;
         }
         //
         PROCESSENTRY32 procEntry = { 0 };
         procEntry.dwSize =sizeof(PROCESSENTRY32);
         BOOL bRet =Process32First(procSnap,&procEntry);
         while(bRet)
         {
                   if (strcmp(procEntry.szExeFile,EXEJ_EXENAME)==0)
                   {
                            bfound=TRUE;
                            break;
                   }
                   bRet =Process32Next(procSnap,&procEntry);
         }
         if (!bfound)
         {
                   MESSAGE(&quot;未找到目标进程\n&quot;);
                   return 0;
         }
         CloseHandle(procSnap);
         HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE, procEntry.th32ProcessID);       
         if (!hProcess)
         {
                   MESSAGE(&quot;无法打开目标进程\n&quot;);
                   return 0;
         }
         DWORD oldProtect,fw,p=1;
         while(oft<0x7fffffff-sizeof(buffer1k))
         {
                   VirtualProtectEx( hProcess,(LPVOID)oft, sizeof(buffer1k), PAGE_EXECUTE_READWRITE, &oldProtect );
                   ReadProcessMemory( hProcess,(LPVOID)oft, buffer1k, sizeof(buffer1k), NULL);
                   for (intsoft=0;soft<sizeof(buffer1k)-sizeof(bin);soft++)
                   {
                            if(memcmp(buffer1k+soft,bin,sizeof(bin))==0&&!(p--))
                            {
                                     WriteProcessMemory(hProcess,(LPVOID)(oft+soft-sizeof(crkbin)),crkbin,sizeof(crkbin),&fw);
                                     if (fw==0)
                                     {
                                               break;
                                     }
                                     if(fw==sizeof(crkbin))
                                     {
                                               MESSAGE(&quot;破解成功!请点击开始恢复文件&quot;);
                                               CloseHandle(hProcess);
                                               return0;
                                     }
                            }
                   }
                   //VirtualProtectEx( hProcess,(LPVOID)oft, sizeof(buffer1k), oldProtect, NULL );
                   oft+=(sizeof(buffer1k)-sizeof(bin));
         }
         MESSAGE(&quot;未找到破解特征&quot;);
}

18.png

19.png

破解结束.

当然,要是读者觉得使用ollydbg实在太复杂的话,我专程将这个软件的破解方式用pedoll写了一个脚本,挂载这个脚本后,很轻松就能把这个勒索软件的密码给扒出来.

20.png

21.png

显然这次这个大黑客还是不长记性,在一些没毛用的地方下功夫,我们继续,看到这个软件是不是把邮箱换了个,继续挂载PeDoll,吧这货的邮箱账号密码继续扒出来,因为我们只需要抓数据包,只要使用PeDoll hook这个软件的send函数就可以了

22.png

然后点击重新生成key,很快,一堆发往25端口的带有账号和密码的数据包被dump了下来

23.png

使用base64解出他的账号,呦呵,换号了呀

24.png

再解出他的密码

25.png

上次发帖有人说图片模糊看不清,那这次我用文字打出来让大家一起看看

账号:TheYuCheng@yeah.net

密码:Illuminati666

大家可以用foxmail登录自行玩耍,当然,如果你刚好是勒索软件受害者的话,在这个邮箱里可以找到你的密码.

26.png

最后,我们给这个勒索软件大黑客打个招呼,上次调戏后不知道有没有把我拉黑,感谢他再一次把自己的账号和密码告诉我们.惊不惊喜,意不意外?

转载于:https://www.cnblogs.com/ichunqiu/p/7866059.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值