1. 程式人生 > 實用技巧 >熊貓燒香逆向分析

熊貓燒香逆向分析

參考的看雪的一位大佬的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,並判斷這裡面應該還有檢驗兩個字串是否相等的函式(這是自己猜測的,因為生成一個先前有的字串拿來幹嘛?但我不知道在哪校驗,也跟進去看了看,但只發現了呼叫了臨界區,猜測是另外一個執行緒在校驗(猜測)????),但裡面還有些細節沒有搞明白,所以看了上述大佬的部分分析