GGLHY 发表于 2011-1-22 01:58:47

简单任务之某视频录制软件的算法分析

本帖最后由 GGLHY 于 2011-1-24 09:56 编辑

               简单任务之某视频录制软件的算法分析


(赶材料,熬夜用OD提神!于是有了本作!:sleepy: )    请方家指正!



直接来到:
00570A27|.E8 9C2EEEFF   CALL ScreenRe.004538C8
00570A2C|.8B45 FC       MOV EAX,DWORD PTR SS:          ;假码
00570A2F|.E8 60FDFFFF   CALL ScreenRe.00570794                ;算法CALL,把钥匙拿来,俺要进去参观参观
   00570794/$55            PUSH EBP
   00570795|.8BEC          MOV EBP,ESP
      省略部分代码
   005707A8|.8B45 FC       MOV EAX,DWORD PTR SS:          ;假码
   005707AB|.E8 3C3EE9FF   CALL ScreenRe.004045EC
   005707B0|.33C0          XOR EAX,EAX
   005707B2|.55            PUSH EBP
      省略部分代码
   005707BE|.8B45 FC       MOV EAX,DWORD PTR SS:          ;假码
   005707C1|.E8 363EE9FF   CALL ScreenRe.004045FC
   005707C6|.E8 258AE9FF   CALL ScreenRe.004091F0
   005707CB|.83F8 17       CMP EAX,17                            ;假码长度与17H(23)比较
   005707CE|.74 0A         JE SHORT ScreenRe.005707DA            ;呵呵,该不该跳呢?
   005707D0|.BB 01000000   MOV EBX,1                           ;不跳则EBX置1,接着下面就无条件跳了
   005707D5|.E9 7C010000   JMP ScreenRe.00570956               ;这里直接跳向EAX清零了,悲剧的开始
   005707DA|>B2 01         MOV DL,1                              ;跳的话,DL置1
   005707DC|.A1 10644100   MOV EAX,DWORD PTR DS:
   005707E1|.E8 162BE9FF   CALL ScreenRe.004032FC
   005707E6|.8BD8          MOV EBX,EAX
   005707E8|.8BCB          MOV ECX,EBX
   005707EA|.8B55 FC       MOV EDX,DWORD PTR SS:          ;假码
   005707ED|.B0 2D         MOV AL,2D                           ;呵呵,注意这里的“2D”!这让你想到了什么?
   005707EF|.E8 D4FEFFFF   CALL ScreenRe.005706C8                ;这个CALL是得到假码被“-”分成几部分!!!
   005707F4|.8BC3          MOV EAX,EBX
   005707F6|.8B10          MOV EDX,DWORD PTR DS:
   005707F8|.FF52 14       CALL DWORD PTR DS:            ;
   005707FB|.83F8 04       CMP EAX,4                           ;是4部分吗?
   005707FE|.74 0A         JE SHORT ScreenRe.0057080A
   00570800|.BB 01000000   MOV EBX,1                           ;不是4部分则EBX置1
   00570805|.E9 4C010000   JMP ScreenRe.00570956               ;接着这里直接跳向EAX清零了,悲剧又开始了
   0057080A|>8D4D EC       LEA ECX,DWORD PTR SS:
   0057080D|.33D2          XOR EDX,EDX
   0057080F|.8BC3          MOV EAX,EBX
   00570811|.8B30          MOV ESI,DWORD PTR DS:
   00570813|.FF56 0C       CALL DWORD PTR DS:
   00570816|.8B45 EC       MOV EAX,DWORD PTR SS:         ;假码第一部分,设为S1
   00570819|.E8 DE3DE9FF   CALL ScreenRe.004045FC
   0057081E|.E8 CD89E9FF   CALL ScreenRe.004091F0
   00570823|.83F8 05       CMP EAX,5                           ;S1的长度与5比较
   00570826|.0F85 25010000 JNZ ScreenRe.00570951               ;不等就跳向给EBX赋值为1的地方了,是杯具啊
   0057082C|.8D4D E8       LEA ECX,DWORD PTR SS:
   0057082F|.BA 01000000   MOV EDX,1
   00570834|.8BC3          MOV EAX,EBX
   00570836|.8B30          MOV ESI,DWORD PTR DS:
   00570838|.FF56 0C       CALL DWORD PTR DS:
   0057083B|.8B45 E8       MOV EAX,DWORD PTR SS:         ;假码第2部分S2
   0057083E|.E8 B93DE9FF   CALL ScreenRe.004045FC
   00570843|.E8 A889E9FF   CALL ScreenRe.004091F0
   00570848|.83F8 05       CMP EAX,5                           ;S2的长度与5比较
   0057084B|.0F85 00010000 JNZ ScreenRe.00570951               ;不等就跳向给EBX赋值为1的地方了,又是杯具
   00570851|.8D4D E4       LEA ECX,DWORD PTR SS:
   00570854|.BA 02000000   MOV EDX,2
   00570859|.8BC3          MOV EAX,EBX
   0057085B|.8B30          MOV ESI,DWORD PTR DS:
   0057085D|.FF56 0C       CALL DWORD PTR DS:
   00570860|.8B45 E4       MOV EAX,DWORD PTR SS:         ;假码第3部分S3
   00570863|.E8 943DE9FF   CALL ScreenRe.004045FC
   00570868|.E8 8389E9FF   CALL ScreenRe.004091F0
   0057086D|.83F8 05       CMP EAX,5                           ;S3的长度与5比较
   00570870|.0F85 DB000000 JNZ ScreenRe.00570951               ;不等就跳向给EBX赋值为1的地方了,还是杯具
   00570876|.8D4D E0       LEA ECX,DWORD PTR SS:
   00570879|.BA 03000000   MOV EDX,3                           ;EDX=3
   0057087E|.8BC3          MOV EAX,EBX
   00570880|.8B30          MOV ESI,DWORD PTR DS:
   00570882|.FF56 0C       CALL DWORD PTR DS:
   00570885|.8B45 E0       MOV EAX,DWORD PTR SS:         ;假码第4部分S4
   00570888|.E8 6F3DE9FF   CALL ScreenRe.004045FC
   0057088D|.E8 5E89E9FF   CALL ScreenRe.004091F0
   00570892|.83F8 05       CMP EAX,5                           ;S4的长度与5比较
   00570895|.0F85 B6000000 JNZ ScreenRe.00570951               ;不等就跳向给EBX赋值为1的地方了,一样是杯具
   0057089B|.8D4D DC       LEA ECX,DWORD PTR SS:
   0057089E|.33D2          XOR EDX,EDX
   005708A0|.8BC3          MOV EAX,EBX
   005708A2|.8B30          MOV ESI,DWORD PTR DS:
   005708A4|.FF56 0C       CALL DWORD PTR DS:
   005708A7|.FF75 DC       PUSH DWORD PTR SS:            ; S1
   005708AA|.8D4D D8       LEA ECX,DWORD PTR SS:
   005708AD|.BA 01000000   MOV EDX,1
   005708B2|.8BC3          MOV EAX,EBX
   005708B4|.8B30          MOV ESI,DWORD PTR DS:
   005708B6|.FF56 0C       CALL DWORD PTR DS:
   005708B9|.FF75 D8       PUSH DWORD PTR SS:            ;S2
   005708BC|.68 88095700   PUSH ScreenRe.00570988                ;ASCII "zhuoxin"
   005708C1|.8D45 F8       LEA EAX,DWORD PTR SS:
   005708C4|.BA 03000000   MOV EDX,3
   005708C9|.E8 EE3BE9FF   CALL ScreenRe.004044BC
   005708CE|.8D4D D4       LEA ECX,DWORD PTR SS:
   005708D1|.BA 03000000   MOV EDX,3
   005708D6|.8BC3          MOV EAX,EBX
   005708D8|.8B30          MOV ESI,DWORD PTR DS:
   005708DA|.FF56 0C       CALL DWORD PTR DS:
   005708DD|.8B45 D4       MOV EAX,DWORD PTR SS:         ;S3
   005708E0|.50            PUSH EAX
   005708E1|.8D4D D0       LEA ECX,DWORD PTR SS:
   005708E4|.BA 02000000   MOV EDX,2
   005708E9|.8BC3          MOV EAX,EBX
   005708EB|.8B18          MOV EBX,DWORD PTR DS:
   005708ED|.FF53 0C       CALL DWORD PTR DS:
   005708F0|.8B55 D0       MOV EDX,DWORD PTR SS:         ;S4
   005708F3|.8D45 F4       LEA EAX,DWORD PTR SS:
   005708F6|.59            POP ECX
   005708F7|.E8 4C3BE9FF   CALL ScreenRe.00404448
   005708FC|.8D55 F0       LEA EDX,DWORD PTR SS:
   005708FF|.8B45 F8       MOV EAX,DWORD PTR SS:          ;S1S2zhuoxin
   00570902|.E8 4DFDFFFF   CALL ScreenRe.00570654
   00570907|.8B45 F0       MOV EAX,DWORD PTR SS:         ;S1S2zhuoxin的标准MD5结果(大写),设为Z
   0057090A|.E8 ED3CE9FF   CALL ScreenRe.004045FC
   0057090F|.8BD0          MOV EDX,EAX                           ;Z
   00570911|.8D45 C8       LEA EAX,DWORD PTR SS:
   00570914|.E8 FF39E9FF   CALL ScreenRe.00404318
   00570919|.8B45 C8       MOV EAX,DWORD PTR SS:
   0057091C|.8D4D CC       LEA ECX,DWORD PTR SS:
   0057091F|.BA 0A000000   MOV EDX,0A                            ; 呵呵,注意这里的0A,记住它=10
   00570924|.E8 E322ECFF   CALL ScreenRe.00432C0C
   00570929|.8B45 CC       MOV EAX,DWORD PTR SS:         ;Z的前10位
   0057092C|.E8 CB3CE9FF   CALL ScreenRe.004045FC
   00570931|.50            PUSH EAX                              ;Z的前10位
   00570932|.8B45 F4       MOV EAX,DWORD PTR SS:          ;S3S4相连
   00570935|.E8 C23CE9FF   CALL ScreenRe.004045FC
   0057093A|.8BD0          MOV EDX,EAX                           ;S3S4相连
   0057093C|.58            POP EAX                               ;Z的前10位
   0057093D|.E8 8A89E9FF   CALL ScreenRe.004092CC                ;聪明的你一定猜出来程序准备干什么了!
   00570942|.85C0          TEST EAX,EAX                        ;EAX为0吗?
   00570944|.75 04         JNZ SHORT ScreenRe.0057094A         ;不为零则不是洗具了!呵呵
   00570946|.33DB          XOR EBX,EBX                           ;成功的钥匙!
   00570948|.EB 0C         JMP SHORT ScreenRe.00570956
   0057094A|>BB 01000000   MOV EBX,1                           ;EBX又被置1且EAX接着又被清零,哎!
   0057094F|.EB 05         JMP SHORT ScreenRe.00570956
   00570951|>BB 01000000   MOV EBX,1
   00570956|>33C0          XOR EAX,EAX
       省略部分代码
   0057096B|.E8 D437E9FF   CALL ScreenRe.00404144
   00570970\.C3            RETN
   00570971   .^ E9 0A31E9FF   JMP ScreenRe.00403A80
   00570976   .^ EB EB         JMP SHORT ScreenRe.00570963
   00570978   .8BC3          MOV EAX,EBX                           ;记得这里ebx的值吗,是不是个爆破点呢?哈哈
   0057097A   .5E            POP ESI
   0057097B   .5B            POP EBX
   0057097C   .8BE5          MOV ESP,EBP
   0057097E   .5D            POP EBP
   0057097F   .C3            RETN
00570A34|.48            DEC EAX                               ;EAX的值非常重要,更关键的是上面CALL中决定EAX的EBX哦!
00570A35|.75 2F         JNZ SHORT ScreenRe.00570A66         ;关键跳!
    省略部分代码
00570A5A|.BA A80A5700   MOV EDX,ScreenRe.00570AA8             ;   "Invalid Code",这不用我说吧
00570A5F|.E8 1037E9FF   CALL ScreenRe.00404174


小结:
1.根据005707CB处的CMP EAX,17,我们知道注册码长度要23位;
2.根据005707ED处的MOV AL,2D ,我们知道注册码可能含有“-”;
3.根据005707FB处的CMP EAX,4 ,我们知道注册码分为4部分;
4.根据4个CMP EAX,5 ,我们知道注册码的4部分应该为5位;


OK,算法总结:
--------------------------------------------------------------------------------------------
1.23位注册码由3个“-”把余下的20位平分为4部分,分设为S1、S2、S3、S4;
2.S1连S2再连固定字符串“zhuoxin”,取MD5值转大写,设为Z;
3.Z的1-5位=S3

Z的6-10位=S4
则软件注册成功!
---------------------------------------------------------------------------------------------
注册信息保存在:HKEY_CURRENT_USER\Software\***\ScreenRecorder下



附上简单的VB注册机源码:
Private Sub Command1_Click()
Dim Z, T As String
Randomize
S = Rnd(1)
T = MD5(Str(S))
Q = UCase(MD5(Mid(T, 1, 10) & "zhuoxin"))
Z = Mid(T, 1, 5) & "-" & Mid(T, 6, 5) & "-" & Mid(Q, 1, 5) & "-" & Mid(Q, 6, 5)
Text1.Text = Z
End Sub

Private Sub Command2_Click()
Unload Me
End Sub

                            敬请指正!




                                                 没优化,将就用呵呵!!!

=================================================================================================








一点题外话:


    关于注册码的格式,例如是判断注册码是不是4部分这些问题,其实大家只要改变下注册码的形式(比如加上或减去“-”)就能很直观的在005707FB处的CMP EAX,4这里知道输入的格式对不对了。因此,我们应该充分发挥“大胆假设,小心求证”的精神为指导,就能节约出许多时间和精力了!




    当然,如果你很想去看看,我也就顺便把初次OD时的注释贴上来,希望能对你有些帮助!


005707EF|.E8 D4FEFFFF   CALL ScreenRe.005706C8                ;这个CALL是得到假码被“-”分成几部分!
F7进入:
005706C8/$55            PUSH EBP
005706C9|.8BEC          MOV EBP,ESP
005706CB|.51            PUSH ECX
005706CC|.53            PUSH EBX
005706CD|.56            PUSH ESI
005706CE|.8BF1          MOV ESI,ECX
005706D0|.8955 FC       MOV DWORD PTR SS:,EDX          ;假码
005706D3|.8BD8          MOV EBX,EAX
005706D5|.8B45 FC       MOV EAX,DWORD PTR SS:          ;假码
005706D8|.E8 0F3FE9FF   CALL ScreenRe.004045EC
005706DD|.33C0          XOR EAX,EAX
005706DF|.55            PUSH EBP
005706E0|.68 33075700   PUSH ScreenRe.00570733
005706E5|.64:FF30       PUSH DWORD PTR FS:
005706E8|.64:8920       MOV DWORD PTR FS:,ESP
005706EB|.85F6          TEST ESI,ESI
005706ED|.75 14         JNZ SHORT ScreenRe.00570703
005706EF|.B9 34000000   MOV ECX,34
005706F4|.BA 48075700   MOV EDX,ScreenRe.00570748             ;ASCII "E:\VideoRecorder\ScreenRecorder_cn\Register.pas"
005706F9|.B8 80075700   MOV EAX,ScreenRe.00570780             ;ASCII "Assertion failure"
005706FE|.E8 7939E9FF   CALL ScreenRe.0040407C
00570703|>8BC6          MOV EAX,ESI
00570705|.8B10          MOV EDX,DWORD PTR DS:
00570707|.FF52 44       CALL DWORD PTR DS:
0057070A|.8BD3          MOV EDX,EBX
0057070C|.8BC6          MOV EAX,ESI
0057070E|.E8 C99EEAFF   CALL ScreenRe.0041A5DC
00570713|.8B55 FC       MOV EDX,DWORD PTR SS:          ;假码
00570716|.8BC6          MOV EAX,ESI
00570718|.E8 2F9DEAFF   CALL ScreenRe.0041A44C               ;这里再F7
0057071D|.33C0          XOR EAX,EAX
0057071F|.5A            POP EDX
00570720|.59            POP ECX
00570721|.59            POP ECX
00570722|.64:8910       MOV DWORD PTR FS:,EDX
00570725|.68 3A075700   PUSH ScreenRe.0057073A
0057072A|>8D45 FC       LEA EAX,DWORD PTR SS:
0057072D|.E8 EE39E9FF   CALL ScreenRe.00404120
00570732\.C3            RETN
00570733   .^ E9 4833E9FF   JMP ScreenRe.00403A80
00570738   .^ EB F0         JMP SHORT ScreenRe.0057072A


0570718|.E8 2F9DEAFF   CALL ScreenRe.0041A44C               ;这里再F7,我们接着进入
0041A44C/$55            PUSH EBP
0041A44D|.8BEC          MOV EBP,ESP
0041A44F|.83C4 F4       ADD ESP,-0C
0041A452|.53            PUSH EBX
0041A453|.56            PUSH ESI
0041A454|.57            PUSH EDI
0041A455|.33C9          XOR ECX,ECX
0041A457|.894D F4       MOV DWORD PTR SS:,ECX
0041A45A|.8BDA          MOV EBX,EDX                           ;假码1598753046abcdefghijklm
0041A45C|.8945 FC       MOV DWORD PTR SS:,EAX
0041A45F|.8D75 F8       LEA ESI,DWORD PTR SS:
0041A462|.33C0          XOR EAX,EAX
0041A464|.55            PUSH EBP
0041A465|.68 9BA54100   PUSH ScreenRe.0041A59B
0041A46A|.64:FF30       PUSH DWORD PTR FS:
0041A46D|.64:8920       MOV DWORD PTR FS:,ESP
0041A470|.8B45 FC       MOV EAX,DWORD PTR SS:
0041A473|.E8 64F2FFFF   CALL ScreenRe.004196DC
0041A478|.33C0          XOR EAX,EAX
0041A47A|.55            PUSH EBP
0041A47B|.68 7EA54100   PUSH ScreenRe.0041A57E
0041A480|.64:FF30       PUSH DWORD PTR FS:
0041A483|.64:8920       MOV DWORD PTR FS:,ESP
0041A486|.8B45 FC       MOV EAX,DWORD PTR SS:
0041A489|.8B10          MOV EDX,DWORD PTR DS:
0041A48B|.FF52 44       CALL DWORD PTR DS:
0041A48E|.8BC3          MOV EAX,EBX                           ;假码
0041A490|.E8 67A1FEFF   CALL ScreenRe.004045FC
0041A495|.8906          MOV DWORD PTR DS:,EAX            ;假码
0041A497|.EB 0A         JMP SHORT ScreenRe.0041A4A3
0041A499|>8B06          /MOV EAX,DWORD PTR DS:
0041A49B|.50            |PUSH EAX                           ; /pCurrentChar
0041A49C|.E8 B7C6FEFF   |CALL <JMP.&user32.CharNextA>         ; \CharNextA
0041A4A1|.8906          |MOV DWORD PTR DS:,EAX
0041A4A3|>8B06         MOV EAX,DWORD PTR DS:         ;假码
0041A4A5|.8A00          |MOV AL,BYTE PTR DS:             ;依次取假码ASC到AL
0041A4A7|.48            |DEC EAX                              ;asc - 1
0041A4A8|.2C 20         |SUB AL,20                            ;(asc - 1) - 20
0041A4AA|.^ 72 ED         \JB SHORT ScreenRe.0041A499
0041A4AC|.E9 AB000000   JMP ScreenRe.0041A55C
0041A4B1|>8B45 FC       /MOV EAX,DWORD PTR SS:
0041A4B4|.E8 0B010000   |CALL ScreenRe.0041A5C4
0041A4B9|.3AD8          |CMP BL,AL                            ;依次取的假码的ASC
0041A4BB|.75 16         |JNZ SHORT ScreenRe.0041A4D3
0041A4BD|.8B45 FC       |MOV EAX,DWORD PTR SS:
0041A4C0|.E8 FF000000   |CALL ScreenRe.0041A5C4
0041A4C5|.8BD0          |MOV EDX,EAX
0041A4C7|.8D4D F4       |LEA ECX,DWORD PTR SS:
0041A4CA|.8BC6          |MOV EAX,ESI
0041A4CC|.E8 6FE1FEFF   |CALL ScreenRe.00408640
0041A4D1|.EB 31         |JMP SHORT ScreenRe.0041A504
0041A4D3|>8B3E          |MOV EDI,DWORD PTR DS:         ;假码
0041A4D5|.EB 0A         |JMP SHORT ScreenRe.0041A4E1
0041A4D7|>8B06          |/MOV EAX,DWORD PTR DS:
0041A4D9|.50            ||PUSH EAX                            ; /pCurrentChar
0041A4DA|.E8 79C6FEFF   ||CALL <JMP.&user32.CharNextA>      ; \CharNextA
0041A4DF|.8906          ||MOV DWORD PTR DS:,EAX
0041A4E1|>8B06          | MOV EAX,DWORD PTR DS:          ;假码
0041A4E3|.8A18          ||MOV BL,BYTE PTR DS:            ;依次取假码ASC到AL
0041A4E5|.80FB 20       ||CMP BL,20                           ;是 20 吗?
0041A4E8|.76 0C         ||JBE SHORT ScreenRe.0041A4F6
0041A4EA|.8B45 FC       ||MOV EAX,DWORD PTR SS:
0041A4ED|.E8 BA000000   ||CALL ScreenRe.0041A5AC
0041A4F2|.3AD8          ||CMP BL,AL                           ;是“-”吗?
0041A4F4|.^ 75 E1         |\JNZ SHORT ScreenRe.0041A4D7         ;这个小循环是判断假码中的“-”
0041A4F6|>8B0E          |MOV ECX,DWORD PTR DS:
0041A4F8|.2BCF          |SUB ECX,EDI
0041A4FA|.8D45 F4       |LEA EAX,DWORD PTR SS:
0041A4FD|.8BD7          |MOV EDX,EDI                        
0041A4FF|.E8 0C9DFEFF   |CALL ScreenRe.00404210
0041A504|>8B55 F4       |MOV EDX,DWORD PTR SS:         ;假码中第一个“-”之前的部分(如果有“-”的话)
0041A507|.8B45 FC       |MOV EAX,DWORD PTR SS:
0041A50A|.8B08          |MOV ECX,DWORD PTR DS:
0041A50C|.FF51 38       |CALL DWORD PTR DS:
0041A50F|.EB 0A         |JMP SHORT ScreenRe.0041A51B
0041A511|>8B06          |/MOV EAX,DWORD PTR DS:
0041A513|.50            ||PUSH EAX                            ; /pCurrentChar
0041A514|.E8 3FC6FEFF   ||CALL <JMP.&user32.CharNextA>      ; \CharNextA
0041A519|.8906          ||MOV DWORD PTR DS:,EAX
0041A51B|>8B06          | MOV EAX,DWORD PTR DS:          ;假码第一个“-”(含)后面的部分
0041A51D|.8A00          ||MOV AL,BYTE PTR DS:
0041A51F|.48            ||DEC EAX
0041A520|.2C 20         ||SUB AL,20
0041A522|.^ 72 ED         |\JB SHORT ScreenRe.0041A511
0041A524|.8B45 FC       |MOV EAX,DWORD PTR SS:
0041A527|.E8 80000000   |CALL ScreenRe.0041A5AC
0041A52C|.8B16          |MOV EDX,DWORD PTR DS:         ;假码第一个“-”(含)后面的部分
0041A52E|.3A02          |CMP AL,BYTE PTR DS:             ;“-”:假码第一个“-”(含)后面的部分的第一位是“-“吗?
0041A530|.75 2A         |JNZ SHORT ScreenRe.0041A55C
0041A532|.8B3E          |MOV EDI,DWORD PTR DS:
0041A534|.57            |PUSH EDI                           ; /pCurrentChar
0041A535|.E8 1EC6FEFF   |CALL <JMP.&user32.CharNextA>         ; \CharNextA
0041A53A|.8038 00       |CMP BYTE PTR DS:,0            ;假码第一个“-”后面第一位假码为空吗?
0041A53D|.75 0A         |JNZ SHORT ScreenRe.0041A549
0041A53F|.33D2          |XOR EDX,EDX
0041A541|.8B45 FC       |MOV EAX,DWORD PTR SS:
0041A544|.8B08          |MOV ECX,DWORD PTR DS:
0041A546|.FF51 38       |CALL DWORD PTR DS:
0041A549|>8B06          |/MOV EAX,DWORD PTR DS:
0041A54B|.50            ||PUSH EAX                            ; /pCurrentChar
0041A54C|.E8 07C6FEFF   ||CALL <JMP.&user32.CharNextA>      ; \CharNextA
0041A551|.8906          ||MOV DWORD PTR DS:,EAX
0041A553|.8B06          ||MOV EAX,DWORD PTR DS:
0041A555|.8A00          ||MOV AL,BYTE PTR DS:
0041A557|.48            ||DEC EAX
0041A558|.2C 20         ||SUB AL,20
0041A55A|.^ 72 ED         |\JB SHORT ScreenRe.0041A549
0041A55C|>8B06         MOV EAX,DWORD PTR DS:         ;假码中”-“后面的部分
0041A55E|.8A18          |MOV BL,BYTE PTR DS:             ;依次取假码"-"后面部分的ASC到BL
0041A560|.84DB          |TEST BL,BL
0041A562|.^ 0F85 49FFFFFF \JNZ ScreenRe.0041A4B1
0041A568|.33C0          XOR EAX,EAX
0041A56A|.5A            POP EDX
0041A56B|.59            POP ECX
0041A56C|.59            POP ECX
0041A56D|.64:8910       MOV DWORD PTR FS:,EDX
0041A570|.68 85A54100   PUSH ScreenRe.0041A585
0041A575|>8B45 FC       MOV EAX,DWORD PTR SS:
0041A578|.E8 1BF2FFFF   CALL ScreenRe.00419798
0041A57D\.C3            RETN
0041A57E   .^ E9 FD94FEFF   JMP ScreenRe.00403A80
0041A583   .^ EB F0         JMP SHORT ScreenRe.0041A575
0041A585   .33C0          XOR EAX,EAX
省略部分代码
0041A5A4   .5B            POP EBX
0041A5A5   .8BE5          MOV ESP,EBP
0041A5A7   .5D            POP EBP
0041A5A8   .C3            RETN

飘云 发表于 2011-1-22 13:36:34

E:\VideoRecorder\ScreenRecorder_cn\Register.pas:loveliness:
delphi 程序啊

终于keygen了

GGLHY 发表于 2011-1-22 14:17:08

本帖最后由 GGLHY 于 2011-1-22 14:20 编辑

delphi 程序啊

终于keygen了
飘云 发表于 2011-1-22 13:36 https://www.chinapyg.com/images/common/back.gif


    呵呵!会简单的,先慢慢开始....

sdnyzjzx 发表于 2011-1-22 19:51:10

功夫了得,哪天也能看懂汇编有楼主这水平就好了。

月之精灵 发表于 2011-1-23 11:15:33

好,学习下。

whypro 发表于 2011-1-25 19:46:11

太牛了,膜拜!

tianxj 发表于 2011-1-26 07:19:27

学习下...

xie83544109 发表于 2011-1-26 14:09:03

/:good
精品来的,太给力了

foxjinlin 发表于 2011-1-27 15:06:27

学习了

支持原创破文

A.K.I 发表于 2011-3-14 14:30:31

GG出品,,要顶
页: [1] 2
查看完整版本: 简单任务之某视频录制软件的算法分析