我们知道keymake生成的内存补丁程序通常被一些杀毒程序视为病毒。为解决这一问题,特意生成一内存补丁程序进行分析。
keymake生成的内存补丁程序结构如下:
1.程序体+附加数据
2.程序体采用upx压缩。
为了做到免杀,只需对程序体进行改造。
改造步骤:
1.先对程序体进行脱壳处理,并做备份。
2.分析程序得到附加数据。
3.然后在程序体后面加上原附加数据。
执行程序仍然出错。
用od载入原程序分析,发现原程序体的读取附加数据偏移地址为0x1000h,
0040108F 50 push eax
00401090 E8 33030000 call <jmp.&kernel32.GetFileSize>
00401095 2D 00100000 sub eax, 1000 ;得到附加数据长度/修改此处位置
0040109A 83F8 00 cmp eax, 0
0040109D 72 04 jb short 004010A3
0040109F 0BC0 or eax, eax
004010A1 75 03 jnz short 004010A6
004010A3 5B pop ebx
004010A4 C9 leave
004010A5 C3 retn
004010A6 8BD8 mov ebx, eax
004010A8 6A 00 push 0
004010AA 6A 00 push 0
004010AC 68 00100000 push 1000 ;指向附加数据位置/修改此处位置
004010B1 FF75 FC push dword ptr [ebp-4]
004010B4 E8 45030000 call <jmp.&kernel32.SetFilePointer>
004010B9 E8 16030000 call <jmp.&kernel32.GetProcessHeap>
004010BE 8945 F4 mov [ebp-C], eax
004010C1 83C3 20 add ebx, 20
4.为此我们修改脱壳后的程序体中附加数据位置,程序正常执行。
5.为了做到免杀,比较好的办法就是对程序体再进行加壳处理,避免杀毒程序的识别。我选用fsg对脱好的程序体再进行加壳处理(当然用户可
以根据自己喜爱选择壳),得到压缩后的文件大小,这就是压缩后的附加数据位置。于是再对脱壳后的程序体进行相应修改,再用fsg压缩处理
,文件大小没变,说明附加数据位置正确。最后在新压缩的程序体后面附加上相应数据即可完成改造。
2006/07/26
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)