• Patch for Silver Xpress "Bug" dates

    From AKAcastor@21:1/162 to All on Tuesday, May 21, 2024 19:03:52
    I wrote a small (1 byte) patch to fix "Bug" dates in Silver Xpress - XPBUGPAT.ZIP can be found in file area 4 (cracks) of Another Millennium BBS (another.tel).

    (text file follows)


    Chris/akacastor


    ----------------------------------------------------------------------------- Patch for Silver Xpress "Bug" dates by akacastor 2024-05-21 [ AP Class ] -----------------------------------------------------------------------------

    Tested on Silver Xpress 5.03M1 door, Silver Xpress 4.01 real mode reader,
    and Silver Xpress 4.01 protected mode reader.

    This patch fixes display of dates > 2000 in Silver Xpress. Without the patch, any dates after the year 2000 are displayed with "Bug" instead of month.


    The patch is applied by running XPBUGPAT.BAT, which uses CHANGE.EXE to
    patch the Silver Xpress executable file.

    usage: XPBUGPAT XPREAD.EXE


    When the patch is applied successfully, "Done: 1 patches applied." will
    be printed. If the executable has already been patched, 0 patches will
    be applied.

    -----------------------------------------------------------------------------

    C:\SX>xpbugpat xpread.exe
    pattern: 81 7E F4 D0 07 76 05 C7
    patch: 81 7E F4 D0 70 76 05 C7
    Found @ F82F ... Patched 8 bytes.
    Done: 1 patches applied.
    C:\SX>

    ----------------------------------------------------------------------------- What does the patch do? -----------------------------------------------------------------------------

    The Silver Xpress code contains a subroutine that checks dates to see if they are valid, and in case of an invalid date the word "Bug" is printed instead of the correct month. All dates after the year 2000 are considered invalid, and thus trigger the "Bug" dates.

    Below is disassembly of the relevant part of the subroutine that checks dates. An arrow marks the line with a 'cmp' comparing the year to 2000, followed by a 'jbe' which will jump if the year is below or equal to 2000.

    seg097:02B4 83 7E F6 01 cmp [bp+var_month_idx], 1 seg097:02B8 72 06 jb short loc_27B50
    seg097:02BA 83 7E F6 0C cmp [bp+var_month_idx], 12 seg097:02BE 76 05 jbe short loc_27B55
    seg097:02C0
    seg097:02C0 loc_27B50:
    seg097:02C0 C7 46 F6 0D 00 mov [bp+var_month_idx], 13 seg097:02C5
    seg097:02C5 loc_27B55:
    seg097:02C5 81 7E F4 C4 07 cmp [bp+var_year], 1988 seg097:02CA 73 05 jnb short loc_27B61
    seg097:02CC C7 46 F6 0D 00 mov [bp+var_month_idx], 13 seg097:02D1
    seg097:02D1 loc_27B61:
    seg097:02D1 81 7E F4 D0 07 cmp [bp+var_year], 2000 ; <--- seg097:02D6 76 05 jbe short loc_27B6D
    seg097:02D8 C7 46 F6 0D 00 mov [bp+var_month_idx], 13 seg097:02DD
    seg097:02DD loc_27B6D:

    By patching the instruction "81 7E F4 D0 07" to "81 7E F4 D0 70", the maximum allowed year is changed from 2000 to 28,880. This should give us a bit more time. :)


    - akacastor, 2024-05-21

    -----------------------------------------------------------------------------
    T H E @ ############
    @ @ #### ###
    @@@ ### ####
    @@ @@@@ @@ ### ####
    @@@ @@ @@ ### ###
    @@ @@@@ @@ ### ####
    @@ @@ @ @@ ### ###
    @ @@ @@ @ ### ####
    @ @@ @@ @@@@##########
    @ @@ @@ @@@@@@ ###
    @ @@ @@@@@@ @ ###
    @ @@ @@@@@@ @ #M#
    @ @@@@@@ @@ @ #t#
    @@ @@@@ @@ @@ #M#
    @@@@@ @@@@ ###
    @@@ @@@ @@ ###
    @@@ @@ @@@@@@@@ @@@ #####
    @@ @@ #########
    @@ @@
    @ @ C L A S S
    guess what... 1994, 2024, your shit's still getting cracked.
    it's just now more of a philanthropic move instead of an anarchist one -----------------------------------------------------------------------------
    .______ .______ ._______ _____._.___.__ ._______.______
    : \ : \ : .___ \ \__ _:|: | \ : .____/: __ \
    | . || || : | | | :|| : || : _/\ | \____|
    | : || | || : | | || . || / \| : \
    |___| ||___| | \_. ___/ | ||___| ||_.: __/| |___\
    |___| |___| :/ |___| |___| :/ |___|
    ._____.___ .___ .___ .___: ._______.______ .___ .____ ._____.___
    : |: __|| | | | : .____/: \ : __|| |___ : |
    | \ / || : || | | | | : _/\ | || : || | || \ / |
    | |\/ || || |/\ | |/\ | / \| | || || : || |\/ |
    |___| | || || / \| / \|_.: __/|___| || || ||___| | |
    |___||___||______/|______/ :/ |___||___||. _____/ |___|
    :/
    .: : :.
    / / \ \
    <-< Multinode Maximus v3.01 Telnet: another.tel >->
    >-> Canada +1 587.67.31337 <300bps - 33.6kbps> USA +1 949.59.31337 <-<
    <-< AP Class/whq 21:1/162@fsxnet >->
    \ \ / /
    `: :' -----------------------------------------------------------------------------

    --- Maximus 3.01
    * Origin: Another Millennium - Canada - another.tel (21:1/162)