吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10329|回复: 10
收起左侧

[分享] UltraEdit 15 算法分析

[复制链接]
Hmily 发表于 2009-9-24 15:45
最近在找资料的时候无意在ARTeam论坛上面看到的一个破解UltraEdit15算法的教程。分析
的相当到位。

寻找算法函数的大概方法:

1,用exescope找到nag窗口的资源ID为28269 即是:6E6D。

2,然后在OD里面找到PUSH 6E6D的命令。分别下断点。

3,在第二次中断的时候,看到Days to expire字样。向上滚动,找到这个子程序的开始。然后crtl +r 寻找引用。发现只有一个引用,于是跳去。

4,作者凭借自己破解14版的经验,准确判断出关键函数的调用是哪一个。但是,下面他还是做了一些简短的分析。

5,最后就开始了算法的分析,这个我就不多说了,太多了,自己看哈,我发在附近里面


由于测试它教程的时候用的中文版(他用的意大利版),所以,有些地址有出入。相信很多朋友也会有一样的感受。





ueres.dll
----------------------
hex  dec
--------------------------------
10E 270 - AboutBox
1B3 435 - GuIDA Avvio Veloce
6E6D 28269 - Il Periodo di Valutazione ?in scadenza

//////////////////////////////////// TO     S TU D Y  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Attack Point
------------------------------
00446294   .  68 E8A1AD00   PUSH Uedit32.00ADA1E8                    ; |WindowName = "UEAfx:200:0x0008:0:010"
00446299   .  68 E8A1AD00   PUSH Uedit32.00ADA1E8                    ; |Class = "UEAfx:200:0x0008:0:010"
0044629E   .  53            PUSH EBX                                 ; |ExtStyle = 0
0044629F   .  899C24 CC0000>MOV DWORD PTR SS:[ESP+CC], EBX           ; |
004462A6   .  FF15 B03BAD00 CALL DWORD PTR DS:[<&USER32.CreateWindow>; \CreateWindowExA
004462AC   .  8D4C24 14     LEA ECX, DWORD PTR SS:[ESP+14]
004462B0   .  51            PUSH ECX
004462B1   .  8D5424 28     LEA EDX, DWORD PTR SS:[ESP+28]
004462B5   .  52            PUSH EDX
004462B6   .  A3 102BD000   MOV DWORD PTR DS:[D02B10], EAX
004462BB   .  A1 342BD000   MOV EAX, DWORD PTR DS:[D02B34]
004462C0   .  68 EC2AD000   PUSH Uedit32.00D02AEC
004462C5   .  50            PUSH EAX
004462C6   .  56            PUSH ESI
004462C7   .  881D D45AD000 MOV BYTE PTR DS:[D05AD4], BL
004462CD   .  C705 EC2AD000>MOV DWORD PTR DS:[D02AEC], 2A
004462D7   .  895C24 28     MOV DWORD PTR SS:[ESP+28], EBX
004462DB   .  E8 B0AAFFFF   CALL <Uedit32.RoutineDiRegistrazione>  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ENTRA !
004462E0   .  8B2D 003CAD00 MOV EBP, DWORD PTR DS:[<&USER32.SendMess>
004462E6   .  83C4 14       ADD ESP, 14
004462E9   .  84C0          TEST AL, AL
004462EB   .  0F84 1D030000 JE Uedit32.0044660E
004462F1   .  391D 142BD000 CMP DWORD PTR DS:[D02B14], EBX
004462F7   .  0F85 11030000 JNZ Uedit32.0044660E
004462FD   .  395C24 14     CMP DWORD PTR SS:[ESP+14], EBX
00446301   .  74 28         JE SHORT Uedit32.0044632B
00446303   .  8B4C24 24     MOV ECX, DWORD PTR SS:[ESP+24]


Into registration routine
------------------------------------------
00440D90 >/$  6A FF         PUSH -1
00440D92  |.  68 6B8BA500   PUSH Uedit32.00A58B6B
00440D97  |.  64:A1 0000000>MOV EAX, DWORD PTR FS:[0]
00440D9D  |.  50            PUSH EAX
00440D9E  |.  81EC 9C020000 SUB ESP, 29C
00440DA4  |.  A1 3CFECF00   MOV EAX, DWORD PTR DS:[CFFE3C]
00440DA9  |.  33C4          XOR EAX, ESP
00440DAB  |.  898424 980200>MOV DWORD PTR SS:[ESP+298], EAX
00440DB2  |.  53            PUSH EBX
00440DB3  |.  55            PUSH EBP
00440DB4  |.  56            PUSH ESI
00440DB5  |.  57            PUSH EDI
00440DB6  |.  A1 3CFECF00   MOV EAX, DWORD PTR DS:[CFFE3C]
00440DBB  |.  33C4          XOR EAX, ESP
00440DBD  |.  50            PUSH EAX
00440DBE  |.  8D8424 B00200>LEA EAX, DWORD PTR SS:[ESP+2B0]
00440DC5  |.  64:A3 0000000>MOV DWORD PTR FS:[0], EAX
00440DCB  |.  8BAC24 C40200>MOV EBP, DWORD PTR SS:[ESP+2C4]                           ;  << Seriale da controllare
00440DD2  |.  8B8C24 CC0200>MOV ECX, DWORD PTR SS:[ESP+2CC]                           ;  << ind. di ritorno
00440DD9  |.  8B9424 D00200>MOV EDX, DWORD PTR SS:[ESP+2D0]                           ;  << Una dword vuota
00440DE0  |.  8BBC24 C00200>MOV EDI, DWORD PTR SS:[ESP+2C0]                           ;  << UserName
00440DE7  |.  8B8424 C80200>MOV EAX, DWORD PTR SS:[ESP+2C8]                           ;  << ptr a 2A = 42 (indicatore per file *.reg)
00440DEE  |.  894C24 1C     MOV DWORD PTR SS:[ESP+1C], ECX
00440DF2  |.  895424 18     MOV DWORD PTR SS:[ESP+18], EDX
00440DF6  |.  85ED          TEST EBP, EBP                                             ;  << Inserito un seriale ?
00440DF8  |.  74 0A         JE SHORT Uedit32.00440E04
00440DFA  |.  C705 E82AD000>MOV DWORD PTR DS:[D02AE8], 1                              ;  << si, inserito !
00440E04  |>  C700 00000000 MOV DWORD PTR DS:[EAX], 0                                 ;  << azzera il 2A
00440E0A  |.  8BC7          MOV EAX, EDI                                              ;  << userName
00440E0C  |.  8D50 01       LEA EDX, DWORD PTR DS:[EAX+1]
00440E0F  |.  90            NOP
00440E10  |>  8A08          /MOV CL, BYTE PTR DS:[EAX]
00440E12  |.  40            |INC EAX
00440E13  |.  84C9          |TEST CL, CL
00440E15  |.^ 75 F9         \JNZ SHORT Uedit32.00440E10
00440E17  |.  2BC2          SUB EAX, EDX
00440E19  |.  83F8 06       CMP EAX, 6                                                ;  << Verifica che la lunghezza dello userName sia almeno 6
00440E1C  |.  0F82 EA010000 JB Uedit32.0044100C
00440E22  |.  8BC5          MOV EAX, EBP                                              ;  << Seriale
00440E24  |.  8D50 01       LEA EDX, DWORD PTR DS:[EAX+1]
00440E27  |>  8A08          /MOV CL, BYTE PTR DS:[EAX]
00440E29  |.  40            |INC EAX
00440E2A  |.  84C9          |TEST CL, CL
00440E2C  |.^ 75 F9         \JNZ SHORT Uedit32.00440E27
00440E2E  |.  2BC2          SUB EAX, EDX
00440E30  |.  83F8 2F       CMP EAX, 2F                                               ;  << La lunghezza del seriale deve essere almeno 47
00440E33  |.  0F82 D3010000 JB Uedit32.0044100C
00440E39  |.  6A 3B         PUSH 3B                                                   ;  << Dimensione area da riempire
00440E3B  |.  8D4424 75     LEA EAX, DWORD PTR SS:[ESP+75]
00440E3F  |.  6A 00         PUSH 0                                                    ;  << carattere con cui riempire
00440E41  |.  50            PUSH EAX                                                  ;  << indirizzo da riempire
00440E42  |.  C64424 23 01  MOV BYTE PTR SS:[ESP+23], 1                               ;  << segna un flag
00440E47  |.  884C24 7C     MOV BYTE PTR SS:[ESP+7C], CL                              ;  << azzera il primo byte
00440E4B  |.  E8 A00E5900   CALL <Uedit32.FillWithZero>                               ;  << entro
00440E50  |.  68 FF010000   PUSH 1FF                                                  ;  << dimensione ( 511 bytes )
00440E55  |.  8D8C24 BD0000>LEA ECX, DWORD PTR SS:[ESP+BD]
00440E5C  |.  6A 00         PUSH 0                                                    ;  << carattere di riempimento
00440E5E  |.  51            PUSH ECX                                                  ;  << indirizzo da riempire ( 0024F9D1 ) - per copia userName
00440E5F  |.  C68424 C40000>MOV BYTE PTR SS:[ESP+C4], 0                               ;  << azzera il primo byte
00440E67  |.  E8 840E5900   CALL <Uedit32.FillWithZero>
00440E6C  |.  57            PUSH EDI                                                  ;  << push nome utente
00440E6D  |.  8D9424 C80000>LEA EDX, DWORD PTR SS:[ESP+C8]
00440E74  |.  68 00020000   PUSH 200                                                  ;  << 200h = 512d (max len username)
00440E79  |.  52            PUSH EDX                                                  ;  << indirizzo appena svuotato (il primo dei due)
00440E7A  |.  E8 F6335900   CALL <Uedit32.CopiaStringa>                               ;  << Copia UserName
00440E7F  |.  57            PUSH EDI                                                  ;  << push nome utente
00440E80  |.  8D4424 7C     LEA EAX, DWORD PTR SS:[ESP+7C]                            ;  << 0024F978
00440E84  |.  55            PUSH EBP                                                  ;  << push seriale
00440E85  |.  50            PUSH EAX                                                  ;  << push indirizzo (doppio ptr. a zona in cui andranno scritte le info dei match
00440E86  |.  E8 F5E8FFFF   CALL <Uedit32.GenerazioneVettoreEdEstrazioneStringa>      ;  << entro
00440E8B  |.  83C4 30       ADD ESP, 30
00440E8E  |.  837C24 6C 10  CMP DWORD PTR SS:[ESP+6C], 10                             ;  << lungh. del serial  == 16 ?
00440E93  |.  8B4424 58     MOV EAX, DWORD PTR SS:[ESP+58]                            ;  << Stringa estratta dal seriale
00440E97  |.  C78424 B80200>MOV DWORD PTR SS:[ESP+2B8], 0                             ;  << 0
00440EA2  |.  73 04         JNB SHORT Uedit32.00440EA8                                ;  v
00440EA4  |.  8D4424 58     LEA EAX, DWORD PTR SS:[ESP+58]
00440EA8  |>  50            PUSH EAX                                                  ; /<< push stringa estratta dal seriale
00440EA9  |.  8D4C24 74     LEA ECX, DWORD PTR SS:[ESP+74]                            ; |
00440EAD  |.  6A 3C         PUSH 3C                                                   ; |<< dimensione stringa
00440EAF  |.  51            PUSH ECX                                                  ; |<< dove copiarla (sopra il nome utente)
00440EB0  |.  E8 C0335900   CALL <Uedit32.CopiaStringa>                               ; \CopiaStringa
00440EB5  |.  83C4 0C       ADD ESP, 0C
00440EB8  |.  68 409CAD00   PUSH Uedit32.00AD9C40                                     ; /pModule = "kernel32.dll"
00440EBD  |.  FF15 EC35AD00 CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>]          ; \GetModuleHandleA
00440EC3  |.  8D5424 44     LEA EDX, DWORD PTR SS:[ESP+44]                            ;  << ind. pSystemTime2
00440EC7  |.  8BF0          MOV ESI, EAX                                              ;  << salva kernel32.ll imagebase
00440EC9  |.  52            PUSH EDX
00440ECA  |.  8D4424 38     LEA EAX, DWORD PTR SS:[ESP+38]                            ;  << pSystemTime
00440ECE  |.  50            PUSH EAX
00440ECF  |.  8D4C24 2C     LEA ECX, DWORD PTR SS:[ESP+2C]                            ;  << currentSystemTime
00440ED3  |.  51            PUSH ECX
00440ED4  |.  E8 67A6FFFF   CALL <Uedit32.SystemTime_FileTime>                        ;  << Determina Data Corrente (in SystemTime) + altro che non ci interessa (Generazione 2 FileTime e loro conversione in SystemTime)
00440ED9  |.  8D5424 30     LEA EDX, DWORD PTR SS:[ESP+30]                            ;  << otr. a currentSystemTime
00440EDD  |.  56            PUSH ESI
00440EDE  |.  52            PUSH EDX                                                  ;  << push currentSysTime
00440EDF  |.  E8 8708FCFF   CALL <Uedit32.DataCorrenteInFileTime>                     ;  <<
00440EE4  |.  8D4424 48     LEA EAX, DWORD PTR SS:[ESP+48]                            ;  << pSystemTime
00440EE8  |.  50            PUSH EAX                                                  ;  << pSystemTime
00440EE9  |.  E8 0A09FCFF   CALL <Uedit32.AltraDataInFileTime>                        ;  << non ci interessa
00440EEE  |.  8D4C24 5C     LEA ECX, DWORD PTR SS:[ESP+5C]                            ;  << pSystemTime2
00440EF2  |.  51            PUSH ECX                                                  ;  << pSystemTime2
00440EF3  |.  E8 120CFCFF   CALL Uedit32.00401B0A                                     ;  << non ci interessa
00440EF8  |.  68 00001500   PUSH 150000                                               ;  << Push Versione programma !!!
00440EFD  |.  E8 7509FCFF   CALL <Uedit32.DoBSWAP_Parametro>                          ;  << bswap della versione del programma
00440F02  |.  8D9424 CC0000>LEA EDX, DWORD PTR SS:[ESP+CC]                            ;  << username
00440F09  |.  52            PUSH EDX
00440F0A  |.  8D8424 940000>LEA EAX, DWORD PTR SS:[ESP+94]                            ;  << stringa estratta da seriale
00440F11  |.  50            PUSH EAX
00440F12  |.  E8 8B09FCFF   CALL <Uedit32.DeterminaMatchEStabilisciReg>
00440F17  |.  8B1D 96104000 MOV EBX, DWORD PTR DS:[<controllo>]                       ;  << Salva il valore della dword di controllo >> in EBX (la call modifica la dword in oggetto per altri scopi)
00440F1D  |.  83C4 28       ADD ESP, 28
00440F20  |.  E8 5705FCFF   CALL <Uedit32.divisione_qword>                            ;  << seconda divisione quadword (non ci interessa particolarmente)
00440F25  |.  8BF3          MOV ESI, EBX                                              ;  << la call precedente NON modifica EBX
00440F27  |.  C1EE 10       SHR ESI, 10
00440F2A  |.  8BCB          MOV ECX, EBX                                              ;  << nuova copia di EBX
00440F2C  |.  80E1 0F       AND CL, 0F                                                ;  << ultimo char esadecimale (ultimo mezzo byte)
00440F2F  |.  81E6 FF010000 AND ESI, 1FF                                              ;  << and esi, 1FF
00440F35  |.  80F9 01       CMP CL, 1                                                 ;  << CL deve essere = 1
00440F38  |.  74 05         JE SHORT Uedit32.00440F3F
00440F3A  |.  C64424 17 00  MOV BYTE PTR SS:[ESP+17], 0                               ;  << :(
00440F3F  |>  F7C3 00400000 TEST EBX, 4000                                            ;  << test
00440F45  |.  74 0A         JE SHORT Uedit32.00440F51
00440F47  |.  F6C3 40       TEST BL, 40
00440F4A  |.  75 05         JNZ SHORT Uedit32.00440F51
00440F4C  |.  C64424 17 00  MOV BYTE PTR SS:[ESP+17], 0                               ;  << :(
00440F51  |>  F7C3 00000020 TEST EBX, 20000000                                        ;  << test EBX 20.000.000
00440F57  |.  74 05         JE SHORT Uedit32.00440F5E
00440F59  |.  C64424 17 00  MOV BYTE PTR SS:[ESP+17], 0                               ;  << :(
00440F5E  |>  51            PUSH ECX                                                  ;  << push valore 'iniziale' della dword di controllo
00440F5F  |.  8BCC          MOV ECX, ESP
00440F61  |.  896424 24     MOV DWORD PTR SS:[ESP+24], ESP
00440F65  |.  57            PUSH EDI                                                  ;  << nome utente
00440F66  |.  C705 A055D000>MOV DWORD PTR DS:[<flag_fine_reg>], 1                     ;  << flag
00440F70  |.  E8 EBA4FCFF   CALL <Uedit32.CodificaInformazioneInLicenza>              ;  << dovrebbe salvare le info di username nel file di licenza
00440F75  |.  B9 8455D000   MOV ECX, OFFSET <Uedit32.costante_usata_spesso>
00440F7A  |.  E8 61DAFFFF   CALL Uedit32.0043E9E0
00440F7F  |.  51            PUSH ECX
00440F80  |.  8BCC          MOV ECX, ESP
00440F82  |.  896424 24     MOV DWORD PTR SS:[ESP+24], ESP
00440F86  |.  55            PUSH EBP                                                  ;  << push seriale
00440F87  |.  E8 D4A4FCFF   CALL <Uedit32.CodificaInformazioneInLicenza>
00440F8C  |.  B9 8455D000   MOV ECX, OFFSET <Uedit32.costante_usata_spesso>
00440F91  |.  E8 BADAFFFF   CALL Uedit32.0043EA50
00440F96  |.  B9 8455D000   MOV ECX, OFFSET <Uedit32.costante_usata_spesso>
00440F9B  |.  8935 8C55D000 MOV DWORD PTR DS:[D0558C], ESI
00440FA1  |.  891D 9055D000 MOV DWORD PTR DS:[D05590], EBX
00440FA7  |.  E8 C47C2100   CALL Uedit32.00658C70
00440FAC  |.  807C24 17 00  CMP BYTE PTR SS:[ESP+17], 0                               ;  << byte di registrazione
00440FB1  |.  0FB6D0        MOVZX EDX, AL
00440FB4  |.  8915 9855D000 MOV DWORD PTR DS:[D05598], EDX
00440FBA  |.  74 36         JE SHORT Uedit32.00440FF2
00440FBC  |.  81FE 7C010000 CMP ESI, 17C                                              ;  << *** DEVE SALTARE PER NON MOSTRARE LA NAG (dipende dal valore di "controllo")
00440FC2  |.  72 2E         JB SHORT Uedit32.00440FF2                                 ;  v
00440FC4  |.  F6C3 40       TEST BL, 40
00440FC7  |.  75 29         JNZ SHORT Uedit32.00440FF2
00440FC9  |.  8B4424 18     MOV EAX, DWORD PTR SS:[ESP+18]
00440FCD  |.  8B4C24 24     MOV ECX, DWORD PTR SS:[ESP+24]
00440FD1  |.  8B5424 28     MOV EDX, DWORD PTR SS:[ESP+28]
00440FD5  |.  C700 01000000 MOV DWORD PTR DS:[EAX], 1
00440FDB  |.  8B4424 1C     MOV EAX, DWORD PTR SS:[ESP+1C]                            ;  Uedit32.004461A0
00440FDF  |.  8908          MOV DWORD PTR DS:[EAX], ECX
00440FE1  |.  8B4C24 2C     MOV ECX, DWORD PTR SS:[ESP+2C]
00440FE5  |.  8950 04       MOV DWORD PTR DS:[EAX+4], EDX
00440FE8  |.  8B5424 30     MOV EDX, DWORD PTR SS:[ESP+30]
00440FEC  |.  8948 08       MOV DWORD PTR DS:[EAX+8], ECX
00440FEF  |.  8950 0C       MOV DWORD PTR DS:[EAX+C], EDX
00440FF2  |>  837C24 6C 10  CMP DWORD PTR SS:[ESP+6C], 10                             ;  << lungh. del seriale
00440FF7  |.  72 0D         JB SHORT Uedit32.00441006
00440FF9  |.  8B4424 58     MOV EAX, DWORD PTR SS:[ESP+58]                            ;  << stringa estratta da seriale
00440FFD  |.  50            PUSH EAX                                                  ;  << push stringa estratta
00440FFE  |.  E8 4CB54000   CALL <Uedit32.FreeString>
00441003  |.  83C4 04       ADD ESP, 4
00441006  |>  8A4424 17     MOV AL, BYTE PTR SS:[ESP+17]                              ;  << stato di registrazione
0044100A  |.  EB 02         JMP SHORT Uedit32.0044100E
0044100C  |>  32C0          XOR AL, AL
0044100E  |>  8B8C24 B00200>MOV ECX, DWORD PTR SS:[ESP+2B0]
00441015  |.  64:890D 00000>MOV DWORD PTR FS:[0], ECX
0044101C  |.  59            POP ECX                                                   ;  017459B8
0044101D  |.  5F            POP EDI                                                   ;  017459B8
0044101E  |.  5E            POP ESI                                                   ;  017459B8
0044101F  |.  5D            POP EBP                                                   ;  017459B8
00441020  |.  5B            POP EBX                                                   ;  017459B8
00441021  |.  8B8C24 980200>MOV ECX, DWORD PTR SS:[ESP+298]                           ;  USER32.77D18808
00441028  |.  33CC          XOR ECX, ESP
0044102A  |.  E8 09FD5800   CALL Uedit32.009D0D38                                     ;  << non ci interessa
0044102F  |.  81C4 A8020000 ADD ESP, 2A8
00441035  \.  C3            RETN


GenerazioneVettoreEdEstrazioneStringa
-------------------------------------------
0043F780 >/$  6A FF         PUSH -1
0043F782  |.  68 A288A500   PUSH Uedit32.00A588A2
0043F787  |.  64:A1 0000000>MOV EAX, DWORD PTR FS:[0]
0043F78D  |.  50            PUSH EAX
0043F78E  |.  81EC 100A0000 SUB ESP, 0A10                                             ;  << 2576
0043F794  |.  A1 3CFECF00   MOV EAX, DWORD PTR DS:[CFFE3C]
0043F799  |.  33C4          XOR EAX, ESP
0043F79B  |.  898424 0C0A00>MOV DWORD PTR SS:[ESP+A0C], EAX
0043F7A2  |.  53            PUSH EBX
0043F7A3  |.  55            PUSH EBP
0043F7A4  |.  56            PUSH ESI
0043F7A5  |.  57            PUSH EDI
0043F7A6  |.  A1 3CFECF00   MOV EAX, DWORD PTR DS:[CFFE3C]
0043F7AB  |.  33C4          XOR EAX, ESP
0043F7AD  |.  50            PUSH EAX
0043F7AE  |.  8D8424 240A00>LEA EAX, DWORD PTR SS:[ESP+A24]
0043F7B5  |.  64:A3 0000000>MOV DWORD PTR FS:[0], EAX
0043F7BB  |.  8BAC24 340A00>MOV EBP, DWORD PTR SS:[ESP+A34]                           ;  Uedit32.00730065
0043F7C2  |.  8BBC24 380A00>MOV EDI, DWORD PTR SS:[ESP+A38]                           ;  << serial
0043F7C9  |.  8BB424 3C0A00>MOV ESI, DWORD PTR SS:[ESP+A3C]                           ;  << username
0043F7D0  |.  33DB          XOR EBX, EBX                                              ;  << EBX := 0
0043F7D2  |.  6A 3B         PUSH 3B                                                   ;  << dimensione da riempire
0043F7D4  |.  8D8424 E90900>LEA EAX, DWORD PTR SS:[ESP+9E9]
0043F7DB  |.  53            PUSH EBX                                                  ;  << carattere di riempimento
0043F7DC  |.  895C24 1C     MOV DWORD PTR SS:[ESP+1C], EBX                            ;  << azzera primo byte
0043F7E0  |.  50            PUSH EAX                                                  ;  << ind. da riempire
0043F7E1  |.  899C24 380A00>MOV DWORD PTR SS:[ESP+A38], EBX                           ;  << zero
0043F7E8  |.  896C24 28     MOV DWORD PTR SS:[ESP+28], EBP
0043F7EC  |.  889C24 F00900>MOV BYTE PTR SS:[ESP+9F0], BL                             ;  << azzero primo byte
0043F7F3  |.  E8 F8245900   CALL <Uedit32.FillWithZero>                               ;  << Libera zona per copiare il seriale
0043F7F8  |.  57            PUSH EDI                                                  ; |<< Seriale
0043F7F9  |.  8D8C24 F40900>LEA ECX, DWORD PTR SS:[ESP+9F4]                           ; |
0043F800  |.  6A 3C         PUSH 3C                                                   ; |<< 60
0043F802  |.  51            PUSH ECX                                                  ; |<< dove copiare il seriale
0043F803  |.  E8 6D4A5900   CALL <Uedit32.CopiaStringa>                               ; \CopiaStringa
0043F808  |.  8BC6          MOV EAX, ESI                                              ;  << Nome Utente
0043F80A  |.  83C4 18       ADD ESP, 18
0043F80D  |.  33D2          XOR EDX, EDX                                              ;  <<< EDX := 0
0043F80F  |.  8D78 01       LEA EDI, DWORD PTR DS:[EAX+1]                             ;  << calcola len username
0043F812  |>  8A08          /MOV CL, BYTE PTR DS:[EAX]
0043F814  |.  40            |INC EAX
0043F815  |.  3ACB          |CMP CL, BL
0043F817  |.^ 75 F9         \JNZ SHORT Uedit32.0043F812
0043F819  |.  2BC7          SUB EAX, EDI                                              ;  << EAX = lungh. username
0043F81B  |.  33C9          XOR ECX, ECX                                              ;  ECX := 0
0043F81D  |.  3BC3          CMP EAX, EBX                                              ;  << Hai specificato un userName ?
0043F81F  |.  7E 0B         JLE SHORT Uedit32.0043F82C                                ;  << se si' non salta
0043F821  |>  0FBE3C0E      /MOVSX EDI, BYTE PTR DS:[ESI+ECX]                         ;  << Hash username - serve ad inizializzare il vettore
0043F825  |.  41            |INC ECX
0043F826  |.  03D7          |ADD EDX, EDI
0043F828  |.  3BC8          |CMP ECX, EAX
0043F82A  |.^ 7C F5         \JL SHORT Uedit32.0043F821
0043F82C  |>  81CA 221AF704 OR EDX, 4F71A22                                           ;  << Somma i caratteri del nome utente ed effettua OR con costante
0043F832  |.  52            PUSH EDX                                                  ;  << push hash utente ( 04F71E7A per Virtual Killer )
0043F833  |.  8D4C24 24     LEA ECX, DWORD PTR SS:[ESP+24]                            ;  << ind. vettore
0043F837  |.  E8 B4542100   CALL <Uedit32.GenerazioneVettoreIniziale>                 ;  << Genera un vettore iniziale in base all'hash utente calcolato
0043F83C  |.  53            PUSH EBX                                                  ;  << 0
0043F83D  |.  C745 18 0F000>MOV DWORD PTR SS:[EBP+18], 0F                             ;  << 15
0043F844  |.  895D 14       MOV DWORD PTR SS:[EBP+14], EBX                            ;  << 0
0043F847  |.  68 F046AD00   PUSH Uedit32.00AD46F0
0043F84C  |.  8BCD          MOV ECX, EBP
0043F84E  |.  885D 04       MOV BYTE PTR SS:[EBP+4], BL                               ;  << 0
0043F851  |.  E8 AA50FCFF   CALL <Uedit32.NonImportante1>                             ;  << entro
0043F856  |.  B0 30         MOV AL, 30                                                ;  << '0'
0043F858  |.  BF 01000000   MOV EDI, 1                                                ;  << EDI := 1
0043F85D  |.  899C24 2C0A00>MOV DWORD PTR SS:[ESP+A2C], EBX                           ;  << 0
0043F864  |.  897C24 14     MOV DWORD PTR SS:[ESP+14], EDI                            ;  << 1
0043F868  |.  888424 E80900>MOV BYTE PTR SS:[ESP+9E8], AL                             ;  << Ignora il quinto carattere di ogni sotto-gruppo
0043F86F  |.  888424 EE0900>MOV BYTE PTR SS:[ESP+9EE], AL
0043F876  |.  888424 F40900>MOV BYTE PTR SS:[ESP+9F4], AL
0043F87D  |.  888424 FA0900>MOV BYTE PTR SS:[ESP+9FA], AL
0043F884  |.  888424 000A00>MOV BYTE PTR SS:[ESP+A00], AL
0043F88B  |.  888424 060A00>MOV BYTE PTR SS:[ESP+A06], AL
0043F892  |.  888424 0C0A00>MOV BYTE PTR SS:[ESP+A0C], AL
0043F899  |.  888424 120A00>MOV BYTE PTR SS:[ESP+A12], AL
0043F8A0  |.  8DB424 E40900>LEA ESI, DWORD PTR SS:[ESP+9E4]                           ;  << seriale
0043F8A7  |.  389C24 E40900>CMP BYTE PTR SS:[ESP+9E4], BL                             ;  << finito ?
0043F8AE  |.  74 4A         JE SHORT Uedit32.0043F8FA
0043F8B0  |>  803E 2D       /CMP BYTE PTR DS:[ESI], 2D                                ;  << trovato il trattino ?
0043F8B3  |.  74 40         |JE SHORT Uedit32.0043F8F5                                ;  << ignora il trattino
0043F8B5  |.  8D4C24 20     |LEA ECX, DWORD PTR SS:[ESP+20]                           ;  << vettore_inizializzazione
0043F8B9  |.  E8 02532100   |CALL <Uedit32.LookupInVettore_conRicalcolo>
0043F8BE  |.  33D2          |XOR EDX, EDX                                             ;  << EDX := 0
0043F8C0  |.  B9 0A000000   |MOV ECX, 0A                                              ;  << ECX := 0A (10)
0043F8C5  |.  F7F1          |DIV ECX                                                  ;  << divisione di EAX (restituito da CALL) per 0A e il resto in EDX
0043F8C7  |.  8A06          |MOV AL, BYTE PTR DS:[ESI]                                ;  << AL := carattere del seriale
0043F8C9  |.  2AC2          |SUB AL, DL                                               ;  << sottrai ad esso il resto
0043F8CB  |.  2C 41         |SUB AL, 41                                               ;  << e 41h ('A')
0043F8CD  |.  0FBED0        |MOVSX EDX, AL                                            ;  << a questo punto EDX := AL
0043F8D0  |.  0FB682 54A0AD>|MOVZX EAX, BYTE PTR DS:[EDX+ADA054]                      ;  << Lookup di valore in 'X6A3KVMOQ8D2HCPI'
0043F8D7  |.  884424 18     |MOV BYTE PTR SS:[ESP+18], AL                             ;  << salva poi il valore lookup-ato (BYTE ptr)
0043F8DB  |.  8B4C24 18     |MOV ECX, DWORD PTR SS:[ESP+18]                           ;  << ... e lo copia in ECX (tutta la dword pero')
0043F8DF  |.  51            |PUSH ECX                                                 ;  << PUSH di questo valore
0043F8E0  |.  6A 01         |PUSH 1                                                   ;  << 1
0043F8E2  |.  8BCD          |MOV ECX, EBP                                             ;  << Dove salvare il carattere lookup-ato
0043F8E4  |.  E8 27B8FDFF   |CALL <Uedit32.SalvaCarattereLookup>                      ;  <<
0043F8E9  |.  47            |INC EDI                                                  ;  << prox char
0043F8EA  |.  83FF 05       |CMP EDI, 5                                               ;  << finito un sottogruppo ?
0043F8ED  |.  75 06         |JNZ SHORT Uedit32.0043F8F5
0043F8EF  |.  BF 01000000   |MOV EDI, 1                                               ;  << riparte da 1 per EDI
0043F8F4  |.  46            |INC ESI
0043F8F5  |>  46            |INC ESI
0043F8F6  |.  381E          |CMP BYTE PTR DS:[ESI], BL                                ;  << finito il seriale ?
0043F8F8  |.^ 75 B6         \JNZ SHORT Uedit32.0043F8B0
0043F8FA  |>  8BC5          MOV EAX, EBP
0043F8FC  |.  8B8C24 240A00>MOV ECX, DWORD PTR SS:[ESP+A24]
0043F903  |.  64:890D 00000>MOV DWORD PTR FS:[0], ECX
0043F90A  |.  59            POP ECX                                                   ;  017459B8
0043F90B  |.  5F            POP EDI                                                   ;  017459B8
0043F90C  |.  5E            POP ESI                                                   ;  017459B8
0043F90D  |.  5D            POP EBP                                                   ;  017459B8
0043F90E  |.  5B            POP EBX                                                   ;  017459B8
0043F90F  |.  8B8C24 0C0A00>MOV ECX, DWORD PTR SS:[ESP+A0C]                           ;  Uedit32.0078005F
0043F916  |.  33CC          XOR ECX, ESP
0043F918  |.  E8 1B145900   CALL Uedit32.009D0D38                                     ;  << non interessante
0043F91D  |.  81C4 1C0A0000 ADD ESP, 0A1C
0043F923  \.  C3            RETN

  GenerazioneVettoreIniziale
  -----------------------------------
     00654CF0 >/$  8B4424 04     MOV EAX, DWORD PTR SS:[ESP+4]
     00654CF4  |.  50            PUSH EAX                                                  ;  << push parametro passato (la prima volta ?"hash utente")
     00654CF5  |.  C781 C0090000>MOV DWORD PTR DS:[ECX+9C0], 271                           ;  << dimensione vettore inizializzazione (prima del seriale)
     00654CFF  |.  E8 CCFDFFFF   CALL <Uedit32.ElaboraVettore_0024EEE0>
     00654D04  |.  8BC1          MOV EAX, ECX                                              ;  << EAX := indirizzo vettore calcolato
     00654D06  \.  C2 0400       RETN 4
      
       ElaboraVettore_0024EEE0
       ------------------------------------------------
          00654AD0 <>/$  8B5424 04     MOV EDX, DWORD PTR SS:[ESP+4]                             ;  << Parametro (inizialmente hash utente)
          00654AD4   |.  56            PUSH ESI                                                  ;  << nome utente
          00654AD5   |.  57            PUSH EDI                                                  ;  << 2E = 46
          00654AD6   |.  8D41 08       LEA EAX, DWORD PTR DS:[ECX+8]
          00654AD9   |.  BE 68000000   MOV ESI, 68                                               ;  << esi := 68h (iterazioni ciclo)
          00654ADE   |.  8BFF          MOV EDI, EDI                                              ;  ??? inutile ???
          00654AE0   |>  8BFA          MOV EDI, EDX                        ; Prima DWORD
          00654AE2   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD                                      ;  << EDX :=  ( EDX * 10DCDh )
          00654AE8   |.  81E7 0000FFFF AND EDI, FFFF0000                                         ;  << EDI := lascia solo HIWORD(EDX)
          00654AEE   |.  42            INC EDX                                                   ;  << EDX += 1
          00654AEF   |.  8978 F8       MOV DWORD PTR DS:[EAX-8], EDI                             ;  << salva EDI
          00654AF2   |.  8BFA          MOV EDI, EDX                                              ;  << EDI := EDX
          00654AF4   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD                                      ;  << EDX := EDX * 10DCDh
          00654AFA   |.  C1EF 10       SHR EDI, 10                                               ;  << EDI := EDI / 2^16 (recupera parte alta della dword)
          00654AFD   |.  0978 F8       OR DWORD PTR DS:[EAX-8], EDI                              ;  << OR-ing della dword appena scritta
          00654B00   |.  42            INC EDX                                                   ;  << edx++
          00654B01   |.  8BFA          MOV EDI, EDX                                              ;  << ESEGUE GLI STESSI DUE PASSI per la prossima dword>>
          00654B03   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B09   |.  81E7 0000FFFF AND EDI, FFFF0000
          00654B0F   |.  42            INC EDX
          00654B10   |.  8978 FC       MOV DWORD PTR DS:[EAX-4], EDI              ; Seconda Dword
          00654B13   |.  8BFA          MOV EDI, EDX
          00654B15   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B1B   |.  C1EF 10       SHR EDI, 10
          00654B1E   |.  0978 FC       OR DWORD PTR DS:[EAX-4], EDI
          00654B21   |.  42            INC EDX
          00654B22   |.  8BFA          MOV EDI, EDX                                              ;  << terza dword
          00654B24   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B2A   |.  81E7 0000FFFF AND EDI, FFFF0000
          00654B30   |.  42            INC EDX
          00654B31   |.  8938          MOV DWORD PTR DS:[EAX], EDI
          00654B33   |.  8BFA          MOV EDI, EDX
          00654B35   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B3B   |.  C1EF 10       SHR EDI, 10
          00654B3E   |.  0938          OR DWORD PTR DS:[EAX], EDI
          00654B40   |.  42            INC EDX
          00654B41   |.  8BFA          MOV EDI, EDX                                              ;  << quarta dword
          00654B43   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B49   |.  81E7 0000FFFF AND EDI, FFFF0000
          00654B4F   |.  42            INC EDX
          00654B50   |.  8978 04       MOV DWORD PTR DS:[EAX+4], EDI
          00654B53   |.  8BFA          MOV EDI, EDX
          00654B55   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B5B   |.  C1EF 10       SHR EDI, 10
          00654B5E   |.  0978 04       OR DWORD PTR DS:[EAX+4], EDI
          00654B61   |.  42            INC EDX
          00654B62   |.  8BFA          MOV EDI, EDX                                              ;  << quinta dword
          00654B64   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B6A   |.  81E7 0000FFFF AND EDI, FFFF0000
          00654B70   |.  42            INC EDX
          00654B71   |.  8978 08       MOV DWORD PTR DS:[EAX+8], EDI
          00654B74   |.  8BFA          MOV EDI, EDX
          00654B76   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B7C   |.  C1EF 10       SHR EDI, 10
          00654B7F   |.  0978 08       OR DWORD PTR DS:[EAX+8], EDI
          00654B82   |.  42            INC EDX                                                   ;  << sesta dword
          00654B83   |.  8BFA          MOV EDI, EDX
          00654B85   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B8B   |.  81E7 0000FFFF AND EDI, FFFF0000
          00654B91   |.  42            INC EDX
          00654B92   |.  8978 0C       MOV DWORD PTR DS:[EAX+C], EDI
          00654B95   |.  8BFA          MOV EDI, EDX
          00654B97   |.  69D2 CD0D0100 IMUL EDX, EDX, 10DCD
          00654B9D   |.  C1EF 10       SHR EDI, 10
          00654BA0   |.  0978 0C       OR DWORD PTR DS:[EAX+C], EDI
          00654BA3   |.  42            INC EDX
          00654BA4   |.  83C0 18       ADD EAX, 18                                               ;  << passa alle prossime 6 dword
          00654BA7   |.  83EE 01       SUB ESI, 1                                                ;  << decremento contatore ciclo
          00654BAA   |.^ 0F85 30FFFFFF JNZ Uedit32.00654AE0                                      ;  << continua ciclo
          00654BB0   |.  5F            POP EDI                                                   ;  021896D0
          00654BB1   |.  C781 C0090000>MOV DWORD PTR DS:[ECX+9C0], 270                           ;  << segna inizializzazione in posizione prima di seriale
          00654BBB   |.  5E            POP ESI                                                   ;  021896D0
          00654BBC   \.  C2 0400       RETN 4
         
      
      
  LookupInVettore_conRicalcolo
  -------------------------------------
      
  00654BC0 >/$  8B81 C0090000 MOV EAX, DWORD PTR DS:[ECX+9C0]                           ;  << dword before serial ... (9C0 = array size)
  00654BC6  |.  3D 70020000   CMP EAX, 270                                              ;  << execute the two subloops ?
  00654BCB  |.  0F82 BB000000 JB Uedit32.00654C8C                                       ;  << no.
  00654BD1  |.  3D 71020000   CMP EAX, 271                                              ;  << Array initialized ? (270h = 624d = # of array dword )
  00654BD6  |.  75 0A         JNZ SHORT Uedit32.00654BE2                                ;  v
  00654BD8  |.  68 05110000   PUSH 1105
  00654BDD  |.  E8 EEFEFFFF   CALL <Uedit32.ElaboraVettore_0024EEE0>
  00654BE2  |>  33C0          XOR EAX, EAX                                              ;  << EAX := 0
  00654BE4  |.  56            PUSH ESI                                                  ;  << serial
  00654BE5  |>  8B5481 04     /MOV EDX, DWORD PTR DS:[ECX+EAX*4+4]                      ;  << array Lookup (ECX = array address) - offset +4
  00654BE9  |.  331481        |XOR EDX, DWORD PTR DS:[ECX+EAX*4]                        ;  << XOR with previous dword
  00654BEC  |.  40            |INC EAX                                                  ;  << EAX++
  00654BED  |.  81E2 FFFFFF7F |AND EDX, 7FFFFFFF                                        ;  Filter on high byte
  00654BF3  |.  335481 FC     |XOR EDX, DWORD PTR DS:[ECX+EAX*4-4]                      ;  << XOR with even previous dword (first time is array start)
  00654BF7  |.  8BF2          |MOV ESI, EDX                                             ;  << ESI := resulted value
  00654BF9  |.  D1EA          |SHR EDX, 1                                               ;  << EDX / 2
  00654BFB  |.  83E6 01       |AND ESI, 1                                               ;  << ESI = 0/1
  00654BFE  |.  3314B5 C426C2>|XOR EDX, DWORD PTR DS:[ESI*4+C226C4]                     ;  << XOR with 9908B0DFh or with 0 ( if ESI = 0 --> xor with 0 )
  00654C05  |.  339481 300600>|XOR EDX, DWORD PTR DS:[ECX+EAX*4+630]                    ;  << xor with another lookup value
  00654C0C  |.  895481 FC     |MOV DWORD PTR DS:[ECX+EAX*4-4], EDX                      ;  << save value in first of used 3 dwords
  00654C10  |.  3D E3000000   |CMP EAX, 0E3                                             ;  << Loop for 0E3 = 227 times
  00654C15  |.^ 72 CE         \JB SHORT Uedit32.00654BE5
  00654C17  |.  3D 6F020000   CMP EAX, 26F                                              ;  << Already executed second loop ?
  00654C1C  |.  73 34         JNB SHORT Uedit32.00654C52
  00654C1E  |.  8BFF          MOV EDI, EDI                                              ;  << reset flags
  00654C20  |>  8B5481 04     /MOV EDX, DWORD PTR DS:[ECX+EAX*4+4]                      ;  << EAX Starts from 0E3. lookup
  00654C24  |.  331481        |XOR EDX, DWORD PTR DS:[ECX+EAX*4]                        ;  xor
  00654C27  |.  40            |INC EAX                                                  ;  << EAX ++
  00654C28  |.  81E2 FFFFFF7F |AND EDX, 7FFFFFFF
  00654C2E  |.  335481 FC     |XOR EDX, DWORD PTR DS:[ECX+EAX*4-4]
  00654C32  |.  8BF2          |MOV ESI, EDX
  00654C34  |.  D1EA          |SHR EDX, 1
  00654C36  |.  83E6 01       |AND ESI, 1
  00654C39  |.  3314B5 C426C2>|XOR EDX, DWORD PTR DS:[ESI*4+C226C4]
  00654C40  |.  339481 70FCFF>|XOR EDX, DWORD PTR DS:[ECX+EAX*4-390]                    ;  << this is the only change (in respect to first subloop)
  00654C47  |.  895481 FC     |MOV DWORD PTR DS:[ECX+EAX*4-4], EDX
  00654C4B  |.  3D 6F020000   |CMP EAX, 26F                                             ;  << loop for per (26F - 0E3) times
  00654C50  |.^ 72 CE         \JB SHORT Uedit32.00654C20
  00654C52  |>  8B81 BC090000 MOV EAX, DWORD PTR DS:[ECX+9BC]                           ;  <<
  00654C58  |.  3301          XOR EAX, DWORD PTR DS:[ECX]                               ;  << xor with first array dword
  00654C5A  |.  5E            POP ESI                                                   ;  021896D0
  00654C5B  |.  25 FFFFFF7F   AND EAX, 7FFFFFFF                                         ;  << filter
  00654C60  |.  3381 BC090000 XOR EAX, DWORD PTR DS:[ECX+9BC]                           ;  << another xor
  00654C66  |.  8BD0          MOV EDX, EAX                                              ;  << EDX := EAX
  00654C68  |.  83E2 01       AND EDX, 1                                                ;  << EDX = 0/1
  00654C6B  |.  8B1495 C426C2>MOV EDX, DWORD PTR DS:[EDX*4+C226C4]                      ;  << EDX := 9908B0DFh or 0 ( if EDX = 0 --> xor with 0 )
  00654C72  |.  3391 30060000 XOR EDX, DWORD PTR DS:[ECX+630]                           ;  <<
  00654C78  |.  D1E8          SHR EAX, 1                                                ;  << EAX := EAX / 2
  00654C7A  |.  33D0          XOR EDX, EAX                                              ;  << Xor
  00654C7C  |.  8991 BC090000 MOV DWORD PTR DS:[ECX+9BC], EDX                           ;  << update specific value in array
  00654C82  |.  C781 C0090000>MOV DWORD PTR DS:[ECX+9C0], 0                             ;  << zero-out value at the end of array
  00654C8C  |>  8B81 C0090000 MOV EAX, DWORD PTR DS:[ECX+9C0]                           ;  << [ALWAYS EXECUTED] - value at array end
  00654C92  |.  8B1481        MOV EDX, DWORD PTR DS:[ECX+EAX*4]                         ;  << EDX := EAX-th array dword
  00654C95  |.  40            INC EAX                                                   ;  << EAX += 1
  00654C96  |.  8981 C0090000 MOV DWORD PTR DS:[ECX+9C0], EAX                           ;  << update dword at array end (current position in serial)
  00654C9C  |.  8BC2          MOV EAX, EDX                                              ;  << other math
  00654C9E  |.  C1E8 0B       SHR EAX, 0B
  00654CA1  |.  33D0          XOR EDX, EAX
  00654CA3  |.  8BCA          MOV ECX, EDX
  00654CA5  |.  81E1 AD583AFF AND ECX, FF3A58AD
  00654CAB  |.  C1E1 07       SHL ECX, 7
  00654CAE  |.  33D1          XOR EDX, ECX
  00654CB0  |.  8BC2          MOV EAX, EDX
  00654CB2  |.  25 8CDFFFFF   AND EAX, FFFFDF8C
  00654CB7  |.  C1E0 0F       SHL EAX, 0F
  00654CBA  |.  33D0          XOR EDX, EAX
  00654CBC  |.  8BC2          MOV EAX, EDX
  00654CBE  |.  C1E8 12       SHR EAX, 12
  00654CC1  |.  33C2          XOR EAX, EDX                                              ;  << routine return value
  00654CC3  \.  C3            RETN
      
SystemTime_FileTime (determinazione data corrente)
----------------------------------
Di questa ci interessa solo la parte iniziale:
0043B540 >/$  83EC 20       SUB ESP, 20
0043B543  |.  8B4424 24     MOV EAX, DWORD PTR SS:[ESP+24]
0043B547  |.  56            PUSH ESI
0043B548  |.  50            PUSH EAX                                                  ; /pSystemTime = 017E0EC8
0043B549  |.  FF15 D035AD00 CALL DWORD PTR DS:[<&KERNEL32.GetSystemTime>]             ; \GetSystemTime
0043B54F  |.  8B0D 042BD000 MOV ECX, DWORD PTR DS:[D02B04]                            ;  << 0
0043B555  |.  8B15 002BD000 MOV EDX, DWORD PTR DS:[D02B00]                            ;  << 3970h
0043B55B  |.  6A 00         PUSH 0                                                    ;  << 0
0043B55D  |.  68 80510100   PUSH 15180                                                ;  << 15180 (86400 - secondi in un giorno)
0043B562  |.  51            PUSH ECX                                                  ;  << 0
0043B563  |.  52            PUSH EDX                                                  ;  << 3970h
0043B564  |.  E8 C7D15900   CALL <Uedit32.MoltiplicaConElaborazione>
0043B569  |.  894424 04     MOV DWORD PTR SS:[ESP+4], EAX                             ;  << 15180h * 3970h = 4BB92800
:
:
:
0043B5B4  |.  8B4424 30     MOV EAX, DWORD PTR SS:[ESP+30]                            ;  << pSystemTime2
0043B5B8  |.  50            PUSH EAX                                                  ; /pSystemTime = 017E0EC8
0043B5B9  |.  8D4C24 20     LEA ECX, DWORD PTR SS:[ESP+20]                            ; |
0043B5BD  |.  51            PUSH ECX                                                  ; |pFileTime = 0024FC0C
0043B5BE  |.  FFD6          CALL ESI                                                  ; \FileTimeToSystemTime
0043B5C0  |.  5E            POP ESI                                                   ;  017459B8
0043B5C1  |.  83C4 20       ADD ESP, 20
0043B5C4  \.  C3            RETN


DataCorrenteInFileTime
--------------------------------
0040176B > $  83EC 04       SUB ESP, 4
0040176E   .  892C24        MOV DWORD PTR SS:[ESP], EBP                               ;  << seriale
00401771   .  54            PUSH ESP
00401772   .  5D            POP EBP                                                   ;  017459B8
00401773   .  83EC 10       SUB ESP, 10
00401776   .  50            PUSH EAX
00401777   .  53            PUSH EBX
00401778   .  51            PUSH ECX
00401779   .  E8 00000000   CALL Uedit32.0040177E                                     ;  << salta alla linea successiva
0040177E   $  8F45 FC       POP DWORD PTR SS:[EBP-4]                                  ;  017459B8
00401781   .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]                             ;  Uedit32.004461A0
00401784   .  81EB 72070000 SUB EBX, 772
0040178A   .  8B45 0C       MOV EAX, DWORD PTR SS:[EBP+C]
0040178D   .  8903          MOV DWORD PTR DS:[EBX], EAX
0040178F   .  68 38F6FC10   PUSH 10FCF638
00401794   .  8B4D FC       MOV ECX, DWORD PTR SS:[EBP-4]                             ;  Uedit32.004461A0
00401797   .  81E9 82050000 SUB ECX, 582
0040179D   .  50            PUSH EAX
0040179E   .  E8 00000000   CALL Uedit32.004017A3
004017A3   $  58            POP EAX                                                   ;  017459B8
004017A4   .  83C0 09       ADD EAX, 9
004017A7   .  870424        XCHG DWORD PTR SS:[ESP], EAX
004017AA   .- FFE1          JMP ECX                                                   ;  << WinVersionInfo + GetProcAddress per SysTimeToFileTime
004017AC   .  83C4 04       ADD ESP, 4
004017AF   .  89EB          MOV EBX, EBP
004017B1   .  83EB 10       SUB EBX, 10
004017B4   .  53            PUSH EBX
004017B5   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]                                 ;  << currentSystemTime
004017B8   .  50            PUSH EAX
004017B9   .  E8 00000000   CALL Uedit32.004017BE                                     ;  << chiama linea successiva
004017BE   $  58            POP EAX                                                   ;  017459B8
004017BF   .  83C0 09       ADD EAX, 9
004017C2   .  870424        XCHG DWORD PTR SS:[ESP], EAX                              ;  << ** Converte in FileTime la data corrente **
004017C5   .- FFE0          JMP EAX                                                   ;  << SystemTimeToFileTime - passando come parametro il primo valore
004017C7   .  89EB          MOV EBX, EBP
004017C9   .  83EB 10       SUB EBX, 10
004017CC   .  53            PUSH EBX
004017CD   .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]                             ;  Uedit32.004461A0
004017D0   .  81EB 5A070000 SUB EBX, 75A
004017D6   .  50            PUSH EAX                                                  ;  << 401024 - dove saltare
004017D7   .  E8 00000000   CALL Uedit32.004017DC                                     ;  << linea successiva
004017DC   $  58            POP EAX                                                   ;  017459B8
004017DD   .  83C0 09       ADD EAX, 9
004017E0   .  870424        XCHG DWORD PTR SS:[ESP], EAX
004017E3   .  FFE3          JMP EBX                                                   ;  << Copia il valore SysTimeInFileTime in 401010
004017E5   .  83C4 04       ADD ESP, 4
004017E8   .  59            POP ECX                                                   ;  017459B8
004017E9   .  5B            POP EBX                                                   ;  017459B8
004017EA   .  58            POP EAX                                                   ;  017459B8
004017EB   .  83C4 10       ADD ESP, 10
004017EE   .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  << seriale (in EDI c'e' il nome utente)
004017F1   .  83C4 08       ADD ESP, 8
004017F4   .  FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  << TORNA AL CHIAMANTE


DoBSWAP_Parametro
--------------------------------
00401877 <> $  83EC 04       SUB ESP, 4
0040187A    .  892C24        MOV DWORD PTR SS:[ESP], EBP
0040187D    .  54            PUSH ESP
0040187E    .  5D            POP EBP                                                   ;  USER32.77D1919B
0040187F    .  50            PUSH EAX
00401880    .  53            PUSH EBX
00401881    .  E8 00000000   CALL Uedit32.00401886
00401886    $  5B            POP EBX                                                   ;  
00401887    .  81EB 6E080000 SUB EBX, 86E                                              ;  << DoveSalvare
0040188D    .  8B45 08       MOV EAX, DWORD PTR SS:[EBP+8]                             ;  << RecuperaLaCostantePerVersion
00401890    .  F7D0          NOT EAX                                                   ;  << NOT
00401892    .  0FC8          BSWAP EAX                                                 ;  << BSWAP
00401894    .  8903          MOV DWORD PTR DS:[EBX], EAX                               ;  << salva valore
00401896    .  5B            POP EBX                                                   ;  
00401897    .  58            POP EAX                                                   ;  
00401898    .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  
0040189B    .  83C4 08       ADD ESP, 8
0040189E    .- FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  << Torna al chiamante

DeterminaMatchEStabilisciReg
-----------------------------
004018A2 <>/$  83EC 04       SUB ESP, 4
004018A5   |.  892C24        MOV DWORD PTR SS:[ESP], EBP
004018A8   |.  54            PUSH ESP
004018A9   |.  5D            POP EBP                                                   ;  USER32.77D1919B
004018AA   |.  83EC 24       SUB ESP, 24
004018AD   |.  50            PUSH EAX
004018AE   |.  53            PUSH EBX
004018AF   |.  51            PUSH ECX
004018B0   |.  52            PUSH EDX                                                  ;  ntdll.KiFastSystemCallRet
004018B1   |.  56            PUSH ESI
004018B2   |.  57            PUSH EDI                                                  ;  Uedit32.00D04F40
004018B3   |.  E8 00000000   CALL Uedit32.004018B8                                     ;  << riga successiva
004018B8   |$  8F45 FC       POP DWORD PTR SS:[EBP-4]                                  ;  USER32.77D1919B
004018BB   |.  8B45 08       MOV EAX, DWORD PTR SS:[EBP+8]                             ;  << stringa ricavata da seriale
004018BE   |.  09C0          OR EAX, EAX
004018C0   |.  75 0B         JNZ SHORT Uedit32.004018CD                                ;  v se stringa valida
004018C2   |.  FF75 FC       PUSH DWORD PTR SS:[EBP-4]
004018C5   |.  810424 3F0200>ADD DWORD PTR SS:[ESP], 23F
004018CC   |.  C3            RETN
004018CD   |>  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
004018D0   |.  81EB ED070000 SUB EBX, 7ED
004018D6   |.  FF75 0C       PUSH DWORD PTR SS:[EBP+C]                                 ;  << username
004018D9   |.  50            PUSH EAX                                                  ;  << stringa estratta da serial
004018DA   |.  E8 00000000   CALL Uedit32.004018DF                                     ;  << riga successiva
004018DF   |$  58            POP EAX                                                   ;  USER32.77D1919B
004018E0   |.  83C0 09       ADD EAX, 9
004018E3   |.  870424        XCHG DWORD PTR SS:[ESP], EAX                              ;  << Controlla il valore di EAX - e' modificato in 'ElaboraUserName'
004018E6   \.  FFE3          JMP EBX                                                   ;  << CALCOLA HASH USERNAME
004018E8    .  83C4 04       ADD ESP, 4
004018EB    .  8945 F8       MOV DWORD PTR SS:[EBP-8], EAX                             ;  << salva hash di username
004018EE    .  8B5D 08       MOV EBX, DWORD PTR SS:[EBP+8]                             ;  << stringa da seriale
004018F1    .  8B55 FC       MOV EDX, DWORD PTR SS:[EBP-4]
004018F4    .  81EA B2010000 SUB EDX, 1B2                                              ;  << Routine da invocare
004018FA    .  53            PUSH EBX
004018FB    .  50            PUSH EAX
004018FC    .  E8 00000000   CALL Uedit32.00401901                                     ;  << dopo
00401901    $  58            POP EAX                                                   ;  USER32.77D1919B
00401902    .  83C0 09       ADD EAX, 9
00401905    .  870424        XCHG DWORD PTR SS:[ESP], EAX                              ;  << EAX := hashUserName_NOT
00401908    .- FFE2          JMP EDX                                                   ;  << bswap stringa estratta da seriale
0040190A    .  83C4 04       ADD ESP, 4
0040190D    .  53            PUSH EBX                                                  ;  << stringa estratta (Bswappata)
0040190E    .  8B55 FC       MOV EDX, DWORD PTR SS:[EBP-4]
00401911    .  81EA 78030000 SUB EDX, 378                                              ;  << routine da invocare (estraiMatch)
00401917    .  50            PUSH EAX
00401918    .  E8 00000000   CALL Uedit32.0040191D                                     ;  << linea dopo
0040191D    $  58            POP EAX                                                   ;  
0040191E    .  83C0 09       ADD EAX, 9
00401921    .  870424        XCHG DWORD PTR SS:[ESP], EAX                              ;  << 401926
00401924    .- FFE2          JMP EDX                                                   ;  << Match1 - 8 char iniziali
00401926    .  83C4 04       ADD ESP, 4
00401929    .  8945 E4       MOV DWORD PTR SS:[EBP-1C], EAX                            ;  << salva primo match
0040192C    .  83C3 08       ADD EBX, 8                                                ;  << prossimi 8 char
0040192F    .  53            PUSH EBX
00401930    .  50            PUSH EAX
00401931    .  E8 00000000   CALL Uedit32.00401936                                     ;  << linea dopo
00401936    $  58            POP EAX                                                   ;  
00401937    .  83C0 09       ADD EAX, 9
0040193A    .  870424        XCHG DWORD PTR SS:[ESP], EAX                              ;  << EAX := Primo Match
0040193D    .- FFE2          JMP EDX                                                   ;  
0040193F    .  83C4 04       ADD ESP, 4
00401942    .  8945 F0       MOV DWORD PTR SS:[EBP-10], EAX                            ;  << salva secondo Match
00401945    .  83C3 08       ADD EBX, 8                                                ;  << avanza
00401948    .  53            PUSH EBX
00401949    .  50            PUSH EAX
0040194A    .  E8 00000000   CALL Uedit32.0040194F                                     ;  << linea dopo
0040194F    $  58            POP EAX                                                   ;  
00401950    .  83C0 09       ADD EAX, 9
00401953    .  870424        XCHG DWORD PTR SS:[ESP], EAX
00401956    .- FFE2          JMP EDX                                                   ;  << terzoMatch
00401958    .  83C4 04       ADD ESP, 4
0040195B    .  8945 F4       MOV DWORD PTR SS:[EBP-C], EAX                             ;  << salva terzo match
0040195E    .  53            PUSH EBX
0040195F    .  52            PUSH EDX                                                  ;  
00401960    .  89EB          MOV EBX, EBP
00401962    .  83EB 10       SUB EBX, 10
00401965    .  53            PUSH EBX                                                  ;  << secondoMatch
00401966    .  8B55 FC       MOV EDX, DWORD PTR SS:[EBP-4]
00401969    .  81EA 7A010000 SUB EDX, 17A
0040196F    .  50            PUSH EAX
00401970    .  E8 00000000   CALL Uedit32.00401975                                     ;  << linea dopo
00401975    $  58            POP EAX                                                   ;  
00401976    .  83C0 09       ADD EAX, 9
00401979    .  870424        XCHG DWORD PTR SS:[ESP], EAX
0040197C    .- FFE2          JMP EDX                                                   ;  << Combina Secondo e Terzo Match
0040197E    .  83C4 04       ADD ESP, 4
00401981    .  5A            POP EDX                                                   ;  
00401982    .  5B            POP EBX                                                   ;  
00401983    .  83C3 08       ADD EBX, 8                                                ;  << avanza nella stringa estratta
00401986    .  53            PUSH EBX
00401987    .  50            PUSH EAX
00401988    .  E8 00000000   CALL Uedit32.0040198D                                     ;  << linea successiva
0040198D    $  58            POP EAX                                                   ;  
0040198E    .  83C0 09       ADD EAX, 9
00401991    .  870424        XCHG DWORD PTR SS:[ESP], EAX
00401994    .- FFE2          JMP EDX                                                   ;  << Estrae quartoMatch
00401996    .  83C4 04       ADD ESP, 4
00401999    .  8945 E8       MOV DWORD PTR SS:[EBP-18], EAX                            ;  << salva quartoMatch
0040199C    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
0040199F    .  81EB A0080000 SUB EBX, 8A0
004019A5    .  8B1B          MOV EBX, DWORD PTR DS:[EBX]                               ;  << BSWAP di 150000 (versione di Uedit)
004019A7    .  8B45 E8       MOV EAX, DWORD PTR SS:[EBP-18]                            ;  << EAX := QuartoMatch
004019AA    .  0FCB          BSWAP EBX                                                 ;  << ottiene 150000 ...
004019AC    .  F7D3          NOT EBX                                                   ;  << .... in EBX
004019AE    .  50            PUSH EAX                                                  ;  << push quartoMatch
004019AF    .  53            PUSH EBX                                                  ;  << push 150000
004019B0    .  8B5D E8       MOV EBX, DWORD PTR SS:[EBP-18]                            ;  << quartoMatch
004019B3    .  8B45 E4       MOV EAX, DWORD PTR SS:[EBP-1C]                            ;  << primo match
004019B6    .  C1C8 0D       ROR EAX, 0D                                               ;  << primoMatch = primoMatch ROR 0D
004019B9    .  31C3          XOR EBX, EAX                                              ;  << XOR quarto_match e (primoMatch ROR 0D)
004019BB    .  C1C0 0D       ROL EAX, 0D                                               ;  << rotazione a sinistra ora (ripristina valore ?)
004019BE    .  31C3          XOR EBX, EAX                                              ;  << nuovo XOR col valore 'non ribaltato'
004019C0    .  895D E8       MOV DWORD PTR SS:[EBP-18], EBX                            ;  << salva questo valore in posizione quartoMatch
004019C3    .  5B            POP EBX                                                   ;  USER32.77D1919B
004019C4    .  58            POP EAX                                                   ;  USER32.77D1919B
004019C5    .  31C0          XOR EAX, EAX                                              ;  << EAX := 0
004019C7    .  8B45 E8       MOV EAX, DWORD PTR SS:[EBP-18]                            ;  << recupera il valore appena calcolato
004019CA    .  25 000000F0   AND EAX, F0000000                                         ;  << Esegue AND (ultima cifra esadecimale)
004019CF    .  C1C0 04       ROL EAX, 4                                                ;  << rotazione a sinistra di 4 (lo porta a destra a tutto )
004019D2    .  53            PUSH EBX                                                  ;  << 150000
004019D3    .  50            PUSH EAX                                                  ;  <<
004019D4    .  93            XCHG EAX, EBX                                             ;  << scambio EAX <--> EBX
004019D5    .  8B45 FC       MOV EAX, DWORD PTR SS:[EBP-4]
004019D8    .  2D 22080000   SUB EAX, 822
004019DD    .  0918          OR DWORD PTR DS:[EAX], EBX                                ;  << OR della dword di 'controllo' (su cui si decide la registrazione) deve essere < 17Ch
004019DF    .  8B45 E8       MOV EAX, DWORD PTR SS:[EBP-18]                            ;  << recupera il valore calcolato (posizione quartoMatch)
004019E2    .  25 FFFFFF0F   AND EAX, 0FFFFFFF                                         ;  << tutto tranne prima cifra esadecimale
004019E7    .  8945 E8       MOV DWORD PTR SS:[EBP-18], EAX                            ;  << e lo salva da dove l'ha preso (quarto match)
004019EA    .  58            POP EAX                                                   ;  USER32.77D1919B
004019EB    .  5B            POP EBX                                                   ;  USER32.77D1919B
004019EC    .  8B45 E8       MOV EAX, DWORD PTR SS:[EBP-18]                            ;  << riprende cio' che e' in quartoMatch
004019EF    .  C1CB 10       ROR EBX, 10                                               ;  << ROR 150000, 10 (otteniamo 15)
004019F2    .  C1C8 10       ROR EAX, 10                                               ;  << ror EAX, 10
004019F5    .  66:29C3       SUB BX, AX                                                ;  << devono essere uguali le WORD + basse ( 00 15 ) !
004019F8    .  74 13         JE SHORT Uedit32.00401A0D                                 ;  v
004019FA    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]                             ;  << prepara valore di errore
004019FD    .  81EB 22080000 SUB EBX, 822
00401A03    .  31C0          XOR EAX, EAX
00401A05    .  40            INC EAX
00401A06    .  C1E0 1D       SHL EAX, 1D
00401A09    .  0903          OR DWORD PTR DS:[EBX], EAX
00401A0B    .  EB 54         JMP SHORT Uedit32.00401A61
00401A0D    >  C1C8 18       ROR EAX, 18                                               ;  << deve essere uguale anche altro
00401A10    .  C1CB 18       ROR EBX, 18
00401A13    .  28C3          SUB BL, AL                                                ;  << byte + basso = 0 ?
00401A15    .  74 4A         JE SHORT Uedit32.00401A61                                 ;  - devo farlo saltare ?
00401A17    .  9B            WAIT
00401A18    .  DBE3          FINIT
00401A1A    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401A1D    .  81EB B4080000 SUB EBX, 8B4
00401A23    .  DF2B          FILD QWORD PTR DS:[EBX]
00401A25    .  DF6D F0       FILD QWORD PTR SS:[EBP-10]
00401A28    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401A2B    .  81EB 98070000 SUB EBX, 798
00401A31    .  DF2B          FILD QWORD PTR DS:[EBX]
00401A33    .  D8E1          FSUB ST(0), ST(1)
00401A35    .  D8F2          FDIV ST(0), ST(2)
00401A37    .  DB5D DC       FISTP DWORD PTR SS:[EBP-24]
00401A3A    .  9B            WAIT
00401A3B    .  DBE3          FINIT
00401A3D    .  8B45 DC       MOV EAX, DWORD PTR SS:[EBP-24]                            ;  USER32.77D1919B
00401A40    .  A9 00000080   TEST EAX, 80000000
00401A45    .  74 02         JE SHORT Uedit32.00401A49
00401A47    .  F7D8          NEG EAX
00401A49    >  3D 6D010000   CMP EAX, 16D
00401A4E    .  76 11         JBE SHORT Uedit32.00401A61
00401A50    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401A53    .  81EB 22080000 SUB EBX, 822
00401A59    .  31C0          XOR EAX, EAX
00401A5B    .  40            INC EAX
00401A5C    .  C1E0 0E       SHL EAX, 0E
00401A5F    .  0903          OR DWORD PTR DS:[EBX], EAX
00401A61    >  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401A64    .  81EB B4080000 SUB EBX, 8B4                                              ;  << importante_401004
00401A6A    .  9B            WAIT
00401A6B    .  DBE3          FINIT
00401A6D    .  DF2B          FILD QWORD PTR DS:[EBX]                                   ;  << 00 C0 69 2A | C9 00 00 00
00401A6F    .  DF6D F0       FILD QWORD PTR SS:[EBP-10]                                ;  << secondo e terzo match assieme come qword ( secondo nella dword + bassa )
00401A72    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401A75    .  81EB A8080000 SUB EBX, 8A8
00401A7B    .  DF2B          FILD QWORD PTR DS:[EBX]                                   ;  << currSysTime in FileTime
00401A7D    .  D8E1          FSUB ST(0), ST(1)                                         ;  << sottrae quest'ultima con secondo_terzo
00401A7F    .  D8F2          FDIV ST(0), ST(2)                                         ;  << divide per la prima (dovrebbe essere costante)
00401A81    .  DB5D DC       FISTP DWORD PTR SS:[EBP-24]                               ;  << salva il risultato (DWORD)
00401A84    .  8B45 DC       MOV EAX, DWORD PTR SS:[EBP-24]                            ;  << recupera questo valore
00401A87    .  A9 00000080   TEST EAX, 80000000                                        ;  << e lo controlla
00401A8C    .  74 02         JE SHORT Uedit32.00401A90
00401A8E    .  F7D8          NEG EAX
00401A90    >  3D 7C010000   CMP EAX, 17C                                              ;  << EAX deve essere <= 17C
00401A95    .  76 15         JBE SHORT Uedit32.00401AAC                                ;  DEVE SALTARE
00401A97    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401A9A    .  81EB 22080000 SUB EBX, 822
00401AA0    .  B8 FF010000   MOV EAX, 1FF
00401AA5    .  C1E0 10       SHL EAX, 10
00401AA8    .  0903          OR DWORD PTR DS:[EBX], EAX                                ;  << male?
00401AAA    .  EB 0E         JMP SHORT Uedit32.00401ABA
00401AAC    >  C1C0 10       ROL EAX, 10                                               ;  << ROL EAX,10 posizioni
00401AAF    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401AB2    .  81EB 22080000 SUB EBX, 822                                              ;  << dword di controllo
00401AB8    .  0903          OR DWORD PTR DS:[EBX], EAX                                ;  << salva il valore nell'indicatore (male?)
00401ABA    >  8B45 E8       MOV EAX, DWORD PTR SS:[EBP-18]                            ;  << valore in posizione quartoMatch
00401ABD    .  83E0 0F       AND EAX, 0F                                               ;  << ultima cifra esadecimale
00401AC0    .  A9 08000000   TEST EAX, 8
00401AC5    .  75 1F         JNZ SHORT Uedit32.00401AE6                                ;  << ** NON deve saltare
00401AC7    .  83E0 07       AND EAX, 7
00401ACA    .  0C 00         OR AL, 0
00401ACC    .  74 29         JE SHORT Uedit32.00401AF7                                 ;  << questo *deve* saltare
00401ACE    .  83C8 20       OR EAX, 20
00401AD1    .  C1E0 07       SHL EAX, 7
00401AD4    .  25 801F0000   AND EAX, 1F80
00401AD9    .  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401ADC    .  81EB 22080000 SUB EBX, 822
00401AE2    .  0903          OR DWORD PTR DS:[EBX], EAX                                ;  << male
00401AE4    .  EB 11         JMP SHORT Uedit32.00401AF7
00401AE6    >  8B5D FC       MOV EBX, DWORD PTR SS:[EBP-4]
00401AE9    .  81EB 22080000 SUB EBX, 822
00401AEF    .  31C0          XOR EAX, EAX
00401AF1    .  40            INC EAX
00401AF2    .  C1E0 06       SHL EAX, 6
00401AF5    .  0903          OR DWORD PTR DS:[EBX], EAX
00401AF7    >  5F            POP EDI                                                   ;  USER32.77D1919B
00401AF8    .  5E            POP ESI                                                   ;  USER32.77D1919B
00401AF9    .  5A            POP EDX                                                   ;  USER32.77D1919B
00401AFA    .  59            POP ECX                                                   ;  USER32.77D1919B
00401AFB    .  5B            POP EBX                                                   ;  USER32.77D1919B
00401AFC    .  58            POP EAX                                                   ;  USER32.77D1919B
00401AFD    .  83C4 24       ADD ESP, 24
00401B00    .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  USER32.77D1919B
00401B03    .  83C4 08       ADD ESP, 8
00401B06    .- FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  << **** torna al chiamante

Analizziamo meglio CodificaMatchEDeterminaRegistrazione
-------------------------
   CalcolaHashUserName (serve solo per il file di licenza)
   -------
   004010CB <> .  83EC 04       SUB ESP, 4
   004010CE    .  892C24        MOV DWORD PTR SS:[ESP], EBP                               ;  <moltiplicazione_e_pFileTime>
   004010D1    .  54            PUSH ESP
   004010D2    .  5D            POP EBP                                                   ;  Uedit32.004018E8
   004010D3    .  53            PUSH EBX                                                  ;  <Uedit32.ElaboraUserName>
   004010D4    .  51            PUSH ECX
   004010D5    .  52            PUSH EDX
   004010D6    .  56            PUSH ESI                                                  ;  kernel32.7C800000
   004010D7    .  8B75 08       MOV ESI, DWORD PTR SS:[EBP+8]                             ;  << username
   004010DA    .  BA 01A001DC   MOV EDX, DC01A001                                         ;  << costante
   004010DF    .  6A 00         PUSH 0
   004010E1    .  59            POP ECX                                                   ;  << ECX := 0
   004010E2    >  AC            LODS BYTE PTR DS:[ESI]                                    ;  << carattere dello username in AL
   004010E3    .  08C0          OR AL, AL                                                 ;  << username finito ?
   004010E5    .  74 25         JE SHORT Uedit32.0040110C
   004010E7    .  50            PUSH EAX                                                  ;  << salva valore (per successivo uso)
   004010E8    .  34 CD         XOR AL, 0CD                                               ;  << XOR char username con 0CD
   004010EA    .  0FB6C0        MOVZX EAX, AL                                             ;  << estende con 0 (byte esteso)
   004010ED    .  01C1          ADD ECX, EAX                                              ;  << ECX += EAX
   004010EF    .  58            POP EAX                                                   ;  Uedit32.004018E8
   004010F0    .  F6E0          MUL AL                                                    ;  << AL * AL
   004010F2    .  0FB7C0        MOVZX EAX, AX                                             ;  << AX (word estesa)
   004010F5    .  66:BB E500    MOV BX, 0E5                                               ;  << BX := 0E5
   004010F9    .  66:F7E3       MUL BX                                                    ;  << EAX = AX*BX
   004010FC    .  01C1          ADD ECX, EAX                                              ;  << ECX += EAX
   004010FE    .  01D1          ADD ECX, EDX                                              ;  << ECX += EDX
   00401100    .  F7C1 01000000 TEST ECX, 1                                               ;  << ECX dispari ?
   00401106    .^ 74 DA         JE SHORT Uedit32.004010E2                                 ;  << se NON pari moltiplican per 2 EDX
   00401108    .  D1CA          ROR EDX, 1
   0040110A    .^ EB D6         JMP SHORT Uedit32.004010E2
   0040110C    >  89C8          MOV EAX, ECX                                              ;  << hash username
   0040110E    .  F7D0          NOT EAX                                                   ;  << NOT hash
   00401110    .  5E            POP ESI                                                   ;  Uedit32.004018E8
   00401111    .  5A            POP EDX                                                   ;  Uedit32.004018E8
   00401112    .  59            POP ECX                                                   ;  Uedit32.004018E8
   00401113    .  5B            POP EBX                                                   ;  Uedit32.004018E8
   00401114    .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  Uedit32.004018E8
   00401117    .  83C4 08       ADD ESP, 8
   0040111A    .  FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  Uedit32.004018DF
   BSWAP Stringa estratta da seriale
   -----------------------
   00401706 <BSWA> .  83EC 04       SUB ESP, 4                                                ;  ---
   00401709        .  892C24        MOV DWORD PTR SS:[ESP], EBP                               ;  <moltiplicazione_e_pFileTime>
   0040170C        .  54            PUSH ESP
   0040170D        .  5D            POP EBP                                                   ;  Uedit32.0040190A
   0040170E        .  50            PUSH EAX
   0040170F        .  53            PUSH EBX
   00401710        .  51            PUSH ECX
   00401711        .  52            PUSH EDX                                                  ;  <Uedit32.BSWAPInPlace>
   00401712        .  B9 0F000000   MOV ECX, 0F                                               ;  << ecx := 0F
   00401717        .  8B5D F8       MOV EBX, DWORD PTR SS:[EBP-8]                             ;  << stringa da seriale
   0040171A        .  BA 1C000000   MOV EDX, 1C                                               ;  << EDX := 1C (28)
   0040171F        >  8B0413        MOV EAX, DWORD PTR DS:[EBX+EDX]                           ;  << ultimi 4 char (e poi si sposta di 2 char alla volta indietro)
   00401722        .  0FC8          BSWAP EAX                                                 ;  << BSWAP
   00401724        .  890413        MOV DWORD PTR DS:[EBX+EDX], EAX                           ;  << salva il BSWAP nel posto originale
   00401727        .  83EA 02       SUB EDX, 2
   0040172A        .^ E2 F3         LOOPD SHORT Uedit32.0040171F
   0040172C        .  5A            POP EDX                                                   ;  Uedit32.0040190A
   0040172D        .  59            POP ECX                                                   ;  Uedit32.0040190A
   0040172E        .  5B            POP EBX                                                   ;  Uedit32.0040190A
   0040172F        .  58            POP EAX                                                   ;  Uedit32.0040190A
   00401730        .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  << ptr. a 'secondi'
   00401733        .  83C4 08       ADD ESP, 8
   00401736        .  FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  Uedit32.00401901
   
   EstraiMatch
   --------------------
   00401540 <Estr> .  83EC 04       SUB ESP, 4                                                ;  ---- Estrai Match ----
   00401543        .  892C24        MOV DWORD PTR SS:[ESP], EBP                               ;  <moltiplicazione_e_pFileTime>
   00401546        .  54            PUSH ESP
   00401547        .  5D            POP EBP                                                   ;  Uedit32.00401926
   00401548        .  53            PUSH EBX
   00401549        .  51            PUSH ECX
   0040154A        .  52            PUSH EDX                                                  ;  <Uedit32.EstraiMatch>
   0040154B        .  56            PUSH ESI                                                  ;  kernel32.7C800000
   0040154C        .  57            PUSH EDI
   0040154D        .  E8 00000000   CALL Uedit32.00401552                                     ;  << successiva
   00401552        $  5F            POP EDI                                                   ;  Uedit32.00401926
   00401553        .  83EF 2A       SUB EDI, 2A
   00401556        .  8B75 08       MOV ESI, DWORD PTR SS:[EBP+8]                             ;  << stringa estratta da seriale e bswappata
   00401559        .  31DB          XOR EBX, EBX                                              ;  << EBX := 0
   0040155B        .  31C9          XOR ECX, ECX                                              ;  << ECX := 0
   0040155D        >  AC            LODS BYTE PTR DS:[ESI]                                    ;  << char della stringa in AL
   0040155E        .  51            PUSH ECX                                                  ;  <<
   0040155F        .  31C9          XOR ECX, ECX                                              ;  << ecx := 0
   00401561        >  3A040F        CMP AL, BYTE PTR DS:[EDI+ECX]                             ;  << Cerca l'indice nella stringa X6A3KVMOQ8D2HCPI
   00401564        .  74 08         JE SHORT Uedit32.0040156E
   00401566        .  83F9 0F       CMP ECX, 0F
   00401569        .  7F 11         JG SHORT Uedit32.0040157C
   0040156B        .  41            INC ECX
   0040156C        .^ EB F3         JMP SHORT Uedit32.00401561
   0040156E        >  09CB          OR EBX, ECX                                               ;  << EBX = EBX OR <indice_carattere>
   00401570        .  59            POP ECX                                                   ;  << num char 'matchati'
   00401571        .  83F9 07       CMP ECX, 7
   00401574        .  74 1A         JE SHORT Uedit32.00401590                                 ;  << se ho matchato 8 char ... per ora va bene
   00401576        .  41            INC ECX                                                   ;  << char_matchati++
   00401577        .  C1E3 04       SHL EBX, 4                                                ;  << EBX * 16
   0040157A        .^ EB E1         JMP SHORT Uedit32.0040155D
   0040157C        >  83C4 04       ADD ESP, 4
   0040157F        .  5F            POP EDI                                                   ;  Uedit32.00401926
   00401580        .  5E            POP ESI                                                   ;  Uedit32.00401926
   00401581        .  5A            POP EDX                                                   ;  Uedit32.00401926
   00401582        .  59            POP ECX                                                   ;  Uedit32.00401926
   00401583        .  5B            POP EBX                                                   ;  Uedit32.00401926
   00401584        .  31C0          XOR EAX, EAX
   00401586        .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  Uedit32.00401926
   00401589        .  83C4 08       ADD ESP, 8
   0040158C        .  FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  Uedit32.0040191D
   00401590        >  89D8          MOV EAX, EBX                                              ;  << valore calcolato in EAX
   00401592        .  5F            POP EDI                                                   ;  Uedit32.00401926
   00401593        .  5E            POP ESI                                                   ;  Uedit32.00401926
   00401594        .  5A            POP EDX                                                   ;  Uedit32.00401926
   00401595        .  59            POP ECX                                                   ;  Uedit32.00401926
   00401596        .  5B            POP EBX                                                   ;  Uedit32.00401926
   00401597        .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  Uedit32.00401926
   0040159A        .  83C4 08       ADD ESP, 8
   0040159D        .  FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  Uedit32.0040191D
   
   
   CombinaSecondoTerzoMatch
   -------------------------------
   0040173E <Combin> .  83EC 04       SUB ESP, 4                                                ;  ----
   00401741          .  892C24        MOV DWORD PTR SS:[ESP], EBP                               ;  <moltiplicazione_e_pFileTime>
   00401744          .  54            PUSH ESP
   00401745          .  5D            POP EBP                                                   ;  Uedit32.0040197E
   00401746          .  50            PUSH EAX
   00401747          .  53            PUSH EBX                                                  ;  <secondoMatch>
   00401748          .  52            PUSH EDX                                                  ;  <Uedit32.CombinaSecondoTerzoMatch>
   00401749          .  8B5D 08       MOV EBX, DWORD PTR SS:[EBP+8]                             ;  << ind. secondo match
   0040174C          .  8B43 04       MOV EAX, DWORD PTR DS:[EBX+4]                             ;  << terzo match (valore)
   0040174F          .  8B13          MOV EDX, DWORD PTR DS:[EBX]                               ;  << Secondo Match ( valore )
   00401751          .  31C2          XOR EDX, EAX                                              ;  << SecondoMatch = SecondoMatch XOR TerzoMatch
   00401753          .  0FCA          BSWAP EDX                                                 ;  << bswap risultato (in edx)
   00401755          .  31D0          XOR EAX, EDX                                              ;  << TerzoMatch = TerzoMatch XOR ( valore_bswappato appena calcolato )
   00401757          .  0FC8          BSWAP EAX                                                 ;  << bswap a sua volta
   00401759          .  8943 04       MOV DWORD PTR DS:[EBX+4], EAX                             ;  << Salva valore di EAX nella posizione del terzoMatch
   0040175C          .  8913          MOV DWORD PTR DS:[EBX], EDX                               ;  << Salva EDX nella posizione del secondo Match
   0040175E          .  5A            POP EDX                                                   ;  Uedit32.0040197E
   0040175F          .  5B            POP EBX                                                   ;  Uedit32.0040197E
   00401760          .  58            POP EAX                                                   ;  Uedit32.0040197E
   00401761          .  8B2C24        MOV EBP, DWORD PTR SS:[ESP]                               ;  Uedit32.0040197E
   00401764          .  83C4 08       ADD ESP, 8
   00401767          .  FF6424 FC     JMP DWORD PTR SS:[ESP-4]                                  ;  Uedit32.00401975
   
   
   ----------------------------

Uedit15Keygen_ENG.rar

371.92 KB, 下载次数: 49, 下载积分: 吾爱币 -1 CB

KeyGen.rar

59.57 KB, 下载次数: 22, 下载积分: 吾爱币 -1 CB

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zhimingcom 发表于 2009-9-24 20:12
这么好的帖子怎么没有人顶啊,要是把注释给翻译一下就好了。
mycc 发表于 2009-9-24 21:42
gry8686 发表于 2009-9-24 22:05
menglv 发表于 2009-9-26 16:03
这么好的帖子
daihu37 发表于 2009-10-13 16:20
谢谢分享,好东西啊
TheCjw 发表于 2009-10-13 16:52
初看,确实分析得十分到位。
489414 发表于 2009-10-16 00:51
学习了不错啊
flygo 发表于 2009-10-22 10:45
是不是视频教程?
speedboy 发表于 2009-10-22 11:59
辛苦了!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-28 08:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表