• 熊猫烧香逆向分析


    参考的看雪的一位大佬的https://bbs.pediy.com/thread-259972.htm

    此文意义

    主要是想自己写病毒分析,并加强逆向分析技术,和反汇编能力,其次该文章会分很多天才会写完,记录每天的分析

    逆向过程

    先打开ida看了看,这下面有很多错误的,因为一开始静态分析的

    进入第一个函数看看,看起来挺简单的,不过在这里面有调用了几个函数,我尝试的跟了进个进去后,发现大部分是初始化

     

     

     再次回到主函数时,去看调用函数的参数,code?我一开始以为是shellcode,虽然可以按C转为代码,但我最终还是没有去按,不过后面想了一下,以前有大佬说过,数据不一定要放到数据段里,也有些人把数据放在代码段里面。一般放在一个函数的结尾,这里显然就是了

     

     随后打开od看看

     这里有三个函数连续调用了,经过自己的调试后,发现是把穿进去的参数copy到一个堆里面,然后我们来看panda,00405360这个函数,这是代码

    00405360  /$  55            push ebp
    00405361  |.  8BEC          mov ebp,esp
    00405363  |.  83C4 E8       add esp,-0x18
    00405366  |.  53            push ebx                                             ;  panda.0040F7B8
    00405367  |.  56            push esi
    00405368  |.  57            push edi
    00405369  |.  33DB          xor ebx,ebx                                          ;  panda.0040F7B8
    0040536B  |.  895D E8       mov [local.6],ebx                                    ;  panda.0040F7B8
    0040536E  |.  895D F0       mov [local.4],ebx                                    ;  panda.0040F7B8
    00405371  |.  895D EC       mov [local.5],ebx                                    ;  panda.0040F7B8
    00405374  |.  894D F4       mov [local.3],ecx
    00405377  |.  8955 F8       mov [local.2],edx                                    ;  xboy
    0040537A  |.  8945 FC       mov [local.1],eax                                    ;  orther string
    0040537D  |.  8B45 FC       mov eax,[local.1]
    00405380  |.  E8 37EDFFFF   call panda.004040BC
    00405385  |.  8B45 F8       mov eax,[local.2]                                    ;  panda.004037D8
    00405388  |.  E8 2FEDFFFF   call panda.004040BC
    0040538D  |.  33C0          xor eax,eax
    0040538F  |.  55            push ebp
    00405390  |.  68 4A544000   push panda.0040544A
    00405395  |.  64:FF30       push dword ptr fs:[eax]
    00405398  |.  64:8920       mov dword ptr fs:[eax],esp
    0040539B  |.  837D FC 00    cmp [local.1],0x0
    0040539F  |.  75 0A         jnz short panda.004053AB
    004053A1  |.  8B45 F4       mov eax,[local.3]
    004053A4  |.  E8 9BE8FFFF   call panda.00403C44
    004053A9  |.  EB 77         jmp short panda.00405422
    004053AB  |>  8D45 EC       lea eax,[local.5]
    004053AE  |.  8B55 F8       mov edx,[local.2]                                    ;  panda.004037D8
    004053B1  |.  E8 26E9FFFF   call panda.00403CDC                                  ;  local5=local2;but local2=0
    004053B6  |.  8D45 F0       lea eax,[local.4]
    004053B9  |.  E8 86E8FFFF   call panda.00403C44
    004053BE  |.  8B45 FC       mov eax,[local.1]
    004053C1  |.  E8 06EBFFFF   call panda.00403ECC
    004053C6  |.  8BF0          mov esi,eax
    004053C8  |.  85F6          test esi,esi
    004053CA  |.  7E 4B         jle short panda.00405417
    004053CC  |.  BB 01000000   mov ebx,0x1
    004053D1  |>  8B45 EC       /mov eax,[local.5]                                   ;  encrypt??
    004053D4  |.  E8 F3EAFFFF   |call panda.00403ECC                                 ;  caculate string length
    004053D9  |.  50            |push eax
    004053DA  |.  8BC3          |mov eax,ebx                                         ;  panda.0040F7B8
    004053DC  |.  5A            |pop edx                                             ;  0012FFB4
    004053DD  |.  8BCA          |mov ecx,edx
    004053DF  |.  99            |cdq
    004053E0  |.  F7F9          |idiv ecx
    004053E2  |.  8BFA          |mov edi,edx
    004053E4  |.  47            |inc edi
    004053E5  |.  8B45 EC       |mov eax,[local.5]
    004053E8  |.  0FB64438 FF   |movzx eax,byte ptr ds:[eax+edi-0x1]                 ;  xboy div 0xA;edx ^ local1
    004053ED  |.  B9 0A000000   |mov ecx,0xA
    004053F2  |.  33D2          |xor edx,edx
    004053F4  |.  F7F1          |div ecx
    004053F6  |.  8B45 FC       |mov eax,[local.1]
    004053F9  |.  0FB64418 FF   |movzx eax,byte ptr ds:[eax+ebx-0x1]
    004053FE  |.  33D0          |xor edx,eax
    00405400  |.  8D45 E8       |lea eax,[local.6]
    00405403  |.  E8 24EAFFFF   |call panda.00403E2C                                 ;  将两个参数加密后的字符串存入申请的堆里
    00405408  |.  8B55 E8       |mov edx,[local.6]
    0040540B  |.  8D45 F0       |lea eax,[local.4]
    0040540E  |.  E8 C1EAFFFF   |call panda.00403ED4                                 ;  将加密后的长度计算出来
    00405413  |.  43            |inc ebx                                             ;  panda.0040F7B8
    00405414  |.  4E            |dec esi
    00405415  |.^ 75 BA         jnz short panda.004053D1
    00405417  |>  8B45 F4       mov eax,[local.3]
    0040541A  |.  8B55 F0       mov edx,[local.4]                                    ;  ntdll.7C92E64E
    0040541D  |.  E8 76E8FFFF   call panda.00403C98                                  ;  local3=encrypt(arg1,arg2)
    00405422  |>  33C0          xor eax,eax
    00405424  |.  5A            pop edx                                              ;  0012FFB4
    00405425  |.  59            pop ecx                                              ;  0012FFB4
    00405426  |.  59            pop ecx                                              ;  0012FFB4
    00405427  |.  64:8910       mov dword ptr fs:[eax],edx
    0040542A  |.  68 51544000   push panda.00405451
    0040542F  |>  8D45 E8       lea eax,[local.6]
    00405432  |.  BA 03000000   mov edx,0x3
    00405437  |.  E8 2CE8FFFF   call panda.00403C68
    0040543C  |.  8D45 F8       lea eax,[local.2]
    0040543F  |.  BA 02000000   mov edx,0x2
    00405444  |.  E8 1FE8FFFF   call panda.00403C68
    00405449  .  C3            retn

    经过自己的分析后,发现把两个参数先进行取余,再进行xor,然后生成字符串***武汉.....这些字符串并copy到0x0DF000C,并判断这里面应该还有检验两个字符串是否相等的函数(这是自己猜测的,因为生成一个先前有的字符串拿来干嘛?但我不知道在哪校验,也跟进去看了看,但只发现了调用了临界区,猜测是另外一个线程在校验(猜测)????),但里面还有些细节没有搞明白,所以看了上述大佬的部分分析

  • 相关阅读:
    NodeJS学习笔记(三) 模块与包_深入学习
    NodeJS学习笔记(二) 模块与包_基础部分
    Java 开发环境搭建
    Quartz.net 定时任务矿建Demo
    MVC AJAX.BeginForm() 页面异步提交
    源码学习分享
    WPF系能优化
    谈如何阅读框架源码
    Linux源码学习(7) 2013-3-1
    Linux源码学习(6) 2013-3-1
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/13993700.html
Copyright © 2020-2023  润新知