|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 15, 2002 11:48:00 · Поправил: Безпощадный даос ХЕЛП! Какой алгоритм юзает авард биос при подсчете ЦРЦ пароля?? Плиз, очень нужно! |
|
|
Дата: Дек 15, 2002 15:09:21 Похоже, что-нибудь вроде: xor dx,dx и для каждого следующего символа (al) mov ah,0 rol dx,2 add dx,ax |
|
|
Дата: Дек 15, 2002 15:10:40 Вдогонку - результат, естественно, в DX |
|
|
Дата: Дек 15, 2002 16:18:29 Вобще а больше на QB VB кодю, но асм тоже летом подучил, как я понял, байты складываются, и после каждого символа происходит смещение на 2 бита (вправо вроде), притом етот хвост теряется, так? просто мне ето так и так на VB перекодить, я буду фильтр писать, шоб список универсальных паролей почистить --- а, не, рол, етож вроде циклический здвиг, тогда ети 2 бита вылезут с другого конца? :) ну тогда все ок, токо в АЛ символы идут в какой кодеровке? асли просто ASCII, то тк символы англ, можно и на ВБ без перекодирования тыкать :) |
|
|
Дата: Дек 15, 2002 17:21:58 Команда ROL = ROtate Left - циклический сдвиг влево. >в АЛ символы идут в какой кодеровке? При вводе пароля SETUP'а - естесственно, ASCII |
|
|
Дата: Дек 15, 2002 17:35:05 Вот, хыть ктото мне ответил нормально :) (на citforum все молчат :) а там точно сдвиг на 2 бита? вобщем надосуге на бесике напишу, испробую :) (если че - подгоню, у меня есть несколько паролей с одинаковой crc) |
|
|
Дата: Июл 11, 2003 16:30:38 · Поправил: Безпощадный даос Вот тебе исходник... Ногами не пинай, когда писал - был еще маленький и бородатый...
program award_bios_password_fucker;
uses crt;
function inbyte(addr:byte):byte;
var b:byte;
begin
asm
push ax
push dx
mov dx,70h
mov al,addr
out dx,al
inc dx
in al,dx
mov b,al
pop dx
pop ax
end;
inbyte:=b;
end;
procedure outbyte(addr,val:byte);
begin
asm
push ax
push dx
mov dx,70h
mov al,addr
out dx,al
inc dx
mov al,val
out dx,al
pop dx
pop ax
end;
end;
function crc_calc(c:boolean):word;{case c of true-standard;false-extended}
var crc:word;
f,s,e:byte;
begin
crc:=0;
if c then
begin
s:=16;
e:=45;
end else
begin
s:=64;
e:=121;
end;
for f:=s to e do inc(crc,inbyte(f));
crc_calc:=crc;
end;
function pass_crc(s:string):word;
var crc,k:longint;
f:byte;
begin
k:=1;
crc:=0;
for f:=length(s) downto 1 do
begin
inc (crc,k*ord(s[f]));
k:=k*4;
end;
k:=round(crc/65536);
crc:=crc-k*65536;
pass_crc:=crc+k;
end;
procedure box(x1,y1,x2,y2:byte);
var f:byte;
begin
gotoxy(x1,y1);
write('Й');
for f:=x1+1 to x2-1 do write ('Н');
write('»');
for f:=y1+1 to y2-1 do
begin
gotoxy(x1,f);
write('є');
gotoxy(x2,f);
write('є');
end;
gotoxy(x1,y2);
write('И');
for f:=x1+1 to x2-1 do write ('Н');
write('ј');
end;
function input(l:byte):string;
var s:string;
x,y,f:byte;
c:char;
begin
s:='';
x:=wherex;
y:=wherey;
repeat
gotoxy(x,y);
for f:=1 to l do write('±');
gotoxy(x,y);
write(s);
c:=readkey;
if (c=#8) and (length(s)>0) then delete(s,length(s),1);
if length(s)=l then continue;
if c in ['!'..'~'] then s:=s+c;
until c=#13;
input:=s;
end;
function dump_cmos(n:string):boolean;
var d:file of byte;
f,b:byte;
begin
{$I-}
dump_cmos:=true;
assign(d,n);
rewrite(d);
for f:=0 to 127 do
begin
b:=inbyte(f);
write(d,b);
end;
close(d);
reset(d);
for f:=0 to 127 do
begin
read(d,b);
if b<>inbyte(f) then dump_cmos:=false;
end;
close(d);
if ioresult<>0 then dump_cmos:=false;
{$I+}
end;
procedure restore_dump(n:string);
var d:file of byte;
f,b:byte;
begin
assign(d,n);
reset(d);
if IOresult<>0 then exit;
if filesize(d)<>128 then exit;
for f:=0 to 127 do
begin
read(d,b);
outbyte(f,b);
end;
close(d);
end;
function request:boolean;
var s,c:char;
begin
gotoxy(4,6);
write('Are You Sure? ');
repeat
c:=readkey;
if upcase(c) in ['Y','N'] then
begin
s:=upcase(c);
gotoxy(18,6);
Write(s);
end;
until (c=#13) and (s in ['Y','N']);
if s='Y' then request:=true else request:=false;
end;
var ptr,f:byte;
crc:word;
fun:array[1..6] of string;
c:char;
s:string;
begin
fun[1]:='Dump CM0S';
fun[2]:='Restore CM0S';
fun[3]:='Disable Password';
fun[4]:='Set Password';
fun[5]:='Reset CMOS';
fun[6]:='Calculate Password';
ptr:=1;
repeat
clrscr;
box (3,2,61,7);
gotoxy(4,3);
write('-=CM0S Manager & AWARD Password Fucker By Drozhd Maxim=-');
gotoxy(4,4);
for f:=1 to 6 do
begin
if f=5 then gotoxy(4,5);
if f=ptr then
begin
highvideo;
s:='<'+fun[f]+'>';
end else
begin
lowvideo;
s:='['+fun[f]+']';
end;
write(s);
lowvideo;
end;
c:=readkey;
case c of
#75: if ptr>1 then dec(ptr) else ptr:=6;
#77: if ptr<6 then inc(ptr) else ptr:=1;
#13: case ptr of
1:
begin
box (5,7,45,9);
gotoxy(7,8);
write ('PHile Name With0ut X-tension:');
s:=input(8);
if s<>'' then dump_cmos(s+'.dmp');
end;
2:
begin
if not request then continue;
box (5,7,45,9);
gotoxy(7,8);
write ('PHile Name With0ut X-tension:');
s:=input(8);
if s<>'' then restore_dump(s+'.dmp');
end;
3:
begin
f:=inbyte(17);
if ((f and 2)=2) then f:=f xor 2;
outbyte(17,f);
crc:=crc_calc(true);
outbyte(46,hi(crc));
outbyte(47,lo(crc));
gotoxy(4,6);
write('PassW0rd DisAbled');
readkey;
end;
4:
begin
box(5,7,35,9);
gotoxy(7,8);
write('Enter NEW Password:');
s:=input(8);
if length(s)>0 then
begin
crc:=pass_crc(s);
outbyte(28,lo(crc));
outbyte(29,hi(crc));
f:=inbyte(17);
f:=f or 2;
outbyte(17,f);
crc:=crc_calc(true);
outbyte(46,hi(crc));
outbyte(47,lo(crc));
gotoxy(4,6);
write('PassW0rd Changed!');
readkey;
end;
end;
end;
end;
until c=#27;
end.
|
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.095 |