二进制数字密码的破译
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二进制数字密码的破译相关的知识,希望对你有一定的参考价值。
一组20个数字(二进制),用来破译1-4个十进制阿拉伯数字,有什么好的方法,把思路说出来,也可以提供相关的教材之类的信息,或是有这种数字分析软件能找出规律的最好不过,我还会追加分数的
问题补充:二进制转化为十进制只要是学过数学的谁不知道,我不要科普的,要专业的回答,我再说一次,是数字密码,要想办法破译出来,二进制转化为十进制只是其中很明显的一种破译手段而已,请大家好好读懂我的题目
回答问题请到http://zhidao.baidu.com/question/65071184.html上,有100分的悬赏
可以运用ReverseMe来二进制数字密码的破译,需要了解以下的内容:
1、寄存器:
寄存器就好比是CPU身上的口袋,方便CPU随时从里边拿出需要的东西来使用。常见涉及到的九个寄存器:
EAX:扩展累加寄存器;EBX:扩展基址寄存器;ECX:扩展计数寄存器;
EDX:扩展数据寄存器;ESI:扩展来源寄存器;EDI:扩展目标寄存器;
EBP:扩展基址指针寄存器;ESP:扩展堆栈指针寄存器;EIP:扩展的指令指针寄存器;
这些寄存器的大小是32位(4个字节),他们可以容纳数据从0-FFFFFFFF(无符号数),除了以下三个寄存器,其他我们都可以随意使用:
EBP:主要是用于栈和栈帧。ESP:指向当前进程的栈空间地址。EIP:总是指向下一条要被执行的指令。
2、栈:栈是在内存中的一部分,它有两个特殊的性质:
FILO(FisrtInLastOut,先进后出);地址反向增长(栈底为大地址,栈顶为小地址)。
3、CALL指令,call有以下几种方式:
call404000h;直接跳到函数或过程的地址;calleax;函数或过程地址存放在eax,calldwordptr[eax]。
4、系统API:Windows应用程序运行在Ring3级别,API函数,我们也称之为系统提供给我们的接口。因为系统只信任自己提供的函数,所以我们要通过API才能实现对内核的操作。
5、mov指令mov指令格式:movdest,src。
这是一个很容易理解的指令,mov指令将src的内容拷贝到dest,mov指令总共有以下几种扩展:movs/movsb/movsw/movsdedi,
esi:这些变体按串/字节/字/双字为单位将esi寄存器指向的数据复制到edi寄存器指向的空间。movsx符号位扩展,byte->word,word->dword (扩展后高位全用符号位填充)。
然后实现mov。movzx零扩展,byte->word,word->dword(扩展后高位全用0填充),然后实现mov。
6、cmp指令,cmp指令格式:cmpdest,src
cmp指令比较dest和src两个操作数,并通过比较结果设置C/O/Z标志位。
cmp指令大概有以下几种格式:
cmpeax,ebx;如果相等,Z标志位置1,否则0。cmpeax,[404000];将eax和404000地址处的dword型数据相比较并同上置位cmp[404000],eax;同上。
7、标志位:在破解中起到的作用是至关重要的。
在逆向中,你真正需要关心的标志位只有三个,也就是cmp指令能修改的那三个:Z/O/C。
Z标志位(0标志),这个标志位是最常用的,运算结果为0时候,Z标志位置1,否则置0。
O标志位(溢出标志),在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0。
C标志位(进位标志),记录运算时从最高有效位产生的进位值。例如执行加法指令时,最高有效位有进位时置1,否则置0。
掌握这些指令后就可以运用ReverseMe来二进制数字密码的破译。
扩展资料:
在数学和数字电路中,二进制(binary)数是指用二进制记数系统,即以2为基数的记数系统表示的数字。这一系统中,数通常用两个不同的符号0(代表零)和1(代表一)来表示。
以2为基数代表系统是二进位制的。数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(二进制位)。
把二进制化为八进制也很容易,因为八进制以8为基数,8是2的幂(8=2),因此八进制的一位恰好需要三个二进制位来表示。八进制与二进制数之间的对应就是上面表格中十六进制的前八个数。二进制数000就是八进制数0,二进制数111就是八进制数7,以此类推。
参考资料:百度百科-二进制码
参考技术A 1。 十进制十进制使用十个数字(0、1、2、3、4、5、6、7、8、9)记数,基数为10,逢十
进一。历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算。设计十进制机器比设计二进制机器复杂得多。而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数。设计过程简单,可靠性高。因此,现在改为二进制计算机。
2。 二进制
二进制以2为基数,只用0和1两个数字表示数,逢2进一。
二。进制转换
1。二进制与十进制数间的转换
(1)二进制转换为十进制
将每个二进制数按权展开后求和即可。请看例题:
把二进制数101转化为十进制数
1=1×2^0=1
1001=1×2^3+0×2^2+0×2^1+1×2^0=9
1011=1×2^3+0×2^2+1×2^1+1×2^0=11
或者,你用8421码就可以了,这样使用,
这是上下对应的,你看好了
8 4 2 1
1 0 0 1
1001=1×8+0×4+0×2+1×1=9
8 4 2 1
1 0 1 1
1011=1×8+0×4+1×2+1×1=11
(2)十进制转换为二进制
一般需要将十进制数的整数部分与小数部分分开处理。
整数部分计算方法:除2取倒取余法 (注意是倒着取余数)
请看例题:
十进制数(53)的二进制值为(110101)
53除以2得26,余1,取1
26除以2得13,余0,取0
13除以2得6,余1,取1
6除以2得3,余0,取0
3除以2得1,余1,取1
1除以2得0,余1,取1
再以12为例,转为二进制
12除以2得6,余0,取0
6除以2得3,余0,取0
3除以2得1,余1,取1
1除以2得0,余1,取1
由最后开始写起,就可得1100的二进制结果
小数部分计算方法:
就是把该小数不断乘2,再取所得的整数部份,直至没有小数为止,但请注意并
不是所有小数都能转到!
以0.875为例,
0.875乘以2得1.750,取整数1
0.750乘以2得1.500,取整数1
0.500乘以2得1,取整数1,就可得0.111的二进制结果
十进制数(0.875)的二进制值为(0.111)
PS:整数部分与小数部分算法的区别
有点长耐心看哦本回答被提问者采纳 参考技术B 13589074664用2进制是多少
以上是关于二进制数字密码的破译的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试真题 C 实现密码破译2023 Q1 | 200分