找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2760|回复: 2
打印 上一主题 下一主题
收起左侧

[原创]开源老IBM笔记本密码破解器51单片机移植程序及Proteus仿真

[复制链接]
跳转到指定楼层
楼主
当年,我的IBM笔记本密码忘记了,于是在网上找到一个开源的破解程序(电脑版),于是移植到51单片机上破解了密码。


单片机源程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. typedef unsigned char uint8;
  4. typedef unsigned int uint16;
  5. typedef unsigned long uint32;
  6. uint8 IIC_Buffer[17];
  7. uint8 PASSWORD_Buffer[8];
  8. void Disp_Logo();
  9. sbit KEY=P3^2;
  10. sbit BEEP=P2^5;
  11. uint8 bak,uit;
  12. uint8 const code PASSWORDTAB[]=
  13. {
  14.         0x00,'1','2','3','4','5','6','7','8','9','0',0x00,0x00,0x00,0x00,0x00,'Q','W','E','R','T','Y','U','I','O','P',
  15.         0x00,0x00,0x00,0x00,'A','S','D','F','G','H','J','K','L',0x00,0x00,0x00,0x00,0x00,'Z',
  16.         'X','C','V','B','N','M',',','.',0x00,0x00,0x00,0x00,' ',0x00,0x00,0x00,0x00,0x00,0x00,
  17.         0x00,0x00,0x00,0x00,0x00,'/','*','7','8','9','-','4','5','6','+','1','2','3','0','.',0x00
  18. };                                                               
  19. sbit LCD_RS = P2^0;
  20. sbit LCD_RW = P2^1;
  21. sbit LCD_EN = P2^2;
  22. #define LCD_DataPort P0
  23. #define COMMAND 0
  24. #define DATA    1
  25. bit LCD_Check_Busy()
  26. {
  27.         bit result;
  28.         LCD_RS=0;
  29.         LCD_RW=1;
  30.         LCD_EN=1;
  31.         _nop_();_nop_();_nop_();_nop_();
  32.         result=(bit)(LCD_DataPort&0x80);
  33.         LCD_EN=0;
  34.         return result;
  35. }
  36. void LCD_Write(uint8 dat,uint8 type)
  37. {
  38.         while(LCD_Check_Busy());
  39.         LCD_RS=type;
  40.         LCD_RW=0;
  41.         LCD_EN=0;
  42.         _nop_();_nop_(); _nop_();_nop_();
  43.         LCD_DataPort=dat;
  44.         _nop_();_nop_();_nop_();_nop_();
  45.         LCD_EN=1;
  46.         _nop_();_nop_();_nop_();_nop_();
  47.         LCD_EN=0;
  48. }
  49. void LCD_Prints(uint8 *dat,uint8 addr)
  50. {
  51.         LCD_Write(addr|0x80,COMMAND);
  52.         while((*dat!='\0')||(*dat!=0x00))LCD_Write(*(dat++),DATA);
  53. }
  54. void PASS_Prints(uint8 *dat,uint8 addr)
  55. {
  56.         LCD_Write(addr|0x80,COMMAND);
  57.         LCD_Write('[',DATA);
  58.         while(*dat!=0x00)LCD_Write(*(dat++),DATA);
  59.         LCD_Write(']',DATA);
  60. }


  61. void LCD_Initialize()
  62. {
  63.         LCD_Write(0x06,COMMAND);
  64.         LCD_Write(0x38,COMMAND);
  65.         LCD_Write(0x0c,COMMAND);
  66.         LCD_Write(0x01,COMMAND);
  67. }
  68. sbit IIC_SCK        =                P2^3;
  69. sbit IIC_SDA        =                P2^4;

  70. #define IIC_WRITE_MODE        0xa0
  71. #define IIC_READ_MODE   0xa1

  72. void IIC_Delay()
  73. {
  74.         _nop_();
  75.         _nop_();
  76. }

  77. void IIC_Delayms(uint8 ms)
  78. {
  79.         uint8 i;
  80.         while(ms--)
  81.         {
  82.                 for(i=0;i<120;i++);
  83.         }
  84. }


  85. void IIC_Start_Byte()
  86. {
  87.         IIC_SDA=1;
  88.         IIC_SCK=1;
  89.         IIC_Delay();
  90.         IIC_SDA=0;
  91.         IIC_Delay();
  92.         IIC_SCK=0;
  93. }

  94. void IIC_Stop_Byte()
  95. {
  96.         IIC_SDA=0;
  97.         IIC_Delay();
  98.         IIC_SCK=1;
  99.         IIC_Delay();
  100.         IIC_SDA=1;
  101. }

  102. uint8 IIC_Read_Byte()
  103. {
  104.         uint8 i,dat;
  105.         for(i=0;i<8;i++)
  106.         {
  107.                 IIC_SCK=1;
  108.                 dat<<=1;
  109.                 dat|=(uint8)IIC_SDA;
  110.                 IIC_SCK=0;
  111.         }
  112.         return dat;
  113. }
  114. bit IIC_Write_Byte(uint8 dat)
  115. {
  116.         uint8 i;
  117.         bit ack;
  118.         for(i=0;i<8;i++)
  119.         {
  120.                 IIC_SDA=(bit)(dat&0x80);
  121.                 IIC_Delay();
  122.                 IIC_SCK=1;
  123.                 IIC_Delay();
  124.                 IIC_SCK=0;
  125.                 dat<<=1;
  126.         }
  127.         IIC_SDA=1;
  128.         IIC_Delay();
  129.         IIC_SCK=1;
  130.         IIC_Delay();
  131.         IIC_Delay();
  132.         ack=IIC_SDA;
  133.         IIC_SCK=0;
  134.         return ack;
  135. }

  136. void IIC_Write_Data(uint8 addr,uint8 dat)
  137. {
  138.         IIC_Start_Byte();
  139.         IIC_Write_Byte(IIC_WRITE_MODE);
  140.         IIC_Write_Byte(addr);
  141.         IIC_Write_Byte(dat);
  142.         IIC_Stop_Byte();
  143.         IIC_Delayms(10);
  144. }

  145. uint8 IIC_Read_Current()
  146. {
  147.         uint8 dat;
  148.         IIC_Start_Byte();
  149.         IIC_Write_Byte(IIC_READ_MODE);
  150.         dat=IIC_Read_Byte();
  151.         IIC_Stop_Byte();
  152.         return dat;
  153. }

  154. uint8 IIC_Read_Data(uint8 addr)
  155. {
  156.         IIC_Start_Byte();
  157.         IIC_Write_Byte(IIC_WRITE_MODE);
  158.         IIC_Write_Byte(addr);
  159.         return IIC_Read_Current();
  160. }
  161. void GOTO_LOGO() interrupt 1 using 1
  162. {
  163.         bak++;
  164.         if(bak==0x39){Disp_Logo();TR0=0;bak=0;uit=0;}
  165. }
  166. void Beep_Int() interrupt 3 using 2
  167. {
  168.         TH1=1200;
  169.         TL1=1200;
  170.         BEEP=~BEEP;
  171. }
  172. void Password_Read() interrupt 0 using 0
  173. {
  174.         uint8 i;
  175.         while(!KEY);
  176.         EX0=1;
  177.         if(uit==1)goto exit;
  178.         uit++;
  179.         bak=0;
  180.         TH0=0xfe;
  181.         TL0=0xff;
  182.         TR0=1;
  183.         LCD_Write(0x01,COMMAND);
  184.         for(i=0;i<7;i++)
  185.         {
  186.                 PASSWORD_Buffer[i]=PASSWORDTAB[IIC_Read_Data(0x38+i)];
  187.         }
  188.         for(i=0;i<16;i++)
  189.         {
  190.                 IIC_Buffer[i]=IIC_Read_Data(0x70+i);
  191.         }
  192.         IIC_Buffer[16]='\0';
  193.         PASS_Prints(PASSWORD_Buffer,0x40);
  194.         LCD_Prints(IIC_Buffer,0);
  195.         goto exit1;
  196. exit:  Disp_Logo();
  197.            uit=0;
  198. exit1: i=0;
  199. }
  200. void Disp_Logo()
  201. {
  202.         LCD_Prints("WelCome  Use IBM",0);
  203.         LCD_Prints(" Password  Read ",0x40);
  204. }
  205. void main()
  206. {
  207.         uint8 i;
  208.         IIC_SDA = 1;
  209.         IIC_SCK = 1;
  210.         LCD_Initialize();
  211.         TMOD=0x01;
  212.         EA=1;
  213.         EX0=1;
  214.         ET0=1;
  215.         Disp_Logo();
  216.         while(1);
  217. }
复制代码

所有资料51hei提供下载:
IBMPASSWORD.rar (71.16 KB, 下载次数: 13)




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:401599 发表于 2018-10-10 20:47 | 只看该作者
不错,感谢分享!
回复

使用道具 举报

板凳
ID:399309 发表于 2018-10-11 01:48 | 只看该作者
大神厉害呀,赞,再开发个dell的解密!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表