黑客24小时在线接单网站

电脑高手24在线咨询,黑客24小时在线接单网站,黑客接单平台,黑客网站找人,黑客在线qq接单

教你解密Gh0st 1.0远控木马VIP版配置信息

0x00 简介

Gh0st由红狼组成的优秀的开源远程控制软件Cooldiyer开发。开源3.6发布一段时间后,作者重写并发布了很多1.0 Alpha,有这个版本VIP的,我也有幸收集到一套。当你拿到一个别人的免杀木马你想做什么,学习免杀方法?而你由发现你拿到的样本你手头的控制端可以***兼容,你想修改配置信息并写一个特殊版本的生成器吗?想想吗?那就跟我来吧!(事实上,你读完文章后不会写,我也没有写)

enter image description here

0x01 分析过程

本文用到的Ollydbg快捷键:

F9 操作程序/继续操作

F8 走过代码,遇见CALL建议少用易跑

F7 跟进,跑程序不容易。

F2 下断点,然后F9跳过一些代码段。

F4 执行到所选行,常用。

想写生成器吗?先解决配置信息加密解密算法的前提。在这里,我从服务端exe从生成器开始,我们不会开始。毕竟,在大多数情况下,我们只有服务端exe样本。

enter image description here

注意生成器下方“GH0STC 用户配置信息 GH0STC”,这就是我们要解密的字符串。假如我们现在才抓到服务端exe如何找到配置?一般情况下,可以直观快速地找到。1.写在资源文件中 2。exe、dll尾部附加数据。(我写的。DRAT两者都试过),我们用C32ASM工具16进制编辑。***发现文件尾部有配置信息。你觉得有点简单吗?…… 难度太大,不在本文的考虑范围内。

enter image description here

让我们使用动态调试工具Ollydbg打开,设置CreateFileW函数断点,这里我直接用工具设置,你也可以用bp CreateFileW命令设置。为什么要这样做?它必须读取自己的配置“打开自己”因此,断点设置在此函数中是最合适的。当然,本文没有讨论其他方法,然后按下F9操作程序。

enter image description hereenter image description here

如上图所示(如果没有,继续按下)F9),我们按ALT F9返回程序,按几次F8向下走ReadFile函数还有CloseHandle、字符GH0STC,这个时候说明程序已经把了“配置”阅读后,正常情况下应准备进入解密。所以下面出现了CALL非常注意调用(一般要按)F7不要再按了F8可能会跳过关键)

enter image description here

看到这个CALL,我们用F7跟进,然后按多个F8直到下一个CALL。

004015F3 |. E8 88FEFFFF CALL server.00401480n………………enter image description hereenter image description here

看关键算法CALL(00401527,至于怎么判断,我只能说我提前做了功课,实践中大家要多试试),我们还是用的F7跟进(你可以使用其他无用的部分)F2 F9或F4跳过)。

00401527 |. E8 B4FEFFFF CALL server.004013E0

在F7可以看到跟进

enter image description here

00401404 |> /8A1401 /MOV DL,BYTE PTR DS:[ECX EAX]

00401407 |. |80EA 08 |SUB DL,8

0040140A |. |80F2 20 |XOR DL,20

0040140D |. |881401 |MOV BYTE PTR DS:[ECX EAX],DL

00401410 |. |41 |INC ECX

00401411 |. |3BCE |CMP ECX,ESI

00401413 |.^\7C EF \JL SHORT server.00401404

这是解密算法的关键部分键部分,我们在这里换工具IDA看看这个函数(004013E0)。提示:IDA快速跳转地址快捷键”G”,

enter image description here

以后喜欢用F5插件(Hex-Rays Decompiler),我直接按这里F5看C代码(这部分操作没有截图B事实上,没什么好截的)。

enter image description here

对比下OD内部汇编代码慢慢品尝,你会发现关键代码只有两行。

00401407 |. 80EA 08 |SUB DL,8

0040140A |. 80F2 20 |XOR DL,20

有一个字符,减8和异或20的操作。

for (i = 0; i < len; i )

{

data[i] -= 0x8;

data[i] ^= 0x20;

}

在这里,我们找到了关键算法部分。你可能不明白或不知道该怎么办。看看下图中的现成工具。如果你真的很懒,你可以在百度上找到它,或者你可以找到它gh0st 3.6开源代码,然后几乎更改可以用来解密。

0x02 课后作业

给喜欢折腾的同学留三个作业: 1。004010D0函数功能(看不懂3.6代码)

2、对比一下gh0st 3.6加密解密字符和1.0有什么区别(其实我已经说过最关键的部分了,除了头尾。“GH0STC”其他没有变化的不同)

3、写一个配套生成器或参考3.6只需更改代码即可。

我不会在这里发送样本和其他附件。如果有必要,我会来的“暗组”论坛。这里有你想要的一切!

下面在附上1.0解密核心代码的字符串decode.h

  • staticcharbase64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /";
  •    
  • staticintpos(charc)
  • {
  • char*p;
  • for(p=base64;*p;p )
  • if(*p==c)
  • returnp-base64;
  • return-1;
  • }
  •    
  • intbase64_decode(constchar*str,char**data)
  • {
  • constchar*s,*p;
  • unsignedchar*q;
  • intc;
  • intx;
  • intdone=0;
  • intlen;
  • s=(constchar*)malloc(strlen(str));
  • q=(unsignedchar*)s;
  • for(p=str;*p&&!done;p =4){
  • x=pos(p[0]);
  • if(x>=0)
  • c=x;
  • else{
  • done=3;
  • break;
  • }
  • c*=64;
  •    
  • x=pos(p[1]);
  • if(x>=0)
  • c =x;
  • else
  • return-1;
  • c*=64;
  •    
  • if(p[2]=='=')
  • done ;
  • else{
  • x=pos(p[2]);
  • if(x>=0)
  • c =x;
  • else
  • return-1;
  • }
  • c*=64;
  •    
  • if(p[3]=='=')
  • done ;
  • else{
  • if(done)
  • return-1;
  • x=pos(p[3]);
  • if(x>=0)
  • c =x;
  • else
  • return-1;
  • }
  • if(done<3)
  • *q =(c&0x00ff0000)>>16;
  •    
  • if(done<2)
  • *q =(c&0x0000ff00)>>8;
  • if(done<1)
  • *q =(c&0x000000ff)>>0;
  • }
  •    
  • len=q-(unsignedchar*)(s);
  •    
  • *data=(char*)realloc((void*)s,len);
  •    
  • returnlen;
  • }
  •    
  • char*MyDecode(char*str)
  • {
  • inti,len;
  • char*data=NULL;
  • len=base64_decode(str,&data);
  •    
  • for(i=0;i<len;i )
  • {
  • data[i]-=0x8;
  • data[i]^=0x20;
  • }
  • returndata;
  • }
  • gh0st附件

       
    • 评论列表:
    •  冢渊不矜
       发布于 2022-05-29 18:19:55  回复该评论
    • 易。F2 下断点,然后F9跳过一些代码段。F4 执行到所选行,常用。想写生成器吗?先解决配置信息加密解密算法的前提。在这里,我从服务端exe从生成器开始,我们不会开始。毕竟,在大多数情况下,我们只有服务端exe样本。注意生成器下方“GH0STC 用户配置信息 GH0S
    •  假欢笑惜
       发布于 2022-05-29 14:40:12  回复该评论
    • [0]); if(x>=0) c=x; else{ done=3; break; } c*=64;    x=pos(p[1]); if(x>=0) c =x; else return-1; c*=64;    if(p[2]=='=') d

    发表评论:

    Powered By

    Copyright Your WebSite.Some Rights Reserved.