熊猫烧香逆向分析

参考的看雪的一位大佬的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,并判断这里面应该还有检验两个字符串是否相等的函数(这是自己猜测的,因为生成一个先前有的字符串拿来干嘛?但我不知道在哪校验,也跟进去看了看,但只发现了调用了临界区,猜测是另外一个线程在校验(猜测)????),但里面还有些细节没有搞明白,所以看了上述大佬的部分分析

posted @ 2020-11-17 13:17  PYozo_free  阅读(263)  评论(0编辑  收藏  举报