教你解密Gh0st 1.0遠控木馬VIP版配置資訊

wyzsk發表於2020-08-19
作者: New4 · 2014/11/04 10:50

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 here

enter 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.00401480
n……
……
……

enter image description here

enter 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

#!c
static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

static int pos(char c)
{
  char *p;
  for(p = base64; *p; p++)
    if(*p == c)
      return p - base64;
  return -1;
}

int base64_decode(const char *str, char **data)
{
  const char *s, *p;
  unsigned char *q;
  int c;
  int x;
  int done = 0;
  int len;
  s = (const char *)malloc(strlen(str));
  q = (unsigned char *)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 - (unsigned char*)(s);

  *data = (char*)realloc((void *)s, len);

  return len;
}

char* MyDecode(char *str)
{
    int     i, len;
    char    *data = NULL;
    len = base64_decode(str, &data);

    for (i = 0; i < len; i++)
    {
        data[i] -= 0x8;
        data[i] ^= 0x20;
    }
    return data;
}

gh0st附件

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章