&&&&&&&&&&&字符串移位 (只为自己方便查看)

[1]

exe文件改法:

1.先用od打开文件,找到调用了字符串的内存地址,记录下来

  看看调用了字符串的地方有几个,跟随过去,看到的是push把字符串压入堆

  栈,把所有调用了字符串地方的内存地址都记录下来,记录下了这些就可以先关了od了

2.用C32移动字符串,现在只向前移动一位,在od里把push的值也都减1,保存后字符串就回来了

 

 

[2]

dll文件改法:

步骤:

1.用C32载入文件,找到字符串,记下这个字符串的开头字符的物理地址

2.把这个物理地址转换为内存地址

3.把内存地址调换下位置

4.用C32打开***,再把字符串移位,也记下字符串移位后首字符的物理地址,然后十六进制替换

5.检测上线和功能

异或方法加密字符串:

 

用这个方法可以加密exe和dll字符串,包括像Pcshare***的DLL文件里的输出表函数名

步骤:


1.先找到你要加密的字符串的物理地址,再转为内存地址

2.记录下DLL现在的入口点,然后找一个零区域,同样记录下其内存地址,用来写入加密代码

  再用LoadPe改入口点为零区域的地址

  还得用LoadPe改PcMain.dll输出表所在区段的标志为E0000020,标志为E0000020就是可读可写

  可执行.如果你不改这个的话,运行是会出错的!

  字符串的物理地址:

  字符串的内存地址:

  DLL的入口点:

  零区域地址:

 (用LoadPE改入口的时候得去掉内存地址的基址哦)

 


3.再用下面的代码来实现加密,但这样一个一个的粘贴上去是很慢的,所以还是

  用下面的二进制来粘贴了,这样不容易出错,也节省了时间

————————————————————————————————————

PUSHAD
CALL 10011866       //call 下面的“pop eax”的地址
POP EAX
XOR AX,AX
ADD EAX,xxxxxxxx   //内存地址去掉前面的1001基址得到****,这里得按你的情况来填
XCHG EAX,ESI
MOV EDI,ESI
LODS BYTE PTR DS:[ESI]
OR AL,AL
JE 1001187C                   //je到下面的“POPAD”
XOR AL,18
STOS BYTE PTR ES:[EDI]
JMP 10011872                  //jmp到上面的“LODS BYTE PTR DS:[ESI]”
POPAD
JMP xxxxxxxx                  //jmp到原入口,这里得按你的情况来填
     
————————————————————————————————————

二进制粘贴的代码:

60 E8 00 00 00 00 58 66 33 C0 05 C7 29 00 00 96 8B FE AC 08 C0 74 05 34 18 AA EB F6 61 EB 89

————————————————————————————————————

这样改后用OD打开文件,走到你加密的字符串那里,按F8单步,看看字符串被加密成了什么东西,二进制复制下来,

然后把这些加密了的字符串覆盖掉原字符串就可以了(正常的字符串被异或后成了乱码,所以乱码再次被异或就能还

原成了原来的正常的字符串)


exe文件字符串动态恢复:

 

首先把数据段(.data)也就是字符串所在区段属性的标志设置为E0000020,然后用OD载入,

记录下原入口点:

然后用C32把字符串的ASCII码记录下来(HEX格式化复制),每四个字节为一组分开,再把每组都反转过来

 

 

把字符串的内存地址找出来,然后找一个零区域,写入下面的动态恢复代码

————————————————————————————————————

exe文件动态恢复代码:

mov dword ptr ds:[字符串内存地址],上面得到的反转机器码1
mov dword ptr ds:[字符串内存地址+4],上面得到的反转机器码2
* * * * * * * *
jmp 原入口点

————————————————————————————————————

 

 

 

[2]

dll文件字符串动态恢复:

 

首先把数据段(.data)也就是字符串所在区段属性的标志设置为E0000020,然后用OD载入,

记录下原入口点:

然后用C32把字符串的ASCII码记录下来(HEX格式化复制),每四个字节为一组分开,再把每组都反转过来

 

 

把字符串的内存地址找出来,然后找一个零区域,写入下面的动态恢复代码

————————————————————————————————————
dll文件动态恢复代码:

pushad
call xxxxxxxx(call下面的pop eax地址)
pop eax
sub eax,xxxxxxxx;  (上面的pop eax地址)
add eax,xxxxxxxx;  (字符串原内存地址)
mov dword ptr ds:[eax],上面得到的反转机器码1
mov dword ptr ds:[eax+4],上面得到的反转机器码2
mov dword ptr ds:[eax+8],上面得到的反转机器码3
mov dword ptr ds:[eax+c],上面得到的反转机器码3
* * * * * * * *
popad
jmp 原入口点

————————————————————————————————————

二进制代码:
60 E8 00 00 00 00 58 2D E6 1F 01 10 05 70 45 01 10 C7 00 11 11 11 11

————————————————————————————————————

改入口点,00填充掉原来的字符串即可

[1]

exe文件字符串动态恢复:

 

首先把数据段(.data)也就是字符串所在区段属性的标志设置为E0000020,然后用OD载入,

记录下原入口点:

然后用C32把字符串的ASCII码记录下来(HEX格式化复制),每四个字节为一组分开,再把每组都反转过来

 

 

把字符串的内存地址找出来,然后找一个零区域,写入下面的动态恢复代码

————————————————————————————————————

exe文件动态恢复代码:

mov dword ptr ds:[字符串内存地址],上面得到的反转机器码1
mov dword ptr ds:[字符串内存地址+4],上面得到的反转机器码2
* * * * * * * *
jmp 原入口点

————————————————————————————————————

 

 

 

[2]

dll文件字符串动态恢复:

 

首先把数据段(.data)也就是字符串所在区段属性的标志设置为E0000020,然后用OD载入,

记录下原入口点:

然后用C32把字符串的ASCII码记录下来(HEX格式化复制),每四个字节为一组分开,再把每组都反转过来

 

 

把字符串的内存地址找出来,然后找一个零区域,写入下面的动态恢复代码

————————————————————————————————————
dll文件动态恢复代码:

pushad
call xxxxxxxx(call下面的pop eax地址)
pop eax
sub eax,xxxxxxxx;  (上面的pop eax地址)
add eax,xxxxxxxx;  (字符串原内存地址)
mov dword ptr ds:[eax],上面得到的反转机器码1
mov dword ptr ds:[eax+4],上面得到的反转机器码2
mov dword ptr ds:[eax+8],上面得到的反转机器码3
mov dword ptr ds:[eax+c],上面得到的反转机器码3
* * * * * * * *
popad
jmp 原入口点

————————————————————————————————————

二进制代码:
60 E8 00 00 00 00 58 2D E6 1F 01 10 05 70 45 01 10 C7 00 11 11 11 11

————————————————————————————————————

改入口点,00填充掉原来的字符串即可