рд╣рдо рдкреНрд░рд╛рдЧреИрддрд┐рд╣рд╛рд╕рд┐рдХ -2 рдореЗрдВ рд╕реНрддрд░ рдХреЛрдб рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ


рдкреНрд░рд╛рдЧреИрддрд┐рд╣рд╛рд╕рд┐рдХ 2 рдореЗрдВ рдХреЛрдИ рдмрдЪрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдореЗрдВ (рд╕реНрддрд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рд╣рд╡рд╛ рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ) рдПрдХ рд╕реНрддрд░ рдХреЛрдб рд╣реИред рджреЛ рдкрд╛рд╕рд┐рдВрдЧ рдореЛрдбреНрд╕ рд╣реИрдВ, рдмрд┐рдЧрд┐рдирд░ рдФрд░ рдПрдХреНрд╕рдкрд░реНрдЯ, рдХреЛрдб рднреА рдореЛрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЦреЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдк рдкрд╣рд▓реЗ рд╕реНрддрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдХреЛрдб рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрддрд░ рдкрд░ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рд╡рд╛рд▓реЗ рдПрдХ рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдкрд░ рдХреЛрдб, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓ рд░рд╣реЗ рд╣реИрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдорд╛рд░реНрдЧ рдХреЗ рджреМрд░рд╛рди рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдФрд░ рдХрд╛рдЧрдЬ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдиреНрдп рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдХрд╛рдЧрдЬ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрддрд╛ рд╣реИред рддреИрдпрд╛рд░ рдкрд░рд┐рдгрд╛рдо: genpass.com , рдПрдХ рдбреЙрд╕-рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ, рдЬрд┐рд╕реЗ рдЦреЗрд▓ рдХреЗ рд╕рдорд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдб рдПрдВрдЯреНрд░реА рд╕реНрдХреНрд░реАрди рд╕реЗ рдЗрдЪреНрдЫрд┐рдд рд╕реНрддрд░ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛: рддреАрди рдХреЛрдб ADDE C0DE F00D рдпрд╛ DEAD C0DE F00D рджрд░реНрдЬ рдХрд░реЗрдВ, рддреАрдиреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрдб рдЕрдкрдиреЗ рдЖрдк рд╣реА рдЧрд▓рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪреМрдерд╛ рдХреЛрдб 1 рд╕реЗ 10 рддрдХ рдХрд╛ рд╕реНрддрд░ рдирдВрдмрд░, рдкреНрд▓рд╕ 10 рд╣реИред рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдореЛрдб рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд░реЛрдзрд┐рдд рд╕реНрддрд░ рддрдХ рддреБрд░рдВрдд рдЬрд╛рддрд╛ рд╣реИред

рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ - рдЕрдиреБрд╕рдВрдзрд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдХрдо рд╕реЗ рдХрдо "рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдкрдврд╝рдиреЗ" рдХреЗ рд╕реНрддрд░ рдкрд░ x86 рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрдкрдХрд░рдг


рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рдЖрдИрдбреАрдП рдкреНрд░реЛ рдбрд┐рд╕реНрд╕реЗрдореНрдмрд▓рд░ рд╣реИред рдбреЙрд╕-рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП, рдореБрдлреНрдд рд╕рдВрд╕реНрдХрд░рдг 5.0 рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдпрд╣рд╛рдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреАрдУрдПрд╕ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╣реИрдВ: http://www.exetools.com/ , рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдмрд╛рдж рдореЗрдВ рдкрд╛рда рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЙрдкрдХрд░рдг рдбреАрдмрдЧрд░ рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА рдбреАрдУрдПрд╕ рдбреАрдмрдЧрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ), рдЙрдирдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рджреЛрд╖ рдбрд┐рдмрдЧреНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдХрдо рд╕реЗ рдХрдо рд╕реНрдХреНрд░реАрди) рдХрд╛ рдкреГрдердХреНрдХрд░рдг рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрд╕рд╛рдзрди рджреЗрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рдмреЛрдЪ рдПрдореБрд▓реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреАрдмрдЧрд░ рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЦреБрд▓реЗ рдореЗрдВ рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдордзреБрдордХреНрдЦреА (рдкреВрд░реНрд╡ рдореЗрдВ рдмреАрд╡рд╛рдИрдИ) рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ hexdump рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.

echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.

echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.

echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.

echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
     echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc   ( conv=notrunc   ). 


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.
echo -ne '\x..\x..' | dd of= seek= bs=1 conv=notrunc ( conv=notrunc ).


, old-games.ru: pre2orig.exe 52190 . ( ) Hybrid, .

exe' , : exe' , , . , . File Scanner LZEXE, unlzexe. unlzexe, pre2_1.exe 63728 .

pre2_1.exe , "INTRO CODED BY CYBER". :

seg002:5E48 start proc near seg002:5E48 mov cs:pspSeg, ds seg002:5E4D mov ax, cs seg002:5E4F mov es, ax seg002:5E51 assume es:seg002 seg002:5E51 mov cx, 20h seg002:5E54 mov si, 80h seg002:5E57 mov di, si seg002:5E59 rep movsb seg002:5E5B mov ds, ax seg002:5E5D assume ds:seg002 seg002:5E5D call loc_19960 seg002:5E60 mov ax, pspSeg seg002:5E63 add ax, 10h seg002:5E66 add nextCS, ax seg002:5E6A add nextSS, ax seg002:5E6E sub ax, 10h seg002:5E71 mov ds, ax seg002:5E73 assume ds:nothing seg002:5E73 mov es, ax seg002:5E75 assume es:nothing seg002:5E75 mov ax, cs:nextSS seg002:5E79 mov ss, ax seg002:5E7B assume ss:nothing seg002:5E7B mov sp, cs:nextSP seg002:5E80 mov bx, offset nextIP seg002:5E83 jmp dword ptr cs:[bx] seg002:5E83 start endp seg002:5E83 seg002:5E83 ; --------------------------------------------------------------------------- seg002:5E86 nextIP dw 3 ; DATA XREF: start+38 o seg002:5E88 nextCS dw 0 ; DATA XREF: start+1E w seg002:5E8A pspSeg dw 0 ; DATA XREF: start w seg002:5E8A ; start+18 r seg002:5E8C nextSS dw 1681h ; DATA XREF: start+22 w seg002:5E8C ; start+2D r seg002:5E8E nextSP dw 80h ; DATA XREF: start+33 r
DOS PSP 100h , - 80h ( Pascal-: - ). ds es PSP, ds:0+100h = (ds+10h):0. ds, 7 ( assume - , ) ds, es, - loc_19960. , , "" , DOS : ds es PSP, ss:sp , ( pspSeg+10h), , . loc_19960 , ; "This program requires an 80286 or higher", "This program requires a VGA card", "Intro skipped". :
seg002:082F cmp al, '/' seg002:0831 jnz short loc_1A08A seg002:0833 lodsb seg002:0834 and al, not 20h seg002:0836 cmp al, 'N' seg002:0838 jnz short loc_1A08B seg002:083A lodsb seg002:083B and al, not 20h seg002:083D cmp al, 'I' seg002:083F jnz short loc_1A08B
, loc_19960 , /ni . , , Hybrid . , seg002 - , exe'. cs:ip 0000:0003, ss:sp 1681:0080, 5E90h , .

pre2_2.exe 39520 . ( pre2_1.exe Hybrid), . File Scanner "Diet 1.00,1.20" . , diet : . ( ) diet, , , , diet, , , () .

diet cup386 . diet , cup386 pre2_2.exe pre2unp.exe /1 pre2unp.exe 91344 . , pre2unp.exe - , .



. . ( ; , ). , , , . , , , ( , , , ). - "ENTER CODE", . seg002:B171 (IDA exe'), 0B171h :
seg001:99C3 sub_19BC3 proc near ; DATA XREF: sub_1906F+A1 o seg001:99C3 call sub_19D1E seg001:99C6 mov byte_251D7, 3 seg001:99CB mov bx, offset aEnterCode ; "ENTER CODE" seg001:99CE mov word_251D2, 0AF2h seg001:99D4 call sub_19AC4 seg001:99D7 mov byte_251D7, 4 seg001:99DC mov bx, offset levelCode ; "[[[[" seg001:99DF mov word_251D2, 12C9h seg001:99E5 call sub_19AC4 sub_19D1E . sub_19AC4 , "ENTER CODE", 4 , ; , , - .
seg001:99E8 cmp byte_251D6, 1 seg001:99ED jnz short loc_19BF2 seg001:99EF jmp loc_19CF2 seg001:99F2 ; --------------------------------------------------------------------------- seg001:99F2 seg001:99F2 loc_19BF2: ; CODE XREF: sub_19BC3+2A j seg001:99F2 cmp byte_251D6, 2 seg001:99F7 jnz short loc_19BFC seg001:99F9 jmp loc_19D02 seg001:99FC ; --------------------------------------------------------------------------- ... seg001:9AF2 ; --------------------------------------------------------------------------- seg001:9AF2 seg001:9AF2 loc_19CF2: ; CODE XREF: sub_19BC3+2C j seg001:9AF2 inc word_251DC seg001:9AF6 mov bx, word_251DC seg001:9AFA sub bx, 8Ch seg001:9AFE jb short locret_19D1D seg001:9B00 jmp short loc_19D06 seg001:9B02 ; --------------------------------------------------------------------------- seg001:9B02 seg001:9B02 loc_19D02: ; CODE XREF: sub_19BC3+36 j seg001:9B02 ; sub_19BC3+4E j seg001:9B02 inc byte_251DE seg001:9B06 seg001:9B06 loc_19D06: ; CODE XREF: sub_19BC3+13D j seg001:9B06 mov bx, offset levelCode ; "[[[[" seg001:9B09 mov word ptr [bx], '[[' seg001:9B0D mov word ptr [bx+2], '[[' seg001:9B12 mov byte_251D6, 0 seg001:9B17 mov word_251D4, 0 seg001:9B1D seg001:9B1D locret_19D1D: ; CODE XREF: sub_19BC3+42 j seg001:9B1D ; sub_19BC3+60 j ... seg001:9B1D retn seg001:9B1D sub_19BC3 endp byte_251D6 == 1 word_251DC , 8Ch, byte_251D6 0, . , , . byte_251D6 == 2 , ; .
seg001:99FC seg001:99FC loc_19BFC: ; CODE XREF: sub_19BC3+34 j seg001:99FC mov bl, ScanCode seg001:9A00 test bl, 80h seg001:9A03 jz short loc_19C08 seg001:9A05 jmp locret_19D1D seg001:9A08 ; --------------------------------------------------------------------------- seg001:9A08 seg001:9A08 loc_19C08: ; CODE XREF: sub_19BC3+40 j seg001:9A08 mov al, KeysPressed+39h seg001:9A0B or al, KeysPressed+1Ch seg001:9A0F jz short loc_19C14 seg001:9A11 jmp loc_19D02 seg001:9A14 ; --------------------------------------------------------------------------- seg001:9A14 seg002:2870 . ( IDA) , , 60h. , - , - ; ScanCode . , : KeyPressed ( ) (0 = , 0FFh = ). : KeyPressed[39h] KeyPressed[1Ch] - Enter . Enter ( ) , , .
seg001:9A14 loc_19C14: ; CODE XREF: sub_19BC3+4C j seg001:9A14 mov ScanCode, 0 seg001:9A19 xor bh, bh seg001:9A1B mov al, byte ptr a1234567890AEADfCB[bx] ; "--1234567890----AE-----------A-DF-----"... seg001:9A1F cmp al, '-' seg001:9A21 jnz short loc_19C26 seg001:9A23 jmp locret_19D1D seg001:9A26 ; --------------------------------------------------------------------------- seg001:9A26 seg001:9A26 loc_19C26: ; CODE XREF: sub_19BC3+5E j seg001:9A26 mov ah, al seg001:9A28 sub ah, '0' seg001:9A2B cmp ah, 9 seg001:9A2E jbe short loc_19C33 seg001:9A30 sub ah, 7 seg001:9A33 seg001:9A33 loc_19C33: ; CODE XREF: sub_19BC3+6B j . "--1234567890----AE-----------A-DF------------CB-...-", ASCII- ( , , ASCII- 'A' A, Q - , AZERTY). ASCII- hex-, . , 0 0Fh.
seg001:9A33 mov dx, word_251E5 seg001:9A37 mov cl, 4 seg001:9A39 shl ah, cl seg001:9A3B shl ah, 1 seg001:9A3D rcl dx, 1 seg001:9A3F shl ah, 1 seg001:9A41 rcl dx, 1 seg001:9A43 shl ah, 1 seg001:9A45 rcl dx, 1 seg001:9A47 shl ah, 1 seg001:9A49 rcl dx, 1 seg001:9A4B mov word_251E5, dx seg001:9A4F mov bx, word_251D4 seg001:9A53 mov byte ptr levelCode[bx], al ; "[[[[" seg001:9A57 inc word_251D4 seg001:9A5B inc bl seg001:9A5D cmp bl, 4 seg001:9A60 jnb short loc_19C65 seg001:9A62 jmp locret_19D1D seg001:9A65 ; --------------------------------------------------------------------------- word_251E5 4 , , . , word_251D4 . 4 , . 4 word_251E5 16- , ("1234" -> 1234h), .
seg001:9A65 seg001:9A65 loc_19C65: ; CODE XREF: sub_19BC3+9D j seg001:9A65 push bp seg001:9A66 mov word_251DC, 0 seg001:9A6C mov di, word_251DF seg001:9A70 mov si, word_251E1 seg001:9A74 mov bp, word_251E3 seg001:9A78 mov ax, di seg001:9A7A rol ax, 1 seg001:9A7C rol ax, 1 seg001:9A7E mul ah seg001:9A80 xor ax, si seg001:9A82 mul bp seg001:9A84 mov bx, ax seg001:9A86 add bx, si seg001:9A88 ror bx, 1 seg001:9A8A rol bl, 1 seg001:9A8C xor bl, bh seg001:9A8E xor bx, bp seg001:9A90 pop bp seg001:9A91 cmp ax, 36C8h seg001:9A94 jnz short loc_19CAC seg001:9A96 cmp bx, 8BD1h seg001:9A9A jnz short loc_19CAC seg001:9A9C cmp dx, 8E71h seg001:9AA0 jnz short loc_19CAC seg001:9AA2 mov dx, word_251E5 seg001:9AA6 dec dx seg001:9AA7 cmp dx, 14h seg001:9AAA jbe short loc_19CD9 seg001:9AAC seg001:9AAC loc_19CAC: ; CODE XREF: sub_19BC3+D1 j seg001:9AAC ; sub_19BC3+D7 j ... word_251DC . , word_251E5 , 1 15h , loc_19CD9 dx , . , .
seg001:9AAC xor dx, dx seg001:9AAE seg001:9AAE loc_19CAE: ; CODE XREF: sub_19BC3+FA j seg001:9AAE mov ax, dx seg001:9AB0 call sub_19559 seg001:9AB3 cmp word_251E5, ax seg001:9AB7 jz short loc_19CD9 seg001:9AB9 inc dx seg001:9ABA cmp dx, 14h seg001:9ABD jbe short loc_19CAE seg001:9ABF mov si, offset word_251E1 seg001:9AC2 mov ax, [si] seg001:9AC4 mov [si-2], ax seg001:9AC7 mov ax, [si+2] seg001:9ACA mov [si], ax seg001:9ACC mov ax, [si+4] seg001:9ACF mov [si+2], ax seg001:9AD2 mov byte_251D6, 1 seg001:9AD7 jmp short locret_19D1D seg001:9AD9 ; --------------------------------------------------------------------------- . word_251E5 sub_19559 , dx 0 14h. loc_19CD9 dx , sub_19559 . , sub_19559 .

, byte_251D6 1 ( , ), . , , ; , .
seg001:9AD9 seg001:9AD9 loc_19CD9: ; CODE XREF: sub_19BC3+E7 j seg001:9AD9 ; sub_19BC3+F4 j seg001:9AD9 mov al, 0 seg001:9ADB cmp dl, 0Ah seg001:9ADE jb short loc_19CE4 seg001:9AE0 sub dl, 0Ah seg001:9AE3 inc ax seg001:9AE4 seg001:9AE4 loc_19CE4: ; CODE XREF: sub_19BC3+11B j seg001:9AE4 mov byte_1CDB6, dl seg001:9AE8 mov byte_251C3, al seg001:9AEB mov byte_251D6, 2 seg001:9AF0 jmp short locret_19D1D
: dx 10, byte_1CDB6 , byte_251C3 ; byte_1CDB6 dx-10 , byte_251C3 . byte_251D6 2, .

, , sub_19599 , / , . : word_2435F 10h BIOS F000:FFF0 ( BIOS) 80h BIOS C000:0000 F000:0000. :
; ax = zero-based level seg001:93C6 xor ax, 55A3h seg001:93C9 mul word_2435F seg001:93CD mov cl, cs:ProcessorType ; always 3 for 386+ seg001:93D2 rol ax, cl sub_19599 ( - 386+ 3), , : genpass.asm , genpass.com .

"" : , ( hex 1-based). , : dx:ax 8E7136C8h, bx 8BD1h. , , , dx:ax mul bp 8E7136C8h - 16- : . bx - . 8E7136C8h , 2 3 *7*4861*8779; 16- , 4861 8779 , 2 3 *7 - . (16 - 16-). ; - , , bx, 8- . 16- 8-, , , ( 8- ). : getmagic.c , : ADDE C0DE F00D DEAD C0DE F00D.

Source: https://habr.com/ru/post/In187072/


All Articles