灰鸽子木马来源追踪
一、 放到一个配置文件里,然后和程序文件一起,程序运行后读取信息。既然是木马我想没有谁会这么招摇吧,这样想来,就否认了这种方式。
二、 把配置信息和程序绑在一起,这里又有3种常见的方式:
1、 用绑定机把配置信息和程序绑成一个文件,但想一下,再加一个shell程序不又得变大多少KB了,因此想来这种方法可能性不大。
2、 把配置信息作为程序的附加数据,用PEID看了下,提示并没有附加数据。这样看来,很有可能是第三种方式了。
3、 把配置信息作为程序资源的一部分,在读取的时候通过Findresource来读取信息。
好了,初步推测是这样,打开OD来证实下,OD载入目标,下断FindResourceA,运行中断后,观察堆栈信息:
0013FEAC 004A11C2 /CALL to FindResourceA from message.004A11BD
0013FEB0 00400000 |hModule = 00400000 (message)
0013FEB4 004A088C |ResourceName = "SEVINFO"
0013FEB8 0000000A \ResourceType = RT_RCDATA
执行到返回,一看没错,可以证实是用2.3的方式把配置信息作为资源来处理。
004A11B5 . 50 PUSH EAX ; /ResourceType = 250
004A11B6 . 52 PUSH EDX ; |ResourceName = 000BD000 ???
004A11B7 . A1 64A64A00 MOV EAX,DWORD PTR DS:[4AA664] ; |
004A11BC . 50 PUSH EAX ; |hModule = 00000250
004A11BD . E8 B25CF6FF CALL 00406E74 ; \FindResourceA
004A11C2 . 8BD8 MOV EBX,EAX ; 返回到这里
004A11C4 . 85DB TEST EBX,EBX
004A11C6 . 0F84 D5000000 JE 004A12A1 ; 如果没有找到资源则跳去结束处
004A11CC . 53 PUSH EBX ; /hResource = 00000250 (window)
004A11CD . A1 64A64A00 MOV EAX,DWORD PTR DS:[4AA664] ; |
004A11D2 . 50 PUSH EAX ; |hModule = 00000250
004A11D3 . E8 745EF6FF CALL 0040704C ; \LoadResource
004A11D8 . 8BF0 MOV ESI,EAX ; 载入自定义资源
004A11DA . 85F6 TEST ESI,ESI ; message.004C4BA4
004A11DC . 0F84 BF000000 JE 004A12A1 ; 如果载入资源失败跳去结束处
004A11E2 . 53 PUSH EBX ; /hResource = 00000250 (window)
004A11E3 . A1 64A64A00 MOV EAX,DWORD PTR DS:[4AA664] ; |
004A11E8 . 50 PUSH EAX ; |hModule = 00000250
004A11E9 . E8 265FF6FF CALL 00407114 ; \SizeofResource
004A11EE . 8BD8 MOV EBX,EAX
本以为载入后就可以直接看到相关信息,d esi看了下就会发现原来木马在配置服务器端的时候进行了加密处理,我们现在看到的只是加密后的东西。
004C4BA4 44 38 35 45 36 41 31 35 46 33 45 41 32 45 34 32 D85E6A15F3EA2E42
004C4BB4 39 32 43 46 35 33 37 34 42 43 30 41 45 46 35 46 92CF5374BC0AEF5F
004C4BC4 38 36 37 39 44 46 36 41 45 34 33 39 34 36 42 38 8679DF6AE43946B8
004C4BD4 32 35 35 35 38 39 32 32 32 35 35 44 37 25558922255D7
不管它怎么加密程序最终还是要还原出原来的东西,既然要还原正确的信息,那就就一定行读取加密后的信息了,这样我们就在4C4BA4处下内存访问断点,mr 4C4BA4àRUN,运行后中断:
00402A3C |. FD STD
00402A3D |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>; 第一次中断在这里
00402A3F |. 89C1 MOV ECX,EAX
00402A41 |. 83E1 03 AND ECX,3
00402A44 |. 83C6 03 ADD ESI,3
00402A47 |. 83C7 03 ADD EDI,3
00402A4A |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
00402A4C |. FC CLD
STD逆时针解密,在402a4a处断下后定位到edi所在的地址。然后两次执行到返回(CTRL+F9),返回到如下地址:
004A03A7 . BA 8C084A00 MOV EDX,004A088C ; ASCII "SEVINFO"
004A03AC . B9 02000000 MOV ECX,2
004A03B1 . B8 0A000000 MOV EAX,0A
004A03B6 . E8 DD0D0000 CALL 004A1198
004A03BB . 84C0 TEST AL,AL ; 返回到这里
004A03BD . 0F84 7F040000 JE <ExitProc> ; 如果读取配置信息失败则跳去ExitProcess
004A03C3 . B2 01 MOV DL,1
004A03C5 . A1 F0364100 MOV EAX,DWORD PTR DS:[4136F0]
004A03CA . E8 AD37F6FF CALL 00403B7C
004A03CF . 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
004A03D2 . 8D4D F4 LEA ECX,DWORD PTR SS:[EBP-C]
004A03D5 . BA 9C084A00 MOV EDX,004A089C ; ASCII "20050101"
004A03DA . A1 E8BE4A00 MOV EAX,DWORD PTR DS:[4ABEE8]
004A03DF . E8 98D3FBFF CALL <Decrypt> ; 这里进去解密出配置文件的信息
004A03E4 . 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; 到了这里 d [ebp+c]看到了什么
004A03E7 . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A03EA . 8B08 MOV ECX,DWORD PTR DS:[EAX]
004A03EC . FF51 2C CALL DWORD PTR DS:[ECX+2C]
004A03EF . 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10]
004A03F2 . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A03F5 . 8B08 MOV ECX,DWORD PTR DS:[EAX]
004A03F7 . FF51 1C CALL DWORD PTR DS:[ECX+1C]
004A03FA . 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; 分出端口号
004A03FD . E8 5A4AF6FF CALL 00404E5C
004A0402 . 50 PUSH EAX ; /String = "4B?
004A0403 . E8 7C6CF6FF CALL 00407084 ; \OutputDebugStringA
004A0408 . 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14] ; 把上面的配置信息显示到调试器,到了这里看看OD的状态栏是不是显示出了相关的信息
004A040B . 33D2 XOR EDX,EDX
004A040D . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A0410 . 8B18 MOV EBX,DWORD PTR DS:[EAX]
004A0412 . FF53 0C CALL DWORD PTR DS:[EBX+C] ; message.004178FC
004A0415 . 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14] ; 取出端口号
004A0418 . B8 20BF4A00 MOV EAX,004ABF20
004A041D . E8 CE45F6FF CALL 004049F0
004A0422 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
004A0425 . BA 01000000 MOV EDX,1
004A042A . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A042D . 8B18 MOV EBX,DWORD PTR DS:[EAX]
004A042F . FF53 0C CALL DWORD PTR DS:[EBX+C] ; message.004178FC
004A0432 . 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18] ; 取出访问的地址
004A0435 . B8 34BF4A00 MOV EAX,004ABF34
004A043A . E8 B145F6FF CALL 004049F0
004A043F . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C]
004A0442 . BA 02000000 MOV EDX,2
004A0447 . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A044A . 8B18 MOV EBX,DWORD PTR DS:[EAX]
004A044C . FF53 0C CALL DWORD PTR DS:[EBX+C] ; message.004178FC
004A044F . 8B55 E4 MOV EDX,DWORD PTR SS:[EBP-1C] ; 取出密码
004A0452 . B8 38BF4A00 MOV EAX,004ABF38
004A0457 . E8 9445F6FF CALL 004049F0
004A045C . 8D4D E0 LEA ECX,DWORD PTR SS:[EBP-20]
004A045F . BA 03000000 MOV EDX,3
004A0464 . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A0467 . 8B18 MOV EBX,DWORD PTR DS:[EAX]
004A0469 . FF53 0C CALL DWORD PTR DS:[EBX+C] ; message.004178FC
004A046C . 8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20] ; 取出程序存放的路径
004A046F . B8 D4BE4A00 MOV EAX,004ABED4
004A0474 . E8 7745F6FF CALL 004049F0
004A0479 . 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
004A047C . A1 D4BE4A00 MOV EAX,DWORD PTR DS:[4ABED4]
004A0481 . E8 BEFBFFFF CALL 004A0044
004A0486 . 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24] ; 取出实际路径
004A0489 . B8 D4BE4A00 MOV EAX,004ABED4
004A048E . E8 5D45F6FF CALL 004049F0
004A0493 . 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
004A0496 . A1 D4BE4A00 MOV EAX,DWORD PTR DS:[4ABED4]
004A049B . E8 B093F6FF CALL 00409850 ; 取出EXE文件名
004A04A0 . 8B55 D8 MOV EDX,DWORD PTR SS:[EBP-28]
004A04A3 . B8 D8BE4A00 MOV EAX,004ABED8
004A04A8 . E8 4345F6FF CALL 004049F0
004A04AD . 33C0 XOR EAX,EAX
004A04AF . 55 PUSH EBP
004A04B0 . 68 E2044A00 PUSH 004A04E2
004A04B5 . 64:FF30 PUSH DWORD PTR FS:[EAX]
004A04B8 . 64:8920 MOV DWORD PTR FS:[EAX],ESP
004A04BB . 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
004A04BE . BA 04000000 MOV EDX,4
004A04C3 . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A04C6 . 8B18 MOV EBX,DWORD PTR DS:[EAX]
004A04C8 . FF53 0C CALL DWORD PTR DS:[EBX+C] ; message.004178FC
004A04CB . 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C] ; 取出端口?
004A04CE . E8 518CF6FF CALL <StrtoInt> ; 转换为数字
004A04D3 . A3 30BF4A00 MOV DWORD PTR DS:[4ABF30],EAX ; 保存端口
004A04D8 . 33C0 XOR EAX,EAX
004A04DA . 5A POP EDX ; 0013FEF8
004A04DB . 59 POP ECX ; 0013FEF8
004A04DC . 59 POP ECX ; 0013FEF8
004A04DD . 64:8910 MOV DWORD PTR FS:[EAX],EDX
004A04E0 . EB 14 JMP SHORT 004A04F6
004A04E2 .^ E9 653BF6FF JMP 0040404C
004A04E7 . C705 30BF4A00>MOV DWORD PTR DS:[4ABF30],32
004A04F1 . E8 BE3EF6FF CALL 004043B4
004A04F6 > 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
004A04F9 . BA 05000000 MOV EDX,5
004A04FE . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A0501 . 8B18 MOV EBX,DWORD PTR DS:[EAX]
004A0503 . FF53 0C CALL DWORD PTR DS:[EBX+C] ; 取出name information
004A0506 . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
004A0509 . B8 2CBF4A00 MOV EAX,004ABF2C
004A050E . E8 DD44F6FF CALL 004049F0
004A0513 . 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
004A0516 . BA 06000000 MOV EDX,6
004A051B . 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004A051E . 8B18 MOV EBX,DWORD PTR DS:[EAX]
004A0520 . FF53 0C CALL DWORD PTR DS:[EBX+C] ; message.004178FC
004A0523 . 8B55 CC MOV EDX,DWORD PTR SS:[EBP-34]