87 lines
1.9 KiB
C
87 lines
1.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
|
|
|
|
const char bios_head[32]=
|
|
{
|
|
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x5A,0xA5,0xF0,0x0F,0x03,0x00,0x04,0x03,0x06,0x02,0x10,0x15,0x20,0x01,0x21,0x00
|
|
};
|
|
char buff[1024*1000*16];
|
|
char id[32];
|
|
|
|
char chack_str(const char *a,char *b,int len)
|
|
{
|
|
int c;
|
|
for(c=0;c<len;c++)
|
|
{
|
|
if(a[c]!=b[c])
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void tryunlock(char *dir)
|
|
{
|
|
FILE *bios=NULL;
|
|
bios=fopen(dir,"rb");
|
|
if(bios==NULL)
|
|
{
|
|
printf("ERROR. can't Open file ..\n");
|
|
}else
|
|
{
|
|
fread(id,32,1,bios);
|
|
if(chack_str(bios_head,id,32))
|
|
{
|
|
printf("ERROR. Not Bios File\n");
|
|
}else
|
|
{
|
|
printf("try it..\n");
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
printf("ThinkPad Bios unlock..v0.1\n");
|
|
int a;
|
|
FILE *unlock_bios = NULL;
|
|
unlock_bios=fopen("./X250.bbb","rb");
|
|
if(unlock_bios==NULL)
|
|
{
|
|
printf("ERROR_NOTFUND_THE_BIOS_FILE\n");
|
|
return -1;
|
|
}
|
|
fread(buff,1024*1000*16,1,unlock_bios);
|
|
if(argc>1)
|
|
{
|
|
while(argc>1)
|
|
{
|
|
|
|
argc--;
|
|
printf("Input flie %s\n",argv[argc]);
|
|
tryunlock(argv[argc]);
|
|
}
|
|
printf("\n");
|
|
}else
|
|
{
|
|
printf("联想ThinkPad Bios超级密码解锁程序\n\n使用方法:\n");
|
|
printf("1 使用编程器将原机Bios读出\n");
|
|
printf("2 将读出的内容以二进制格式bin保存\n");
|
|
printf("3 将bin文件拖进本程序,程序会自动生成解锁Bios,(支持批量拖入)\n");
|
|
printf("4 将生成的解锁bios刷入,然后开机,按F1进入Bios,将超级密码改成空密码,按F10保存\n");
|
|
printf("5 完成! 注意,部分Bios芯片写入之前要先清空,否则无法校验通过。\n\n\n");
|
|
printf("编写 吴文峰 邮箱 kevin@lmve.net \n\n");
|
|
printf("项目地址 https://git.lmve.net/summary/thinkpad_unlock_bios.git \n!!!请勿商用!!!\n\n");
|
|
return 0;
|
|
}
|
|
printf("\n");
|
|
//printf("have %d file\n",argc-1);
|
|
//printf(argv[1]);
|
|
system("pause");
|
|
return 0;
|
|
}
|