首页
社区
课程
招聘
[旧帖] 分析一个程序(想要一个邀请码) 0.00雪花
发表于: 2012-3-24 20:16 1517

[旧帖] 分析一个程序(想要一个邀请码) 0.00雪花

2012-3-24 20:16
1517
前续:前段时间想玩玩游戏,到游戏里面弄到一个不错的装备,然后有人就私信M我,说想高价收,
然后让我加他QQ,当时也没想什么,就加上了,然后,他说要拿装备和我换,就发来一个图,是这样的一个
然后说网络信号不好,就发了一个文件夹过来,里面是这样的,

我下意识觉得遇到骗子,然后就和他扯了扯淡,然后他就给我拉到黑名单了。
然后,操起IDA,便有了这篇贴子。
代码不易排版,我只说一下这个程序的具体思路吧。
1.打开文件是加壳的,不是强壳,就直接脱了。
2.程序里面基本没有导入什么可用的API,而是把API加密成一个DWORD,然后去查IAT比对。像这样
        push    7D40BEFDh       ; 这个是加密过的API
        push    offset aWs2_32  ; "ws2_32"
        call    LoadLibrary
        push    eax                     ;MOdule Enterpoint Address 。
        call  Decrypted_API_fromdll; 这个是主要的解密函数,来得到API。

      3.母体程序主要用到了下面这些API:
主要用到了,以下几个API:
ShellExecuteA,CreateFile,ReadFile, SetFilePointer,ExpandEnvironmentStringsA,CreateDirectory,WriteFile,CreateProcess
     基本上可以猜到要干什么了,ShellExecuteA打开欺骗人的图片,就是那个小装备图标,先给人一种假象。
然后再去完成其它的工作,CreateFile得到图片的句柄 ,SetFilePointer定位到图片文件结尾,因为在图片文件结尾,有加密的真正的工作程序;然后再用解密函数把木马解密出来,解密算法很简单,下面是伪码。
                  char sKey[] = Key; 解密密钥
                  char *p = sDig;
                  while(pMem)
                {
                        if(!p)p = sDig;
                       *pMem = *pMem xor *p + *p;
                        p++;pMem++;
                 }

     4.WriteFile %programfiles%\\Storm\\StormUpdate.exe 和
                        %programfiles%\\Storm\\StormUpdate.DLL
     5.CreateProcess %programfiles%\\Storm\\StormUpdate.exe,暴风开始执行,母体程序退出。
     6.Stormupdate.exe是一个MFC程序,因为不太懂怎么跟MFC的程序,我就想了个笨法,里面的Sub不是特别多,我就逐个看了看,通过IDA的Ref找到根,差不多其它的Sub都被一个Sub调用,然后就在这个开始分析,程序加载的时候,执行这个SUB
     7.Stormupdate.exe 加载Stormupdate.dll进来,GetprocAdress 得到里面的一个UPdate的Call,然后开始开始执行这个Call。
     8.StormUpdate.dll是Debug版的,到处充斥着CheckEsp,这个Call的还是没有做什么实际作用,主要就是解密了另一个PE文件出来。
      push    offset a3142    ; "3142"                   ;这个是解密KEY
push    14000h                                             ;size of encypted data
push    offset dword_1000B218                 ;Encrypted data
call    Decrypted_coders_3_args             ;解密Call,这个解密出来一个PE文件。
add     esp, 0Ch
push    offset a3537    ; "3537"                 ;KEY
push    40h                                                 ;Size
push    offset q704126176_xicp_net       ;这个是个解密出来的我改上去的,这个是上线地址,要是看到的话对号入座吧
call    Decrypted_coders_3_args             ;解密Call
add     esp, 0Ch
push    offset dword_1000B218             ;这个是解密出来的DLL地址
call    Load_The_final_dll                        ;这个CAll分析了好久,最后发现是模拟了系统的PE加载过程,丫的。
add     esp, 4

       最后这个PE文件只出现在了内存中,然后自己实现了文件的加载,我在里面做了注释,一会能传附件的话,可以看一下。
      9.然后就是从上面解密出来的最终的PE文件里Get到一个Run的CALL,然后才进入了主功能。
push    offset aRun     ; "Run"                  ;找到这个叫Run的导出函数
mov     eax, [ebp+HEAP_0X14_size]
push    eax
call    GetTheExportFuncAddress           
add     esp, 8
mov     [ebp+var_8], eax
mov     esi, esp
mov     ecx, dword_1000B200 ; 2710
push    ecx
push    offset dword_1000B1A0
push    offset q704126176_xicp_net
call    [ebp+var_8]     ; Run                     ;到这才找到关键的CALL,功能应该在这里面了。
add     esp, 0Ch
cmp     esi, esp
call    CheckEsp    

loc_1002A1BD:
mov     edx, [ebp+HEAP_0X14_size]
push    edx
call    CleanUP         ; 收尾工作


   10.下面再跟到Run-Call里面,它主要做了以下的工作。
           SHGetSpecialFolderPathA 得到StartMenu的目录,并CreateDirectoryA一个007的folder
           CreateMutexA 创建一个互斥量,看是不是已经启动了程序,启动了就退出
           CreateThread 创建2个Thread
           WaitForSingleObject 等待第一个线程的退出.
           CloseHandle
   11.再剩下的就是分析,两个线程了,第二个线程,好像用COM做了些工作,这个不懂,COM还没有去看,根据参数,可以DOWN掉Shell,删除掉自身文件。
    12.第一个线程,是主工作线程,SetProcessWindowStation 为winsta0,做些初始化工作。创建一个隐形窗口来偷窥键盘消息,创建一个线程键盘记录的线程,
记录文件到%systemroot%\billlog.dat文件里,方法是用RegisterRawInputDevices注册一个RIDEV_INPUTSINK设备,然后用GetRawInputData来接收键盘消息。
         最后是,初始化winsock,获取一些,基本的计算机信息,再创建一个线程,来与远程Client通信,socket这块没有再细分析,感兴趣的朋友,想看就看看吧。

新建文件夹.rar

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
牛人啊,貌似才进来
2012-3-24 20:48
0
雪    币: 12045
活跃值: (4763)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

高手,这种东东都能看出来哟
2012-3-24 23:09
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
真是高手啊,看的可真仔细。学习了。
2012-3-30 13:00
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
牛啊 完全看不懂 学习下
2012-3-30 13:06
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
汇编不太懂哦
2012-3-30 14:10
0
游客
登录 | 注册 方可回帖
返回
//