Обход CRC БИОС

Можно ли путём редактирования, удалить проверку CRC?

Аватар пользователя ivp

Филипп
Нет - это составная часть POST...

- Ситчик веселенький есть?..
- Приезжайте, обхохочетесь!..

Аватар пользователя savely

Ну, смотря редактирования какого, чего... Сделать можно все, положив на это полжизни... Другой вопрос - нафига?

А кому счас легко...

Просто я слишком часто его перепрошиваю, поэтому немешало бы эту часть ода урезать, так как иногда забываю проверять CRC...

2006Г. Новая акция деканата - собери три хвоста и ты можешь совершенно бесплатно обменять их на новые кирзовые сапоги.
2008Г. Акция закончилась...

Аватар пользователя rgt

Филипп Тогда как будете угадывать из-за чего не грузится?:D

За несоответствие действительности Вашим о ней представлениям администрация форума ответственности не несет.

А зачем угадывать? Ну негрузится и негрузится, возьму и перепрошью, просто мешает она мне, так же как и КМОП ЦРЦ... постоянно приходится нажимать Ф1 или ДЕЛ...

2006Г. Новая акция деканата - собери три хвоста и ты можешь совершенно бесплатно обменять их на новые кирзовые сапоги.
2008Г. Акция закончилась...

Аватар пользователя Pinczakko

коды CRC-16 checking для Award БИОС (v.4.51 с бутблоком):

.....
2000:7085                         copy_dcomprssion_result proc near
2000:7085                                                         ; CODE XREF: lzh_expand+42p
2000:7085 50                        push  ax
2000:7086 53                        push  bx
2000:7087 52                        push  dx
2000:7088 51                        push  cx
2000:7089 06                        push  es
2000:708A 56                        push  si
2000:708B A1 04 01                  mov   ax, ds:104h
2000:708E 8E C0                     mov   es, ax
2000:7090                           assume es:nothing
2000:7090 8B 1E 06 01               mov   bx, ds:106h
2000:7094 BE 1C 37                  mov   si, 371Ch               ; ds:si = decompressed buffer
2000:7097                         next_byte_2_copy:               ; CODE XREF: copy_dcomprssion_result+19j
2000:7097 8A 04                     mov   al, [si]
2000:7099 26 88 07                  mov   es:[bx], al
2000:709C 46                        inc   si
2000:709D 43                        inc   bx
2000:709E E2 F7                     loop  next_byte_2_copy
2000:70A0 89 1E 06 01               mov   ds:106h, bx
2000:70A4 0B DB                     or    bx, bx
2000:70A6 75 06                     jnz   not_next_seg
2000:70A8 81 06 04 01 00 10         add   word ptr ds:104h, 1000h
2000:70AE                         not_next_seg:                   ; CODE XREF: copy_dcomprssion_result+21j
2000:70AE 5E                        pop   si
2000:70AF 07                        pop   es
2000:70B0 59                        pop   cx
2000:70B1 3B C1                     cmp   ax, cx
2000:70B3 72 30                     jb    exit
2000:70B5 41                        inc   cx
2000:70B6 BB 1C 37                  mov   bx, 371Ch
2000:70B9                         next_byte:                      ; CODE XREF: copy_dcomprssion_result+5Ej
2000:70B9 0F B6 07                  movzx ax, byte ptr [bx]       ; get next byte to calc crc16
2000:70BC 49                        dec   cx
2000:70BD E3 26                     jcxz  exit
2000:70BF 50                        push  ax
2000:70C0 53                        push  bx
2000:70C1 56                        push  si
2000:70C2 8B F0                     mov   si, ax
2000:70C4 A1 0C 03                  mov   ax, ds:30Ch
2000:70C7 33 C6                     xor   ax, si                  ; calc CRC16 value
2000:70C9 25 FF 00                  and   ax, 0FFh
2000:70CC 8B F0                     mov   si, ax
2000:70CE D1 E6                     shl   si, 1
2000:70D0 8B 9C 0C 01               mov   bx, [si+10Ch]
2000:70D4 A1 0C 03                  mov   ax, ds:30Ch
2000:70D7 C1 E8 08                  shr   ax, 8
2000:70DA 33 C3                     xor   ax, bx
2000:70DC A3 0C 03                  mov   ds:30Ch, ax
2000:70DF 5E                        pop   si
2000:70E0 5B                        pop   bx
2000:70E1 58                        pop   ax
2000:70E2 43                        inc   bx
2000:70E3 EB D4                     jmp   short next_byte
2000:70E5                         ; ---------------------------------------------------------------------------
2000:70E5                         exit:                           ; CODE XREF: copy_dcomprssion_result+2Ej
2000:70E5                                                         ; copy_dcomprssion_result+38j
2000:70E5 5A                        pop   dx
2000:70E6 5B                        pop   bx
2000:70E7 58                        pop   ax
2000:70E8 C3                        retn
2000:70E8                         copy_dcomprssion_result endp ;
.....
2000:790B                         --- Make_CRC16_Table ---
2000:790B                         1st pass, the base address for DS is 3_0000h
2000:790B                         in: ds = scratch_pad_segment for CRC table
2000:790B                         out: ds:10Ch - ds:11Bh = CRC-16 table
2000:790B                         ; --------------- S U B R O U T I N E ---------------------------------------
2000:790B                         Make_CRC16_Table proc near      ; CODE XREF: decomprssion_ngine+ECp
2000:790B 51                        push  cx
2000:790C 53                        push  bx
2000:790D 50                        push  ax
2000:790E 56                        push  si
2000:790F BE 0C 01                  mov   si, 10Ch
2000:7912 B9 00 01                  mov   cx, 100h
2000:7915                         next_byte:                      ; CODE XREF: Make_CRC16_Table+2Bj
2000:7915 B8 00 01                  mov   ax, 100h
2000:7918 2B C1                     sub   ax, cx
2000:791A 50                        push  ax
2000:791B BB 00 00                  mov   bx, 0
2000:791E                         next_bit:                       ; CODE XREF: Make_CRC16_Table+25j
2000:791E A9 01 00                  test  ax, 1
2000:7921 74 07                     jz    LSB_is_0
2000:7923 D1 E8                     shr   ax, 1
2000:7925 35 01 A0                  xor   ax, 0A001h              ; "CRC-substract" with the poly (the poly is A001h)
2000:7928 EB 02                     jmp   short write_tmp_crc_val
2000:792A                         ; ---------------------------------------------------------------------------
2000:792A                         LSB_is_0:                       ; CODE XREF: Make_CRC16_Table+16j
2000:792A D1 E8                     shr   ax, 1
2000:792C                         write_tmp_crc_val:              ; CODE XREF: Make_CRC16_Table+1Dj
2000:792C 43                        inc   bx
2000:792D 83 FB 08                  cmp   bx, 8
2000:7930 72 EC                     jb    next_bit
2000:7932 5B                        pop   bx
2000:7933 89 00                     mov   [bx+si], ax             ; 1st pass: 
2000:7933                                                         ; mov ds:[bx+si], ax <=> mov 3000:[bx+si], ax
2000:7935 46                        inc   si
2000:7936 E2 DD                     loop  next_byte
2000:7938 5E                        pop   si
2000:7939 58                        pop   ax
2000:793A 5B                        pop   bx
2000:793B 59                        pop   cx
2000:793C C3                        retn
2000:793C                         Make_CRC16_Table endp
....
2000:793D                         --- Calc_LZH_hdr_CRC16 ---
2000:793D                         in: ds:571Ch = LZH_hdr_len
2000:793D                              ds:102h = LZH_hdr_byte_index
2000:793D                              ds:10Ch - ds:30Bh = CRC16 table
2000:793D                         
2000:793D                         out: ds:30Ch = LZH_hdr CRC16 calculated value
2000:793D                                ds:314h = size of LZH_hdr saved to ram in byte
2000:793D                         ; --------------- S U B R O U T I N E ---------------------------------------
2000:793D                         Calc_LZH_hdr_CRC16 proc near    ; CODE XREF: ReadHeader+2Cp
2000:793D 50                        push  ax
2000:793E 53                        push  bx
2000:793F 51                        push  cx
2000:7940 52                        push  dx
2000:7941 0F B6 0E 1C 57            movzx cx, byte ptr ds:571Ch   ; cx = LZH_hdr_len
2000:7946 06                        push  es
2000:7947 56                        push  si
2000:7948 8B 1E 02 01               mov   bx, ds:102h             ; 1st pass, bx = LZH_hdr_byte_index (2)
2000:7948                                                         ; i.e. after hdr_len and 8-bit chksum
2000:794C BE 00 00                  mov   si, 0
2000:794F                         next_byte:                      ; CODE XREF: Calc_LZH_hdr_CRC16+19j
2000:794F E8 79 01                  call  FetchByte
2000:7952 88 04                     mov   [si], al                ; save LZH_hdr byte at ds:[si], i.e. 1st pass 3000:[si]
2000:7954 43                        inc   bx
2000:7955 46                        inc   si
2000:7956 E2 F7                     loop  next_byte               ; loop until last LZH hdr byte
2000:7958 8B C3                     mov   ax, bx
2000:795A 2B 06 02 01               sub   ax, ds:102h             ; ax = real_LZH_hdr_len (not including the first two ID bytes)
2000:795E 89 1E 02 01               mov   ds:102h, bx             ; ds:102h = index_to_byte_after_LZH_hdr
2000:7962 5E                        pop   si
2000:7963 07                        pop   es
2000:7964 A2 1C 57                  mov   ds:571Ch, al            ; ds:571Ch = real_LZH_hdr_len (not including the first two ID bytes)
2000:7967 8B C8                     mov   cx, ax                  ; cx = ax = real hdr len
2000:7969 01 06 14 03               add   ds:314h, ax             ; ds:314h = total size of LZH_hdr saved to ram (in byte)?
2000:796D 41                        inc   cx
2000:796E BB 00 00                  mov   bx, 0
2000:7971                         _next_byte:                     ; CODE XREF: Calc_LZH_hdr_CRC16+5Ej
2000:7971 0F B6 07                  movzx ax, byte ptr [bx]
2000:7974 49                        dec   cx
2000:7975 E3 26                     jcxz  exit
2000:7977 50                        push  ax
2000:7978 53                        push  bx
2000:7979 56                        push  si
2000:797A 8B F0                     mov   si, ax                  ; si = LZH_hdr_byte
2000:797C A1 0C 03                  mov   ax, ds:30Ch             ; mov ax, tmp_CRC_16_calculation_result; 
2000:797C                                                         ; ds:30Ch = tmp_CRC_16_calculation_result
2000:797F 33 C6                     xor   ax, si                  ; calculate 16-bit CRC of the LZH header
2000:7981 25 FF 00                  and   ax, 0FFh
2000:7984 8B F0                     mov   si, ax
2000:7986 D1 E6                     shl   si, 1
2000:7988 8B 9C 0C 01               mov   bx, [si+10Ch]           ; mov bx, CRC_16_table[si]
2000:798C A1 0C 03                  mov   ax, ds:30Ch
2000:798F C1 E8 08                  shr   ax, 8
2000:7992 33 C3                     xor   ax, bx                  ; calculate 16-bit CRC of the LZH header
2000:7994 A3 0C 03                  mov   ds:30Ch, ax             ; mov tmp_CRC_16_calculation_result, ax ; 
2000:7994                                                         ; ds:30Ch = tmp_CRC_16_calculation_result
2000:7997 5E                        pop   si
2000:7998 5B                        pop   bx
2000:7999 58                        pop   ax
2000:799A 43                        inc   bx
2000:799B EB D4                     jmp   short _next_byte
2000:799D                         ; ---------------------------------------------------------------------------
2000:799D                         exit:                           ; CODE XREF: Calc_LZH_hdr_CRC16+38j
2000:799D 5A                        pop   dx
2000:799E 59                        pop   cx
2000:799F 5B                        pop   bx
2000:79A0 58                        pop   ax
2000:79A1 C3                        retn
2000:79A1                         Calc_LZH_hdr_CRC16 endp
........

... greetz Pinczakko wink

Немного подкорректировал грамматику, если ты не против wink - ivp

-- Human knowledge belongs to the world --
-- Знания людей принадлежат миру --

Аватар пользователя apple_rom

Вот сейчас и не вспомню даже - в патчере, вроде, как-то встраивал "недокументированный" ключик по отключению проверки BIOS-CRC. Всего-то надо один байтик занопить. А Пинчакко, похоже, спутал с lha-CRC.
Если захотите - поищите строчки "cmp ah,[si]" в бутблоке. Там их должно быть как минимум две - одна на биос и одна на SizeMem - он тоже "законтроллен". Можно не напрягаться и занопить обе проверки. Тогда сможете смело делать чего хотите.
п.с. это не освободит от выприведенной цээрцэшки для отдельного модуля, однако при проблемах и с ней, ясный пень, уже и так ничего не заработает...:)

Аватар пользователя Pinczakko

коды 8-bit checksum для Award БИОС (v.4.51 с бутблоком):

2000:E32E                           assume ds:_1000
2000:E32E 8B 1E 09 00               mov   bx, cmprssd_size_hi_word ; bx = 1
2000:E332 8B 0E 07 00               mov   cx, cmprssd_size_lo_word ; cx = 355Fh
2000:E336 02 0E 00 00               add   cl, hdr_len             ; hdr_len = 25h
2000:E33A 80 D5 00                  adc   ch, 0
2000:E33D 83 D3 00                  adc   bx, 0
2000:E340 83 C1 03                  add   cx, 3                   ; cx = 3587h
2000:E343 83 D3 00                  adc   bx, 0
2000:E346 74 04                     jz    hi_word_zero
2000:E348 8B D9                     mov   bx, cx
2000:E34A 33 C9                     xor   cx, cx
2000:E34C                         hi_word_zero:                   ; CODE XREF: 2000:E346j
2000:E34C 33 F6                     xor   si, si
2000:E34E 32 E4                     xor   ah, ah
2000:E350                         _next_byte:                     ; CODE XREF: 2000:E353j
2000:E350                                                         ; 2000:E365j
2000:E350 AC                        lodsb
2000:E351 02 E0                     add   ah, al
2000:E353 E2 FB                     loop  _next_byte
2000:E355 0B DB                     or    bx, bx
2000:E357 74 0E                     jz    cmp_chk_sum
2000:E359 8B CB                     mov   cx, bx
2000:E35B 8C DB                     mov   bx, ds
2000:E35D 81 C3 00 10               add   bx, 1000h
2000:E361 8E DB                     mov   ds, bx
2000:E363                           assume ds:_2000
2000:E363 33 DB                     xor   bx, bx
2000:E365 EB E9                     jmp   short _next_byte
2000:E367                         ; ---------------------------------------------------------------------------
2000:E367                         cmp_chk_sum:                    ; CODE XREF: 2000:E357j
2000:E367 3A 24                     cmp   ah, [si] ;<<---------------- compare "whole" module 8-bit checksum here <<--
2000:E369 0F 85 2E 00               jnz   chk_sum_error

...greetz Pinczakko wink

-- Human knowledge belongs to the world --
-- Знания людей принадлежат миру --

Аватар пользователя apple_rom

Ну, дык. Шарит, плесень...:)
(и не пробуй переводить;) )

Аватар пользователя Pinczakko

apple_rom писал(-а):
и не пробуй переводить;)

срасибо :)

just happen to learn your language guys lol . Not so hard this far coz I already know quite lots of languages (not computer languages, but human languages). Nevertheless the grammar is still broken wink

-- Human knowledge belongs to the world --
-- Знания людей принадлежат миру --

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей