我是靠谱客的博主 呆萌小笼包,最近开发中收集的这篇文章主要介绍base64反汇编base64反汇编,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

base64反汇编

文章目录

  • base64反汇编
    • 1.C语言代码(base64加密)
    • 2.base64反汇编
    • 3.对比分析

1.C语言代码(base64加密)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void jiami(char x,char y,char z);

char s[100];
int i,j;

char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

int main()
{
	int len;
	char str[100];

	printf("base64需要加密的字符串:");
	gets(str);
	len=strlen(str);
	
	for(i=0,j=0;i<=len-3;i+=3,j+=4)
	{
		jiami(str[i],str[i+1],str[i+2]);
	}
	if(len%3==1)
	{
		s[j]=a[str[len-1]>>2];
		s[j+1]=a[str[len-1]<<4&0x3f];
		s[j+2]='=';
		s[j+3]='=';
	}

	if(len%3==2)
	{
		s[j]=a[str[len-2]>>2];
		s[j+1]=a[(str[len-2]<<4|str[len-1]>>4)&0x3f];
		s[j+2]=a[(str[len-1]<<2)&0x3f];
		s[j+3]='=';
	}
	printf("n加密之后:");
	puts(s);
	printf("n");
	system("pause");
	return 0;
}

void jiami(char x,char y,char z)
{
	s[j]=a[x>>2];
	s[j+1]=a[(x<<4|y>>4)&0x3f];
	s[j+2]=a[(y<<2|z>>6)&0x3f];
	s[j+3]=a[z&0x3f];
}

2.base64反汇编

这里我就只贴出base64位运算的反汇编,即上述C语言jiami(char x,char y,char z)这个函数的汇编。

00401280 >/> 55             PUSH EBP
00401281  |. 8BEC           MOV EBP,ESP
00401283  |. 83EC 40        SUB ESP,0x40
00401286  |. 53             PUSH EBX
00401287  |. 56             PUSH ESI
00401288  |. 57             PUSH EDI
00401289  |. 8D7D C0        LEA EDI,DWORD PTR SS:[EBP-0x40]          ;  三个参数分别x,y,z
0040128C  |. B9 10000000    MOV ECX,0x10
00401291  |. B8 CCCCCCCC    MOV EAX,0xCCCCCCCC
00401296  |. F3:AB          REP STOS DWORD PTR ES:[EDI]
00401298  |. 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+0x8]
0040129C  |. C1F8 02        SAR EAX,0x2                              ;  x算数右移两位(填充符号位),取高四位
0040129F  |. 8B0D CCAE4200  MOV ECX,DWORD PTR DS:[j]
004012A5  |. 8A90 307A4200  MOV DL,BYTE PTR DS:[EAX+a]               ;  a是码表首地址,加eax偏移,即查表
004012AB  |. 8891 E0AE4200  MOV BYTE PTR DS:[ECX+s],DL               ;  记录,s是输出地址,ecx即对于偏移,记录加密过后的结构
004012B1  |. 0FBE45 08      MOVSX EAX,BYTE PTR SS:[EBP+0x8]
004012B5  |. C1E0 04        SHL EAX,0x4                              ;  x逻辑左移4位,取低二位
004012B8  |. 0FBE4D 0C      MOVSX ECX,BYTE PTR SS:[EBP+0xC]
004012BC  |. C1F9 04        SAR ECX,0x4                              ;  y算数右移4位,取高四位
004012BF  |. 0BC1           OR EAX,ECX                               ;  逻辑或or运算,将前面两个数合并
004012C1  |. 83E0 3F        AND EAX,0x3F                             ;  与0x3f(0011 1111)逻辑与,即取这个 合并的数 的低六位
004012C4  |. 8B15 CCAE4200  MOV EDX,DWORD PTR DS:[j]
004012CA  |. 8A80 307A4200  MOV AL,BYTE PTR DS:[EAX+a]               ;  查表
004012D0  |. 8882 E1AE4200  MOV BYTE PTR DS:[EDX+0x42AEE1],AL        ;  记录,edx+地址,这个地址对应起始地址,已经自增了(+1)。
004012D6  |. 0FBE4D 0C      MOVSX ECX,BYTE PTR SS:[EBP+0xC]
004012DA  |. C1E1 02        SHL ECX,0x2                              ;  将y逻辑左移2位,取低四位
004012DD  |. 0FBE55 10      MOVSX EDX,BYTE PTR SS:[EBP+0x10]
004012E1  |. C1FA 06        SAR EDX,0x6                              ;  z算数右移6位,只取高2位。
004012E4  |. 0BCA           OR ECX,EDX                               ;  逻辑或or运算,将两数合并
004012E6  |. 83E1 3F        AND ECX,0x3F                             ;  与0x3f(0011 1111)逻辑与,即取这个 合并的数 的低六位
004012E9  |. A1 CCAE4200    MOV EAX,DWORD PTR DS:[j]
004012EE  |. 8A89 307A4200  MOV CL,BYTE PTR DS:[ECX+a]               ;  查表
004012F4  |. 8888 E2AE4200  MOV BYTE PTR DS:[EAX+0x42AEE2],CL        ;  记录,eax+地址,
004012FA  |. 0FBE55 10      MOVSX EDX,BYTE PTR SS:[EBP+0x10]
004012FE  |. 83E2 3F        AND EDX,0x3F                             ;  z直接和0x3f(0011 1111)与运算,取低六位
00401301  |. A1 CCAE4200    MOV EAX,DWORD PTR DS:[j]
00401306  |. 8A8A 307A4200  MOV CL,BYTE PTR DS:[EDX+a]               ;  查表
0040130C  |. 8888 E3AE4200  MOV BYTE PTR DS:[EAX+0x42AEE3],CL        ;  记录,eax+地址
00401312  |. 5F             POP EDI
00401313  |. 5E             POP ESI
00401314  |. 5B             POP EBX                                  ;  以上记录的数,都存储与内存,即不需返回值
00401315  |. 8BE5           MOV ESP,EBP
00401317  |. 5D             POP EBP
00401318  . C3             RETN


3.对比分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wYczemH3-1586698318415)(E:/Typora/image/1586698114415.png)]

另外两个尾数==的处理,其实也差不多,就不贴了……


欢迎大家留言交流。

最后

以上就是呆萌小笼包为你收集整理的base64反汇编base64反汇编的全部内容,希望文章能够帮你解决base64反汇编base64反汇编所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部