'Foxshell2016包含链接库解密算法(foxshell2016解密难度在于它打乱了所有vfp9r.dll中的函数调用。让人无法知道以前那些readfile等函数地址。最无耻的办法就''是带call的全部下断。总会找到的。)vfp9开头字节。4d5a请具体查看vfp9r.dll的库文件内容,然后定位出那个内存是存放dll的。找到后下硬件断点。断下后就可'以按正常的调试方法来调试了。
'Foxshell2016解密要点。设置中断于dll加载。每次加载中断后查看内存。当有01300000内存建立起后。在031F2DF4(文件序号及大小)013E3C5C(文件名)13D51BA'(读文件)。'009C4897读取文件。'009C6BB3读取解码。'009C5505解码。以下为解码函数。找到内存后一般取最大的去掉前36个字节后就是加密后的app文件,写代'码解密即可。也可以搜索02160320来定位app找到后存成文件即可。
''009C5590 B8 2C000000 mov eax,2C eax=2C就是KEY1
''009C5595 8BCE mov ecx,esi ecx=esi 读到第几个了
''009C5597 038D E4FEFFFF add ecx,dword ptr ss:[ebp-11C] ebp-11c存的是待解码基址
''009C559D 0FB609 movzx ecx,byte ptr ds:[ecx] 取待解字节给ecx
bm=ddata(eax)
''009C55A0 33C1 xor eax,ecx eax=eax xor ecx
key2=key1 xor bm
'009C55A2 8BCE mov ecx,esi ecx=esi 读到第几了
'009C55A4 038D E4FEFFFF add ecx,dword ptr ss:[ebp-11C] ebp-11c存的是待解码基址
'009C55AA 8801 mov byte ptr ds:[ecx],al 先把待解字节置为2c al=2c
'009C55AC B8 2C000000 mov eax,2C eax=2c
'009C55B1 8B5D 14 mov ebx,dword ptr ss:[ebp+14] 取密码3地址给ebx
'009C55B4 0FB60B movzx ecx,byte ptr ds:[ebx] ds[ebx]=B6 取出密码给ecx
'009C55B7 33C1 xor eax,ecx eax=2c xor b6
key4=key1 xor key3 '这里就直接设置成key4加快运算速度
'009C55B9 8B5D 14 mov ebx,dword ptr ss:[ebp+14] 取密码3地址给ebx
'009C55BC 0FB60B movzx ecx,byte ptr ds:[ebx] ds[ebx]=B6 取出密码给ecx
'009C55BF 8945 D0 mov dword ptr ss:[ebp-30],eax 将key4的值存到ss:[ebp-30]这里理解就是key4
'009C55C2 B8 00010000 mov eax,100 eax=100
'009C55C7 894D D4 mov dword ptr ss:[ebp-2C],ecx ebp-2c处存放ecx就是B6
'009C55CA 8BCE mov ecx,esi ecx=esi 读到第几了
'009C55CC 038D E4FEFFFF add ecx,dword ptr ss:[ebp-11C] ebp-11c存的是待解码基址
'009C55D2 0FB609 movzx ecx,byte ptr ds:[ecx] ecx=2c前面写入的值
'009C55D5 03C1 add eax,ecx eax=eax+ecx 其实就是100+2c
'009C55D7 3345 D4 xor eax,dword ptr ss:[ebp-2C] 把eax=eax xor b6 其实就是100+2c xor b6 al值
'009C55DA 2B45 D0 sub eax,dword ptr ss:[ebp-30] eax=eax-key4
'009C55DD 89C7 mov edi,eax edi=eax
'009C55DF 81FF FF000000 cmp edi,0FF 和ff比较
'009C55E5 0F8E 17000000 jle '009C5602 小于则跳到sfa处 如果小于写入al值大于写入bl值
'009C55EB 8BC7 mov eax,edi eax=edi
'009C55ED 81E8 00010000 sub eax,100 eax=eax-100
'009C55F3 8BCE mov ecx,esi ecx=esi
'009C55F5 038D E4FEFFFF add ecx,dword ptr ss:[ebp-11C]
'009C55FB 8801 mov byte ptr ds:[ecx],al 回写al值
'009C55FD E9 0C000000 jmp '009C560E 跳到sfb
sfa:
'009C5602 8BC6 mov eax,esi eax=esi
'009C5604 0385 E4FEFFFF add eax,dword ptr ss:[ebp-11C]
'009C560A 8BDF mov ebx,edi
'009C560C 8818 mov byte ptr ds:[eax],bl 回写为bl
sfb
'009C560E FFC6 inc esi esi=esi+1
'009C5610 8BC6 mov eax,esi eax=esi
'009C5612 3B85 58FFFFFF cmp eax,dword ptr ss:[ebp-A8] 是否已经解完。解完就跳出。
'009C5618 ^ 0F8E 72FFFFFF jle '009C5590
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课