当前位置: 首页 > 科技观察

教你解密Gh0st1.0远程控制木马VIP版的配置信息

时间:2023-03-20 18:28:32 科技观察

0x00简介Gh0st是一款非常优秀的开源远程控制软件,由红狼战队的Cooldiyer开发。开源3.6发布后的一段时间,作者重写了很多,发布了1.0Alpha。这个版本是有VIP的,有幸收藏了一套。拿到别人的反查杀木马,你想干什么,学习反查杀方法?而且你发现你拿到的sample和手边的控制端完全兼容,你要修改配置信息写一个专用的Version生成器?想要?跟我来!(其实看完文章你就不会写了,我也没写)0x01分析过程本文用到的Ollydbg快捷键:F9运行程序/继续运行F8步骤把代码传过去,很容易遇到CALL就跑。建议少用F7跟进,不容易跑出程序。F2设置断点,然后F9跳过一些代码段。F4执行到选中的行,常用。你想写一个生成器吗?前提是要解决配置信息加解密算法。在这里,我从服务器端exe开始,而不是生成器。毕竟,我们大多数人只有服务器端的exe示例。注意generator下面的“GH0STC+用户配置信息+GH0STC”,这是我们要解密的字符串。如果我们现在只抓到服务器exe,如何找到配置?一般可以直观、快速地找到。1.写在资源文件中。2.写在exe和dll末尾的附加数据上。(我在写DRAT的时候都试过了),我们使用C32ASM工具进行十六进制编辑。拖到***,发现文件末尾有配置信息。是不是觉得有点简单……难度太大,本文不考虑。接下来,我们使用动态调试工具Ollydbg打开并设置CreateFileW函数断点。这里我直接使用工具设置,也可以使用bpCreateFileW命令设置。你为什么这么做?它必须“打开自己”才能读取自己的配置,所以在这个函数中设置断点是最合适的。当然还有其他方法不在本文讨论范围内,然后按F9运行程序。如上图所示(如果没有继续按F9),我们按ALT+F9返回程序,按几次F8往下走。看到ReadFile函数也有CloseHandle和字符GH0STC,说明程序读完了“配置”,正常情况下应该可以进入解密了。所以,下面出现的CALL调用一定要非常注意(一般按F7进入,不要再按F8可能会跳过键)看到这个CALL,我们跟进F7,然后按多次F8直到下一个CALL.004015F3|。E888FEFFFFCALLserver.00401480n……………………看关键算法CALL(00401527,至于怎么判断,我只能说我提前做了功课,大家多实践试试),我们还是使用F7跟进(可以使用F2+F9或F4跳过其他无用部分)。00401527|。E8B4FEFFFFCALLserver.004013E0跟进F7看00401404|>/8A1401/MOVDL,BYTEPTRDS:[ECX+EAX]00401407|。|80EA08|子DL,80040140A|。|80F220|XORDL,200040140D|。|881401|MOVBYTEPTRDS:[ECX+EAX],DL00401410|。|41|INCECX00401411|。|3BCE|CMPECX,ESI00401413|.^\7CEF\JLSHORT服务器。00401404这是解密算法的关键部分。写下地址。我们用IDA看一下这个函数(004013E0)。提示:IDA快速跳转到地址的快捷键是“G”。切换到它之后,我喜欢使用F5插件(Hex-RaysDecompiler)。是的,没有什么可以切断的)。对比OD中的汇编代码,会发现关键代码只有两行。00401407|。80EA08|子DL,80040140A|。80F220|XORDL,20有一个字符,负8和XOR20运算。for(i=0;i=0)c=x;否则{完成=3;休息;}c*=64;x=pos(p[1]);如果(x>=0)c+=x;否则返回-1;*=64;如果(p[2]=='=')完成++;否则{x=pos(p[2]);如果(x>=0)c+=x;否则返回-1;}c*=64;如果(p[3]=='=')完成++;else{如果(完成)返回1;x=pos(p[3]);如果(x>=0)c+=x;否则返回-1;}如果(完成<3)*q++=(c&0x00ff0000)>>16;如果(完成<2)*q++=(c&0x0000ff00)>>8;如果(完成<1)*q++=(c&0x000000ff)>>0;}len=q-(unsignedchar*)(s);*data=(char*)realloc((void*)s,len);返回长度;}char*MyDecode(char*str){inti,len;字符*数据=空;len=base64_decode(str,&data);对于(i=0;i