-
-
请求前辈指点迷津
-
发表于: 2004-10-2 15:50 4216
-
我是一名初学者,在分析fineprint的算法时,对其算法百思不得其解,请前辈指点。
我的分析过程:
FinePrint 2000 version 5.27
cracker:essorg
tools:trw2000pll跟踪,U功能截码
level:0
017F:2A06C03C 55 PUSH EBP
017F:2A06C03D 8BEC MOV EBP,ESP
017F:2A06C03F 83EC10 SUB ESP,BYTE +10
017F:2A06C042 894DF4 MOV [EBP-0C],ECX
017F:2A06C045 8B4508 MOV EAX,[EBP+08]
017F:2A06C048 50 PUSH EAX
017F:2A06C049 E8A2090200 CALL 2A08C9F0 〈----求输入注册码长度
017F:2A06C04E 83C404 ADD ESP,BYTE +04
017F:2A06C051 83F80E CMP EAX,BYTE +0E 〈----注册码长度=14?
017F:2A06C054 7407 JZ 2A06C05D
017F:2A06C056 33C0 XOR EAX,EAX
017F:2A06C058 E9AB000000 JMP 2A06C108
017F:2A06C05D C745FC00000000 MOV DWORD [EBP-04],00
017F:2A06C064 EB09 JMP SHORT 2A06C06F
017F:2A06C066 8B4DFC MOV ECX,[EBP-04] 〈----
017F:2A06C069 83C101 ADD ECX,BYTE +01 〈----注册码段数统计
017F:2A06C06C 894DFC MOV [EBP-04],ECX 〈----共3段
017F:2A06C06F 837DFC03 CMP DWORD [EBP-04],BYTE +03 〈----
017F:2A06C073 0F8D83000000 JNL NEAR 2A06C0FC
017F:2A06C079 C745F800000000 MOV DWORD [EBP-08],00
017F:2A06C080 EB09 JMP SHORT 2A06C08B
017F:2A06C082 8B55F8 MOV EDX,[EBP-08] 〈----
017F:2A06C085 83C201 ADD EDX,BYTE +01 〈----每段字符数统计
017F:2A06C088 8955F8 MOV [EBP-08],EDX 〈----4字符为一段
017F:2A06C08B 837DF804 CMP DWORD [EBP-08],BYTE +04 〈----
017F:2A06C08F 7D48 JNL 2A06C0D9
017F:2A06C091 8B4508 MOV EAX,[EBP+08] 〈----
017F:2A06C094 8A08 MOV CL,[EAX] 〈----
017F:2A06C096 884DF3 MOV [EBP-0D],CL 〈----
017F:2A06C099 8A55F3 MOV DL,[EBP-0D] 〈----取一位注册码
017F:2A06C09C 52 PUSH EDX 〈----用于计算在计算尺
017F:2A06C09D 8B4508 MOV EAX,[EBP+08] 〈----中的序号,并将剩余
017F:2A06C0A0 83C001 ADD EAX,BYTE +01 〈----注册码前移一位
017F:2A06C0A3 894508 MOV [EBP+08],EAX 〈----
017F:2A06C0A6 E87D030000 CALL 2A06C428 〈----以标尺转换输入注册码对应序列
017F:2A06C0AB 8B4DFC MOV ECX,[EBP-04] 〈----
017F:2A06C0AE 8B55F4 MOV EDX,[EBP-0C] 〈----
017F:2A06C0B1 8D0C8A LEA ECX,[EDX+ECX*4] 〈----
017F:2A06C0B4 8B55F8 MOV EDX,[EBP-08] 〈----计算出序列号
017F:2A06C0B7 880411 MOV [ECX+EDX],AL 〈----放入预定位置
017F:2A06C0BA 8B45FC MOV EAX,[EBP-04] 〈----
017F:2A06C0BD 8B4DF4 MOV ECX,[EBP-0C] 〈----
017F:2A06C0C0 8D1481 LEA EDX,[ECX+EAX*4] 〈----
017F:2A06C0C3 8B45F8 MOV EAX,[EBP-08]
017F:2A06C0C6 33C9 XOR ECX,ECX
017F:2A06C0C8 8A0C02 MOV CL,[EDX+EAX]
017F:2A06C0CB 81F9FF000000 CMP ECX,FF
017F:2A06C0D1 7504 JNZ 2A06C0D7
017F:2A06C0D3 33C0 XOR EAX,EAX
017F:2A06C0D5 EB31 JMP SHORT 2A06C108
017F:2A06C0D7 EBA9 JMP SHORT 2A06C082
017F:2A06C0D9 837DFC01 CMP DWORD [EBP-04],BYTE +01
017F:2A06C0DD 7F18 JG 2A06C0F7
017F:2A06C0DF 8B5508 MOV EDX,[EBP+08] 〈----
017F:2A06C0E2 0FBE02 MOVSX EAX,BYTE [EDX] 〈----
017F:2A06C0E5 8B4D08 MOV ECX,[EBP+08] 〈----将输入注册码
017F:2A06C0E8 83C101 ADD ECX,BYTE +01 〈----中间隔符去除
017F:2A06C0EB 894D08 MOV [EBP+08],ECX 〈----
017F:2A06C0EE 83F82D CMP EAX,BYTE +2D 〈----字符为“-”
017F:2A06C0F1 7404 JZ 2A06C0F7
017F:2A06C0F3 33C0 XOR EAX,EAX
017F:2A06C0F5 EB11 JMP SHORT 2A06C108
017F:2A06C0F7 E96AFFFFFF JMP 2A06C066 〈----继续
017F:2A06C0FC 8B550C MOV EDX,[EBP+0C] 〈----参数1:50
017F:2A06C0FF 52 PUSH EDX
017F:2A06C100 8B4DF4 MOV ECX,[EBP-0C] 〈----参数2:转换后序列号地址
017F:2A06C103 E806000000 CALL 2A06C10E 〈----比对核心
017F:2A06C108 8BE5 MOV ESP,EBP
017F:2A06C10A 5D POP EBP
017F:2A06C10B C20800 RET 08
******************************************************************************************
017F:2A06C10E 55 PUSH EBP
017F:2A06C10F 8BEC MOV EBP,ESP
017F:2A06C111 83EC10 SUB ESP,BYTE +10
017F:2A06C114 56 PUSH ESI
017F:2A06C115 894DF8 MOV [EBP-08],ECX
017F:2A06C118 C745FC00000000 MOV DWORD [EBP-04],00
017F:2A06C11F 8B45F8 MOV EAX,[EBP-08]
017F:2A06C122 83780C00 CMP DWORD [EAX+0C],BYTE +00
017F:2A06C126 0F848E000000 JZ NEAR 2A06C1BA
017F:2A06C12C 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C12F 8B11 MOV EDX,[ECX]
017F:2A06C131 52 PUSH EDX
017F:2A06C132 6A00 PUSH BYTE +00
017F:2A06C134 68F0FF0000 PUSH DWORD FFF0
017F:2A06C139 8B45F8 MOV EAX,[EBP-08]
017F:2A06C13C 8B480C MOV ECX,[EAX+0C]
017F:2A06C13F 51 PUSH ECX
017F:2A06C140 FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C146 85C0 TEST EAX,EAX
017F:2A06C148 7507 JNZ 2A06C151
017F:2A06C14A 33C0 XOR EAX,EAX
017F:2A06C14C E9D0020000 JMP 2A06C421
017F:2A06C151 8B55F8 MOV EDX,[EBP-08]
017F:2A06C154 8B4204 MOV EAX,[EDX+04]
017F:2A06C157 50 PUSH EAX
017F:2A06C158 6A00 PUSH BYTE +00
017F:2A06C15A 68F1FF0000 PUSH DWORD FFF1
017F:2A06C15F 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C162 8B510C MOV EDX,[ECX+0C]
017F:2A06C165 52 PUSH EDX
017F:2A06C166 FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C16C 85C0 TEST EAX,EAX
017F:2A06C16E 7507 JNZ 2A06C177
017F:2A06C170 33C0 XOR EAX,EAX
017F:2A06C172 E9AA020000 JMP 2A06C421
017F:2A06C177 8B45F8 MOV EAX,[EBP-08]
017F:2A06C17A 8B4808 MOV ECX,[EAX+08]
017F:2A06C17D 51 PUSH ECX
017F:2A06C17E 6A00 PUSH BYTE +00
017F:2A06C180 68F2FF0000 PUSH DWORD FFF2
017F:2A06C185 8B55F8 MOV EDX,[EBP-08]
017F:2A06C188 8B420C MOV EAX,[EDX+0C]
017F:2A06C18B 50 PUSH EAX
017F:2A06C18C FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C192 85C0 TEST EAX,EAX
017F:2A06C194 7507 JNZ 2A06C19D
017F:2A06C196 33C0 XOR EAX,EAX
017F:2A06C198 E984020000 JMP 2A06C421
017F:2A06C19D 8B4D08 MOV ECX,[EBP+08]
017F:2A06C1A0 51 PUSH ECX
017F:2A06C1A1 6A00 PUSH BYTE +00
017F:2A06C1A3 68F3FF0000 PUSH DWORD FFF3
017F:2A06C1A8 8B55F8 MOV EDX,[EBP-08]
017F:2A06C1AB 8B420C MOV EAX,[EDX+0C]
017F:2A06C1AE 50 PUSH EAX
017F:2A06C1AF FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C1B5 E967020000 JMP 2A06C421
017F:2A06C1BA 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C1BD E82EF8FFFF CALL 2A06B9F0 〈----
017F:2A06C1C2 8BF0 MOV ESI,EAX 〈----
017F:2A06C1C4 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C1C7 83C104 ADD ECX,BYTE +04 〈----
017F:2A06C1CA E821F8FFFF CALL 2A06B9F0 〈----判断输入注册码
017F:2A06C1CF 03F0 ADD ESI,EAX 〈----中只有一段中有
017F:2A06C1D1 8B4DF8 MOV ECX,[EBP-08] 〈----两位相同,否则
017F:2A06C1D4 83C108 ADD ECX,BYTE +08 〈----退出本段程序。
017F:2A06C1D7 E814F8FFFF CALL 2A06B9F0 〈----
017F:2A06C1DC 03F0 ADD ESI,EAX 〈----
017F:2A06C1DE 83FE01 CMP ESI,BYTE +01 〈----
017F:2A06C1E1 7407 JZ 2A06C1EA 〈----
017F:2A06C1E3 33C0 XOR EAX,EAX
017F:2A06C1E5 E937020000 JMP 2A06C421
017F:2A06C1EA 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C1ED E8FEF7FFFF CALL 2A06B9F0 .
017F:2A06C1F2 85C0 TEST EAX,EAX .
017F:2A06C1F4 7407 JZ 2A06C1FD .
017F:2A06C1F6 C745FC00000000 MOV DWORD [EBP-04],00 〈----
017F:2A06C1FD 8B4DF8 MOV ECX,[EBP-08] .
017F:2A06C200 83C104 ADD ECX,BYTE +04 .
017F:2A06C203 E8E8F7FFFF CALL 2A06B9F0 . 判断是哪一段
017F:2A06C208 85C0 TEST EAX,EAX . 具有相同字符
017F:2A06C20A 7407 JZ 2A06C213 .
017F:2A06C20C C745FC01000000 MOV DWORD [EBP-04],01 〈----
017F:2A06C213 8B4DF8 MOV ECX,[EBP-08] .
017F:2A06C216 83C108 ADD ECX,BYTE +08 .
017F:2A06C219 E8D2F7FFFF CALL 2A06B9F0 .
017F:2A06C21E 85C0 TEST EAX,EAX .
017F:2A06C220 7407 JZ 2A06C229 .
017F:2A06C222 C745FC02000000 MOV DWORD [EBP-04],02 〈----
017F:2A06C229 837D0800 CMP DWORD [EBP+08],BYTE +00
017F:2A06C22D 7513 JNZ 2A06C242
017F:2A06C22F 8B4DFC MOV ECX,[EBP-04]
017F:2A06C232 8B55F8 MOV EDX,[EBP-08]
017F:2A06C235 8D0C8A LEA ECX,[EDX+ECX*4]
017F:2A06C238 E8830C0000 CALL 2A06CEC0
017F:2A06C23D 894508 MOV [EBP+08],EAX
017F:2A06C240 EB1A JMP SHORT 2A06C25C
017F:2A06C242 8B45FC MOV EAX,[EBP-04]
017F:2A06C245 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C248 8D0C81 LEA ECX,[ECX+EAX*4]
017F:2A06C24B E8700C0000 CALL 2A06CEC0 〈----具有相同字符的段的序列值之和
017F:2A06C250 3B4508 CMP EAX,[EBP+08] 〈----与[EBP+08]的值比较
017F:2A06C253 7407 JZ 2A06C25C
017F:2A06C255 33C0 XOR EAX,EAX
017F:2A06C257 E9C5010000 JMP 2A06C421
017F:2A06C25C 8B5508 MOV EDX,[EBP+08]
017F:2A06C25F 8955F4 MOV [EBP-0C],EDX
017F:2A06C262 837DF460 CMP DWORD [EBP-0C],BYTE +60 〈----[EBP+08]的值与+60比较
017F:2A06C266 740F JZ 2A06C277
017F:2A06C268 837DF461 CMP DWORD [EBP-0C],BYTE +61 〈----[EBP+08]的值与+61比较
017F:2A06C26C 0F84CF000000 JZ NEAR 2A06C341
017F:2A06C272 E93F010000 JMP 2A06C3B6 〈----接着判断3段注册码不相同
017F:2A06C277 8B45FC MOV EAX,[EBP-04] 〈----
017F:2A06C27A 83C001 ADD EAX,BYTE +01 〈----
017F:2A06C27D 99 CDQ 〈----
017F:2A06C27E B903000000 MOV ECX,03 〈----取不含相同字符的注册码段1
017F:2A06C283 F7F9 IDIV ECX 〈----
017F:2A06C285 8B45F8 MOV EAX,[EBP-08] 〈----
017F:2A06C288 8B0490 MOV EAX,[EAX+EDX*4] 〈----
017F:2A06C28B 33D2 XOR EDX,EDX
017F:2A06C28D B903000000 MOV ECX,03 〈----
017F:2A06C292 F7F1 DIV ECX 〈----该段能被3整除
017F:2A06C294 85D2 TEST EDX,EDX 〈----
017F:2A06C296 7407 JZ 2A06C29F 〈----
017F:2A06C298 33C0 XOR EAX,EAX
017F:2A06C29A E982010000 JMP 2A06C421
017F:2A06C29F 8B45FC MOV EAX,[EBP-04] 〈----
017F:2A06C2A2 83C002 ADD EAX,BYTE +02 〈----
017F:2A06C2A5 99 CDQ 〈----
017F:2A06C2A6 B903000000 MOV ECX,03 〈----取不含相同字符的注册码段2
017F:2A06C2AB F7F9 IDIV ECX 〈----
017F:2A06C2AD 8B45F8 MOV EAX,[EBP-08] 〈----
017F:2A06C2B0 8B0490 MOV EAX,[EAX+EDX*4] 〈----
017F:2A06C2B3 33D2 XOR EDX,EDX
017F:2A06C2B5 B903000000 MOV ECX,03 〈----
017F:2A06C2BA F7F1 DIV ECX 〈----该段能被3整除
017F:2A06C2BC 85D2 TEST EDX,EDX 〈----
017F:2A06C2BE 7407 JZ 2A06C2C7 〈----
017F:2A06C2C0 33C0 XOR EAX,EAX
017F:2A06C2C2 E95A010000 JMP 2A06C421
017F:2A06C2C7 8B45FC MOV EAX,[EBP-04]
017F:2A06C2CA 83C001 ADD EAX,BYTE +01
017F:2A06C2CD 99 CDQ
017F:2A06C2CE B903000000 MOV ECX,03
017F:2A06C2D3 F7F9 IDIV ECX
017F:2A06C2D5 8B45F8 MOV EAX,[EBP-08]
017F:2A06C2D8 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C2DB 33D2 XOR EDX,EDX
017F:2A06C2DD B905000000 MOV ECX,05 〈----
017F:2A06C2E2 F7F1 DIV ECX 〈----不含相同字符的注册码段1
017F:2A06C2E4 85D2 TEST EDX,EDX 〈----能被5整除
017F:2A06C2E6 7407 JZ 2A06C2EF 〈----
017F:2A06C2E8 33C0 XOR EAX,EAX
017F:2A06C2EA E932010000 JMP 2A06C421
017F:2A06C2EF 8B45FC MOV EAX,[EBP-04]
017F:2A06C2F2 83C002 ADD EAX,BYTE +02
017F:2A06C2F5 99 CDQ
017F:2A06C2F6 B903000000 MOV ECX,03
017F:2A06C2FB F7F9 IDIV ECX
017F:2A06C2FD 8B45F8 MOV EAX,[EBP-08]
017F:2A06C300 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C303 33D2 XOR EDX,EDX
017F:2A06C305 B905000000 MOV ECX,05 〈----
017F:2A06C30A F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C30C 85D2 TEST EDX,EDX 〈----能被5整除
017F:2A06C30E 7407 JZ 2A06C317 〈----
017F:2A06C310 33C0 XOR EAX,EAX
017F:2A06C312 E90A010000 JMP 2A06C421
017F:2A06C317 8B45FC MOV EAX,[EBP-04]
017F:2A06C31A 83C002 ADD EAX,BYTE +02
017F:2A06C31D 99 CDQ
017F:2A06C31E B903000000 MOV ECX,03
017F:2A06C323 F7F9 IDIV ECX
017F:2A06C325 8B45F8 MOV EAX,[EBP-08]
017F:2A06C328 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C32B 33D2 XOR EDX,EDX
017F:2A06C32D B90B000000 MOV ECX,0B 〈----
017F:2A06C332 F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C334 85D2 TEST EDX,EDX 〈----能被B整除
017F:2A06C336 7407 JZ 2A06C33F 〈----
017F:2A06C338 33C0 XOR EAX,EAX
017F:2A06C33A E9E2000000 JMP 2A06C421
017F:2A06C33F EB75 JMP SHORT 2A06C3B6
017F:2A06C341 8B45FC MOV EAX,[EBP-04]
017F:2A06C344 83C001 ADD EAX,BYTE +01
017F:2A06C347 99 CDQ
017F:2A06C348 B903000000 MOV ECX,03
017F:2A06C34D F7F9 IDIV ECX
017F:2A06C34F 8B45F8 MOV EAX,[EBP-08]
017F:2A06C352 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C355 33D2 XOR EDX,EDX
017F:2A06C357 B903000000 MOV ECX,03 〈----
017F:2A06C35C F7F1 DIV ECX 〈----不含相同字符的注册码段1
017F:2A06C35E 85D2 TEST EDX,EDX 〈----能被3整除
017F:2A06C360 7407 JZ 2A06C369 〈----
017F:2A06C362 33C0 XOR EAX,EAX
017F:2A06C364 E9B8000000 JMP 2A06C421
017F:2A06C369 8B45FC MOV EAX,[EBP-04]
017F:2A06C36C 83C002 ADD EAX,BYTE +02
017F:2A06C36F 99 CDQ
017F:2A06C370 B903000000 MOV ECX,03
017F:2A06C375 F7F9 IDIV ECX
017F:2A06C377 8B45F8 MOV EAX,[EBP-08]
017F:2A06C37A 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C37D 33D2 XOR EDX,EDX
017F:2A06C37F B903000000 MOV ECX,03 〈----
017F:2A06C384 F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C386 85D2 TEST EDX,EDX 〈----能被3整除
017F:2A06C388 7407 JZ 2A06C391 〈----
017F:2A06C38A 33C0 XOR EAX,EAX
017F:2A06C38C E990000000 JMP 2A06C421
017F:2A06C391 8B45FC MOV EAX,[EBP-04]
017F:2A06C394 83C002 ADD EAX,BYTE +02
017F:2A06C397 99 CDQ
017F:2A06C398 B903000000 MOV ECX,03
017F:2A06C39D F7F9 IDIV ECX
017F:2A06C39F 8B45F8 MOV EAX,[EBP-08]
017F:2A06C3A2 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C3A5 33D2 XOR EDX,EDX
017F:2A06C3A7 B90B000000 MOV ECX,0B 〈----
017F:2A06C3AC F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C3AE 85D2 TEST EDX,EDX 〈----能被B整除
017F:2A06C3B0 7404 JZ 2A06C3B6 〈----
017F:2A06C3B2 33C0 XOR EAX,EAX
017F:2A06C3B4 EB6B JMP SHORT 2A06C421
017F:2A06C3B6 8B5508 MOV EDX,[EBP+08]
017F:2A06C3B9 8955F0 MOV [EBP-10],EDX
017F:2A06C3BC 837DF060 CMP DWORD [EBP-10],BYTE +60 〈----小于+60跳
017F:2A06C3C0 720A JC 2A06C3CC
017F:2A06C3C2 837DF061 CMP DWORD [EBP-10],BYTE +61
017F:2A06C3C6 7602 JNA 2A06C3CA 〈----不高于+61跳
017F:2A06C3C8 EB02 JMP SHORT 2A06C3CC
017F:2A06C3CA EB52 JMP SHORT 2A06C41E
017F:2A06C3CC 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C3CF E83C4EF9FF CALL 2A001210 〈----
017F:2A06C3D4 8BF0 MOV ESI,EAX 〈----
017F:2A06C3D6 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C3D9 83C104 ADD ECX,BYTE +04 〈----
017F:2A06C3DC E82F4EF9FF CALL 2A001210 〈----注
017F:2A06C3E1 3BF0 CMP ESI,EAX 〈----
017F:2A06C3E3 7435 JZ 2A06C41A 〈----册
017F:2A06C3E5 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C3E8 E8234EF9FF CALL 2A001210 〈----码
017F:2A06C3ED 8BF0 MOV ESI,EAX 〈----
017F:2A06C3EF 8B4DF8 MOV ECX,[EBP-08] 〈----3
017F:2A06C3F2 83C108 ADD ECX,BYTE +08 〈----
017F:2A06C3F5 E8164EF9FF CALL 2A001210 〈----段
017F:2A06C3FA 3BF0 CMP ESI,EAX 〈----
017F:2A06C3FC 741C JZ 2A06C41A 〈----均
017F:2A06C3FE 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C401 83C104 ADD ECX,BYTE +04 〈----不
017F:2A06C404 E8074EF9FF CALL 2A001210 〈----
017F:2A06C409 8BF0 MOV ESI,EAX 〈----同
017F:2A06C40B 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C40E 83C108 ADD ECX,BYTE +08 〈----
017F:2A06C411 E8FA4DF9FF CALL 2A001210 〈----
017F:2A06C416 3BF0 CMP ESI,EAX 〈----
017F:2A06C418 7504 JNZ 2A06C41E 〈----
017F:2A06C41A 33C0 XOR EAX,EAX
017F:2A06C41C EB03 JMP SHORT 2A06C421
017F:2A06C41E 8B4508 MOV EAX,[EBP+08]
017F:2A06C421 5E POP ESI
017F:2A06C422 8BE5 MOV ESP,EBP
017F:2A06C424 5D POP EBP
017F:2A06C425 C20400 RET 04
问题是何处调用了本段程序,[EBP+08]的值在何处确定?
继续追踪到主程序:
017F:2A06CE3A 55 PUSH EBP
017F:2A06CE3B 8BEC MOV EBP,ESP
017F:2A06CE3D 51 PUSH ECX
017F:2A06CE3E C745FC50000000 MOV DWORD [EBP-04],50
017F:2A06CE45 EB09 JMP SHORT 2A06CE50
017F:2A06CE47 8B45FC MOV EAX,[EBP-04]
017F:2A06CE4A 83C001 ADD EAX,BYTE +01
017F:2A06CE4D 8945FC MOV [EBP-04],EAX
017F:2A06CE50 837DFC5D CMP DWORD [EBP-04],BYTE +5D
017F:2A06CE54 7723 JA 2A06CE79
017F:2A06CE56 8B0D886C0D2A MOV ECX,[2A0D6C88] 〈----30000000
017F:2A06CE5C 51 PUSH ECX
017F:2A06CE5D 8B550C MOV EDX,[EBP+0C] 〈----输入用户名地址
017F:2A06CE60 52 PUSH EDX
017F:2A06CE61 8B4508 MOV EAX,[EBP+08] 〈----输入注册码地址
017F:2A06CE64 50 PUSH EAX
017F:2A06CE65 8B4DFC MOV ECX,[EBP-04] 〈----50
017F:2A06CE68 51 PUSH ECX
017F:2A06CE69 E81AF6FFFF CALL 2A06C488 〈----CALL 2A06C03C
017F:2A06CE6E 85C0 TEST EAX,EAX
017F:2A06CE70 7405 JZ 2A06CE77
017F:2A06CE72 8B45FC MOV EAX,[EBP-04]
017F:2A06CE75 EB04 JMP SHORT 2A06CE7B
017F:2A06CE77 EBCE JMP SHORT 2A06CE47
017F:2A06CE79 33C0 XOR EAX,EAX
017F:2A06CE7B 8BE5 MOV ESP,EBP
017F:2A06CE7D 5D POP EBP
017F:2A06CE7E C20800 RET 08
===============================================================
017F:2A06C488 55 PUSH EBP
017F:2A06C489 8BEC MOV EBP,ESP
017F:2A06C48B 6AFF PUSH BYTE -01
017F:2A06C48D 688F000B2A PUSH DWORD 2A0B008F
017F:2A06C492 64A100000000 MOV EAX,`DOSMGR_BackFill_Allowed`
017F:2A06C498 50 PUSH EAX
017F:2A06C499 64892500000000 MOV `DOSMGR_BackFill_Allowed`,ESP
017F:2A06C4A0 83EC20 SUB ESP,BYTE +20
017F:2A06C4A3 8B4514 MOV EAX,[EBP+14]
017F:2A06C4A6 50 PUSH EAX
017F:2A06C4A7 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4AA E870FAFFFF CALL 2A06BF1F
017F:2A06C4AF C745FC00000000 MOV DWORD [EBP-04],00
017F:2A06C4B6 837D1000 CMP DWORD [EBP+10],BYTE +00
017F:2A06C4BA 751B JNZ 2A06C4D7
017F:2A06C4BC C745D800000000 MOV DWORD [EBP-28],00
017F:2A06C4C3 C745FCFFFFFFFF MOV DWORD [EBP-04],FFFFFFFF
017F:2A06C4CA 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4CD E81CFBFFFF CALL 2A06BFEE
017F:2A06C4D2 8B45D8 MOV EAX,[EBP-28]
017F:2A06C4D5 EB2B JMP SHORT 2A06C502
017F:2A06C4D7 8B4D08 MOV ECX,[EBP+08]
017F:2A06C4DA 51 PUSH ECX
017F:2A06C4DB 8B5510 MOV EDX,[EBP+10]
017F:2A06C4DE 52 PUSH EDX
017F:2A06C4DF 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4E2 E855FBFFFF CALL 2A06C03C
017F:2A06C4E7 8945DC MOV [EBP-24],EAX
017F:2A06C4EA 8B45DC MOV EAX,[EBP-24]
017F:2A06C4ED 8945D4 MOV [EBP-2C],EAX
017F:2A06C4F0 C745FCFFFFFFFF MOV DWORD [EBP-04],FFFFFFFF
017F:2A06C4F7 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4FA E8EFFAFFFF CALL 2A06BFEE
017F:2A06C4FF 8B45D4 MOV EAX,[EBP-2C]
017F:2A06C502 8B4DF4 MOV ECX,[EBP-0C]
017F:2A06C505 64890D00000000 MOV `DOSMGR_BackFill_Allowed`,ECX
017F:2A06C50C 8BE5 MOV ESP,EBP
017F:2A06C50E 5D POP EBP
017F:2A06C50F C21000 RET 10
===============================================================
2A0D01A8:
5 W B 9 F R K 4 V T P 3 C Q 6 A
S N 8 H X 2 J M U Z Y L E D G 7
总结:
以上程序提供了注册码的长度为14为,4位一段,共3段,中间以符号"-"连接;在
CALL 2A06C428 处跟入,发现程序以地址 2A0D01A8 处字符串作为计算尺,查询
输入注册码字符在计算尺中的序号,即将X1X2X3X4-X5X6X7X8-X9X10X11X12转换
为Y1Y2Y3Y4Y5Y6Y7Y8Y9Y10Y11Y12,然后判断Y1-Y12中只能且必须有两个序号在
同一段相同,接着判断该段序号值相加结果与[EBP+08]中的值比较,若相等则根据
[EBP+08]中的值进行程序分支判断,最后还判断3段各不相同。
使用粘贴:DRDN-A6W5-JS4P
[EBP+08]=50,最后程序出现如下提示:
“你输入了前版的FinePrint 的注册码。要以折扣价升级到当前的版本,请按下在线
更新按钮。”
另分支:+60,+61
可是根据程序中设置的初始值50,是没法转向其它分支的?
我的分析过程:
FinePrint 2000 version 5.27
cracker:essorg
tools:trw2000pll跟踪,U功能截码
level:0
017F:2A06C03C 55 PUSH EBP
017F:2A06C03D 8BEC MOV EBP,ESP
017F:2A06C03F 83EC10 SUB ESP,BYTE +10
017F:2A06C042 894DF4 MOV [EBP-0C],ECX
017F:2A06C045 8B4508 MOV EAX,[EBP+08]
017F:2A06C048 50 PUSH EAX
017F:2A06C049 E8A2090200 CALL 2A08C9F0 〈----求输入注册码长度
017F:2A06C04E 83C404 ADD ESP,BYTE +04
017F:2A06C051 83F80E CMP EAX,BYTE +0E 〈----注册码长度=14?
017F:2A06C054 7407 JZ 2A06C05D
017F:2A06C056 33C0 XOR EAX,EAX
017F:2A06C058 E9AB000000 JMP 2A06C108
017F:2A06C05D C745FC00000000 MOV DWORD [EBP-04],00
017F:2A06C064 EB09 JMP SHORT 2A06C06F
017F:2A06C066 8B4DFC MOV ECX,[EBP-04] 〈----
017F:2A06C069 83C101 ADD ECX,BYTE +01 〈----注册码段数统计
017F:2A06C06C 894DFC MOV [EBP-04],ECX 〈----共3段
017F:2A06C06F 837DFC03 CMP DWORD [EBP-04],BYTE +03 〈----
017F:2A06C073 0F8D83000000 JNL NEAR 2A06C0FC
017F:2A06C079 C745F800000000 MOV DWORD [EBP-08],00
017F:2A06C080 EB09 JMP SHORT 2A06C08B
017F:2A06C082 8B55F8 MOV EDX,[EBP-08] 〈----
017F:2A06C085 83C201 ADD EDX,BYTE +01 〈----每段字符数统计
017F:2A06C088 8955F8 MOV [EBP-08],EDX 〈----4字符为一段
017F:2A06C08B 837DF804 CMP DWORD [EBP-08],BYTE +04 〈----
017F:2A06C08F 7D48 JNL 2A06C0D9
017F:2A06C091 8B4508 MOV EAX,[EBP+08] 〈----
017F:2A06C094 8A08 MOV CL,[EAX] 〈----
017F:2A06C096 884DF3 MOV [EBP-0D],CL 〈----
017F:2A06C099 8A55F3 MOV DL,[EBP-0D] 〈----取一位注册码
017F:2A06C09C 52 PUSH EDX 〈----用于计算在计算尺
017F:2A06C09D 8B4508 MOV EAX,[EBP+08] 〈----中的序号,并将剩余
017F:2A06C0A0 83C001 ADD EAX,BYTE +01 〈----注册码前移一位
017F:2A06C0A3 894508 MOV [EBP+08],EAX 〈----
017F:2A06C0A6 E87D030000 CALL 2A06C428 〈----以标尺转换输入注册码对应序列
017F:2A06C0AB 8B4DFC MOV ECX,[EBP-04] 〈----
017F:2A06C0AE 8B55F4 MOV EDX,[EBP-0C] 〈----
017F:2A06C0B1 8D0C8A LEA ECX,[EDX+ECX*4] 〈----
017F:2A06C0B4 8B55F8 MOV EDX,[EBP-08] 〈----计算出序列号
017F:2A06C0B7 880411 MOV [ECX+EDX],AL 〈----放入预定位置
017F:2A06C0BA 8B45FC MOV EAX,[EBP-04] 〈----
017F:2A06C0BD 8B4DF4 MOV ECX,[EBP-0C] 〈----
017F:2A06C0C0 8D1481 LEA EDX,[ECX+EAX*4] 〈----
017F:2A06C0C3 8B45F8 MOV EAX,[EBP-08]
017F:2A06C0C6 33C9 XOR ECX,ECX
017F:2A06C0C8 8A0C02 MOV CL,[EDX+EAX]
017F:2A06C0CB 81F9FF000000 CMP ECX,FF
017F:2A06C0D1 7504 JNZ 2A06C0D7
017F:2A06C0D3 33C0 XOR EAX,EAX
017F:2A06C0D5 EB31 JMP SHORT 2A06C108
017F:2A06C0D7 EBA9 JMP SHORT 2A06C082
017F:2A06C0D9 837DFC01 CMP DWORD [EBP-04],BYTE +01
017F:2A06C0DD 7F18 JG 2A06C0F7
017F:2A06C0DF 8B5508 MOV EDX,[EBP+08] 〈----
017F:2A06C0E2 0FBE02 MOVSX EAX,BYTE [EDX] 〈----
017F:2A06C0E5 8B4D08 MOV ECX,[EBP+08] 〈----将输入注册码
017F:2A06C0E8 83C101 ADD ECX,BYTE +01 〈----中间隔符去除
017F:2A06C0EB 894D08 MOV [EBP+08],ECX 〈----
017F:2A06C0EE 83F82D CMP EAX,BYTE +2D 〈----字符为“-”
017F:2A06C0F1 7404 JZ 2A06C0F7
017F:2A06C0F3 33C0 XOR EAX,EAX
017F:2A06C0F5 EB11 JMP SHORT 2A06C108
017F:2A06C0F7 E96AFFFFFF JMP 2A06C066 〈----继续
017F:2A06C0FC 8B550C MOV EDX,[EBP+0C] 〈----参数1:50
017F:2A06C0FF 52 PUSH EDX
017F:2A06C100 8B4DF4 MOV ECX,[EBP-0C] 〈----参数2:转换后序列号地址
017F:2A06C103 E806000000 CALL 2A06C10E 〈----比对核心
017F:2A06C108 8BE5 MOV ESP,EBP
017F:2A06C10A 5D POP EBP
017F:2A06C10B C20800 RET 08
******************************************************************************************
017F:2A06C10E 55 PUSH EBP
017F:2A06C10F 8BEC MOV EBP,ESP
017F:2A06C111 83EC10 SUB ESP,BYTE +10
017F:2A06C114 56 PUSH ESI
017F:2A06C115 894DF8 MOV [EBP-08],ECX
017F:2A06C118 C745FC00000000 MOV DWORD [EBP-04],00
017F:2A06C11F 8B45F8 MOV EAX,[EBP-08]
017F:2A06C122 83780C00 CMP DWORD [EAX+0C],BYTE +00
017F:2A06C126 0F848E000000 JZ NEAR 2A06C1BA
017F:2A06C12C 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C12F 8B11 MOV EDX,[ECX]
017F:2A06C131 52 PUSH EDX
017F:2A06C132 6A00 PUSH BYTE +00
017F:2A06C134 68F0FF0000 PUSH DWORD FFF0
017F:2A06C139 8B45F8 MOV EAX,[EBP-08]
017F:2A06C13C 8B480C MOV ECX,[EAX+0C]
017F:2A06C13F 51 PUSH ECX
017F:2A06C140 FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C146 85C0 TEST EAX,EAX
017F:2A06C148 7507 JNZ 2A06C151
017F:2A06C14A 33C0 XOR EAX,EAX
017F:2A06C14C E9D0020000 JMP 2A06C421
017F:2A06C151 8B55F8 MOV EDX,[EBP-08]
017F:2A06C154 8B4204 MOV EAX,[EDX+04]
017F:2A06C157 50 PUSH EAX
017F:2A06C158 6A00 PUSH BYTE +00
017F:2A06C15A 68F1FF0000 PUSH DWORD FFF1
017F:2A06C15F 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C162 8B510C MOV EDX,[ECX+0C]
017F:2A06C165 52 PUSH EDX
017F:2A06C166 FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C16C 85C0 TEST EAX,EAX
017F:2A06C16E 7507 JNZ 2A06C177
017F:2A06C170 33C0 XOR EAX,EAX
017F:2A06C172 E9AA020000 JMP 2A06C421
017F:2A06C177 8B45F8 MOV EAX,[EBP-08]
017F:2A06C17A 8B4808 MOV ECX,[EAX+08]
017F:2A06C17D 51 PUSH ECX
017F:2A06C17E 6A00 PUSH BYTE +00
017F:2A06C180 68F2FF0000 PUSH DWORD FFF2
017F:2A06C185 8B55F8 MOV EDX,[EBP-08]
017F:2A06C188 8B420C MOV EAX,[EDX+0C]
017F:2A06C18B 50 PUSH EAX
017F:2A06C18C FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C192 85C0 TEST EAX,EAX
017F:2A06C194 7507 JNZ 2A06C19D
017F:2A06C196 33C0 XOR EAX,EAX
017F:2A06C198 E984020000 JMP 2A06C421
017F:2A06C19D 8B4D08 MOV ECX,[EBP+08]
017F:2A06C1A0 51 PUSH ECX
017F:2A06C1A1 6A00 PUSH BYTE +00
017F:2A06C1A3 68F3FF0000 PUSH DWORD FFF3
017F:2A06C1A8 8B55F8 MOV EDX,[EBP-08]
017F:2A06C1AB 8B420C MOV EAX,[EDX+0C]
017F:2A06C1AE 50 PUSH EAX
017F:2A06C1AF FF1590270B2A CALL `USER32!SendMessageA`
017F:2A06C1B5 E967020000 JMP 2A06C421
017F:2A06C1BA 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C1BD E82EF8FFFF CALL 2A06B9F0 〈----
017F:2A06C1C2 8BF0 MOV ESI,EAX 〈----
017F:2A06C1C4 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C1C7 83C104 ADD ECX,BYTE +04 〈----
017F:2A06C1CA E821F8FFFF CALL 2A06B9F0 〈----判断输入注册码
017F:2A06C1CF 03F0 ADD ESI,EAX 〈----中只有一段中有
017F:2A06C1D1 8B4DF8 MOV ECX,[EBP-08] 〈----两位相同,否则
017F:2A06C1D4 83C108 ADD ECX,BYTE +08 〈----退出本段程序。
017F:2A06C1D7 E814F8FFFF CALL 2A06B9F0 〈----
017F:2A06C1DC 03F0 ADD ESI,EAX 〈----
017F:2A06C1DE 83FE01 CMP ESI,BYTE +01 〈----
017F:2A06C1E1 7407 JZ 2A06C1EA 〈----
017F:2A06C1E3 33C0 XOR EAX,EAX
017F:2A06C1E5 E937020000 JMP 2A06C421
017F:2A06C1EA 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C1ED E8FEF7FFFF CALL 2A06B9F0 .
017F:2A06C1F2 85C0 TEST EAX,EAX .
017F:2A06C1F4 7407 JZ 2A06C1FD .
017F:2A06C1F6 C745FC00000000 MOV DWORD [EBP-04],00 〈----
017F:2A06C1FD 8B4DF8 MOV ECX,[EBP-08] .
017F:2A06C200 83C104 ADD ECX,BYTE +04 .
017F:2A06C203 E8E8F7FFFF CALL 2A06B9F0 . 判断是哪一段
017F:2A06C208 85C0 TEST EAX,EAX . 具有相同字符
017F:2A06C20A 7407 JZ 2A06C213 .
017F:2A06C20C C745FC01000000 MOV DWORD [EBP-04],01 〈----
017F:2A06C213 8B4DF8 MOV ECX,[EBP-08] .
017F:2A06C216 83C108 ADD ECX,BYTE +08 .
017F:2A06C219 E8D2F7FFFF CALL 2A06B9F0 .
017F:2A06C21E 85C0 TEST EAX,EAX .
017F:2A06C220 7407 JZ 2A06C229 .
017F:2A06C222 C745FC02000000 MOV DWORD [EBP-04],02 〈----
017F:2A06C229 837D0800 CMP DWORD [EBP+08],BYTE +00
017F:2A06C22D 7513 JNZ 2A06C242
017F:2A06C22F 8B4DFC MOV ECX,[EBP-04]
017F:2A06C232 8B55F8 MOV EDX,[EBP-08]
017F:2A06C235 8D0C8A LEA ECX,[EDX+ECX*4]
017F:2A06C238 E8830C0000 CALL 2A06CEC0
017F:2A06C23D 894508 MOV [EBP+08],EAX
017F:2A06C240 EB1A JMP SHORT 2A06C25C
017F:2A06C242 8B45FC MOV EAX,[EBP-04]
017F:2A06C245 8B4DF8 MOV ECX,[EBP-08]
017F:2A06C248 8D0C81 LEA ECX,[ECX+EAX*4]
017F:2A06C24B E8700C0000 CALL 2A06CEC0 〈----具有相同字符的段的序列值之和
017F:2A06C250 3B4508 CMP EAX,[EBP+08] 〈----与[EBP+08]的值比较
017F:2A06C253 7407 JZ 2A06C25C
017F:2A06C255 33C0 XOR EAX,EAX
017F:2A06C257 E9C5010000 JMP 2A06C421
017F:2A06C25C 8B5508 MOV EDX,[EBP+08]
017F:2A06C25F 8955F4 MOV [EBP-0C],EDX
017F:2A06C262 837DF460 CMP DWORD [EBP-0C],BYTE +60 〈----[EBP+08]的值与+60比较
017F:2A06C266 740F JZ 2A06C277
017F:2A06C268 837DF461 CMP DWORD [EBP-0C],BYTE +61 〈----[EBP+08]的值与+61比较
017F:2A06C26C 0F84CF000000 JZ NEAR 2A06C341
017F:2A06C272 E93F010000 JMP 2A06C3B6 〈----接着判断3段注册码不相同
017F:2A06C277 8B45FC MOV EAX,[EBP-04] 〈----
017F:2A06C27A 83C001 ADD EAX,BYTE +01 〈----
017F:2A06C27D 99 CDQ 〈----
017F:2A06C27E B903000000 MOV ECX,03 〈----取不含相同字符的注册码段1
017F:2A06C283 F7F9 IDIV ECX 〈----
017F:2A06C285 8B45F8 MOV EAX,[EBP-08] 〈----
017F:2A06C288 8B0490 MOV EAX,[EAX+EDX*4] 〈----
017F:2A06C28B 33D2 XOR EDX,EDX
017F:2A06C28D B903000000 MOV ECX,03 〈----
017F:2A06C292 F7F1 DIV ECX 〈----该段能被3整除
017F:2A06C294 85D2 TEST EDX,EDX 〈----
017F:2A06C296 7407 JZ 2A06C29F 〈----
017F:2A06C298 33C0 XOR EAX,EAX
017F:2A06C29A E982010000 JMP 2A06C421
017F:2A06C29F 8B45FC MOV EAX,[EBP-04] 〈----
017F:2A06C2A2 83C002 ADD EAX,BYTE +02 〈----
017F:2A06C2A5 99 CDQ 〈----
017F:2A06C2A6 B903000000 MOV ECX,03 〈----取不含相同字符的注册码段2
017F:2A06C2AB F7F9 IDIV ECX 〈----
017F:2A06C2AD 8B45F8 MOV EAX,[EBP-08] 〈----
017F:2A06C2B0 8B0490 MOV EAX,[EAX+EDX*4] 〈----
017F:2A06C2B3 33D2 XOR EDX,EDX
017F:2A06C2B5 B903000000 MOV ECX,03 〈----
017F:2A06C2BA F7F1 DIV ECX 〈----该段能被3整除
017F:2A06C2BC 85D2 TEST EDX,EDX 〈----
017F:2A06C2BE 7407 JZ 2A06C2C7 〈----
017F:2A06C2C0 33C0 XOR EAX,EAX
017F:2A06C2C2 E95A010000 JMP 2A06C421
017F:2A06C2C7 8B45FC MOV EAX,[EBP-04]
017F:2A06C2CA 83C001 ADD EAX,BYTE +01
017F:2A06C2CD 99 CDQ
017F:2A06C2CE B903000000 MOV ECX,03
017F:2A06C2D3 F7F9 IDIV ECX
017F:2A06C2D5 8B45F8 MOV EAX,[EBP-08]
017F:2A06C2D8 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C2DB 33D2 XOR EDX,EDX
017F:2A06C2DD B905000000 MOV ECX,05 〈----
017F:2A06C2E2 F7F1 DIV ECX 〈----不含相同字符的注册码段1
017F:2A06C2E4 85D2 TEST EDX,EDX 〈----能被5整除
017F:2A06C2E6 7407 JZ 2A06C2EF 〈----
017F:2A06C2E8 33C0 XOR EAX,EAX
017F:2A06C2EA E932010000 JMP 2A06C421
017F:2A06C2EF 8B45FC MOV EAX,[EBP-04]
017F:2A06C2F2 83C002 ADD EAX,BYTE +02
017F:2A06C2F5 99 CDQ
017F:2A06C2F6 B903000000 MOV ECX,03
017F:2A06C2FB F7F9 IDIV ECX
017F:2A06C2FD 8B45F8 MOV EAX,[EBP-08]
017F:2A06C300 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C303 33D2 XOR EDX,EDX
017F:2A06C305 B905000000 MOV ECX,05 〈----
017F:2A06C30A F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C30C 85D2 TEST EDX,EDX 〈----能被5整除
017F:2A06C30E 7407 JZ 2A06C317 〈----
017F:2A06C310 33C0 XOR EAX,EAX
017F:2A06C312 E90A010000 JMP 2A06C421
017F:2A06C317 8B45FC MOV EAX,[EBP-04]
017F:2A06C31A 83C002 ADD EAX,BYTE +02
017F:2A06C31D 99 CDQ
017F:2A06C31E B903000000 MOV ECX,03
017F:2A06C323 F7F9 IDIV ECX
017F:2A06C325 8B45F8 MOV EAX,[EBP-08]
017F:2A06C328 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C32B 33D2 XOR EDX,EDX
017F:2A06C32D B90B000000 MOV ECX,0B 〈----
017F:2A06C332 F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C334 85D2 TEST EDX,EDX 〈----能被B整除
017F:2A06C336 7407 JZ 2A06C33F 〈----
017F:2A06C338 33C0 XOR EAX,EAX
017F:2A06C33A E9E2000000 JMP 2A06C421
017F:2A06C33F EB75 JMP SHORT 2A06C3B6
017F:2A06C341 8B45FC MOV EAX,[EBP-04]
017F:2A06C344 83C001 ADD EAX,BYTE +01
017F:2A06C347 99 CDQ
017F:2A06C348 B903000000 MOV ECX,03
017F:2A06C34D F7F9 IDIV ECX
017F:2A06C34F 8B45F8 MOV EAX,[EBP-08]
017F:2A06C352 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C355 33D2 XOR EDX,EDX
017F:2A06C357 B903000000 MOV ECX,03 〈----
017F:2A06C35C F7F1 DIV ECX 〈----不含相同字符的注册码段1
017F:2A06C35E 85D2 TEST EDX,EDX 〈----能被3整除
017F:2A06C360 7407 JZ 2A06C369 〈----
017F:2A06C362 33C0 XOR EAX,EAX
017F:2A06C364 E9B8000000 JMP 2A06C421
017F:2A06C369 8B45FC MOV EAX,[EBP-04]
017F:2A06C36C 83C002 ADD EAX,BYTE +02
017F:2A06C36F 99 CDQ
017F:2A06C370 B903000000 MOV ECX,03
017F:2A06C375 F7F9 IDIV ECX
017F:2A06C377 8B45F8 MOV EAX,[EBP-08]
017F:2A06C37A 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C37D 33D2 XOR EDX,EDX
017F:2A06C37F B903000000 MOV ECX,03 〈----
017F:2A06C384 F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C386 85D2 TEST EDX,EDX 〈----能被3整除
017F:2A06C388 7407 JZ 2A06C391 〈----
017F:2A06C38A 33C0 XOR EAX,EAX
017F:2A06C38C E990000000 JMP 2A06C421
017F:2A06C391 8B45FC MOV EAX,[EBP-04]
017F:2A06C394 83C002 ADD EAX,BYTE +02
017F:2A06C397 99 CDQ
017F:2A06C398 B903000000 MOV ECX,03
017F:2A06C39D F7F9 IDIV ECX
017F:2A06C39F 8B45F8 MOV EAX,[EBP-08]
017F:2A06C3A2 8B0490 MOV EAX,[EAX+EDX*4]
017F:2A06C3A5 33D2 XOR EDX,EDX
017F:2A06C3A7 B90B000000 MOV ECX,0B 〈----
017F:2A06C3AC F7F1 DIV ECX 〈----不含相同字符的注册码段2
017F:2A06C3AE 85D2 TEST EDX,EDX 〈----能被B整除
017F:2A06C3B0 7404 JZ 2A06C3B6 〈----
017F:2A06C3B2 33C0 XOR EAX,EAX
017F:2A06C3B4 EB6B JMP SHORT 2A06C421
017F:2A06C3B6 8B5508 MOV EDX,[EBP+08]
017F:2A06C3B9 8955F0 MOV [EBP-10],EDX
017F:2A06C3BC 837DF060 CMP DWORD [EBP-10],BYTE +60 〈----小于+60跳
017F:2A06C3C0 720A JC 2A06C3CC
017F:2A06C3C2 837DF061 CMP DWORD [EBP-10],BYTE +61
017F:2A06C3C6 7602 JNA 2A06C3CA 〈----不高于+61跳
017F:2A06C3C8 EB02 JMP SHORT 2A06C3CC
017F:2A06C3CA EB52 JMP SHORT 2A06C41E
017F:2A06C3CC 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C3CF E83C4EF9FF CALL 2A001210 〈----
017F:2A06C3D4 8BF0 MOV ESI,EAX 〈----
017F:2A06C3D6 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C3D9 83C104 ADD ECX,BYTE +04 〈----
017F:2A06C3DC E82F4EF9FF CALL 2A001210 〈----注
017F:2A06C3E1 3BF0 CMP ESI,EAX 〈----
017F:2A06C3E3 7435 JZ 2A06C41A 〈----册
017F:2A06C3E5 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C3E8 E8234EF9FF CALL 2A001210 〈----码
017F:2A06C3ED 8BF0 MOV ESI,EAX 〈----
017F:2A06C3EF 8B4DF8 MOV ECX,[EBP-08] 〈----3
017F:2A06C3F2 83C108 ADD ECX,BYTE +08 〈----
017F:2A06C3F5 E8164EF9FF CALL 2A001210 〈----段
017F:2A06C3FA 3BF0 CMP ESI,EAX 〈----
017F:2A06C3FC 741C JZ 2A06C41A 〈----均
017F:2A06C3FE 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C401 83C104 ADD ECX,BYTE +04 〈----不
017F:2A06C404 E8074EF9FF CALL 2A001210 〈----
017F:2A06C409 8BF0 MOV ESI,EAX 〈----同
017F:2A06C40B 8B4DF8 MOV ECX,[EBP-08] 〈----
017F:2A06C40E 83C108 ADD ECX,BYTE +08 〈----
017F:2A06C411 E8FA4DF9FF CALL 2A001210 〈----
017F:2A06C416 3BF0 CMP ESI,EAX 〈----
017F:2A06C418 7504 JNZ 2A06C41E 〈----
017F:2A06C41A 33C0 XOR EAX,EAX
017F:2A06C41C EB03 JMP SHORT 2A06C421
017F:2A06C41E 8B4508 MOV EAX,[EBP+08]
017F:2A06C421 5E POP ESI
017F:2A06C422 8BE5 MOV ESP,EBP
017F:2A06C424 5D POP EBP
017F:2A06C425 C20400 RET 04
问题是何处调用了本段程序,[EBP+08]的值在何处确定?
继续追踪到主程序:
017F:2A06CE3A 55 PUSH EBP
017F:2A06CE3B 8BEC MOV EBP,ESP
017F:2A06CE3D 51 PUSH ECX
017F:2A06CE3E C745FC50000000 MOV DWORD [EBP-04],50
017F:2A06CE45 EB09 JMP SHORT 2A06CE50
017F:2A06CE47 8B45FC MOV EAX,[EBP-04]
017F:2A06CE4A 83C001 ADD EAX,BYTE +01
017F:2A06CE4D 8945FC MOV [EBP-04],EAX
017F:2A06CE50 837DFC5D CMP DWORD [EBP-04],BYTE +5D
017F:2A06CE54 7723 JA 2A06CE79
017F:2A06CE56 8B0D886C0D2A MOV ECX,[2A0D6C88] 〈----30000000
017F:2A06CE5C 51 PUSH ECX
017F:2A06CE5D 8B550C MOV EDX,[EBP+0C] 〈----输入用户名地址
017F:2A06CE60 52 PUSH EDX
017F:2A06CE61 8B4508 MOV EAX,[EBP+08] 〈----输入注册码地址
017F:2A06CE64 50 PUSH EAX
017F:2A06CE65 8B4DFC MOV ECX,[EBP-04] 〈----50
017F:2A06CE68 51 PUSH ECX
017F:2A06CE69 E81AF6FFFF CALL 2A06C488 〈----CALL 2A06C03C
017F:2A06CE6E 85C0 TEST EAX,EAX
017F:2A06CE70 7405 JZ 2A06CE77
017F:2A06CE72 8B45FC MOV EAX,[EBP-04]
017F:2A06CE75 EB04 JMP SHORT 2A06CE7B
017F:2A06CE77 EBCE JMP SHORT 2A06CE47
017F:2A06CE79 33C0 XOR EAX,EAX
017F:2A06CE7B 8BE5 MOV ESP,EBP
017F:2A06CE7D 5D POP EBP
017F:2A06CE7E C20800 RET 08
===============================================================
017F:2A06C488 55 PUSH EBP
017F:2A06C489 8BEC MOV EBP,ESP
017F:2A06C48B 6AFF PUSH BYTE -01
017F:2A06C48D 688F000B2A PUSH DWORD 2A0B008F
017F:2A06C492 64A100000000 MOV EAX,`DOSMGR_BackFill_Allowed`
017F:2A06C498 50 PUSH EAX
017F:2A06C499 64892500000000 MOV `DOSMGR_BackFill_Allowed`,ESP
017F:2A06C4A0 83EC20 SUB ESP,BYTE +20
017F:2A06C4A3 8B4514 MOV EAX,[EBP+14]
017F:2A06C4A6 50 PUSH EAX
017F:2A06C4A7 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4AA E870FAFFFF CALL 2A06BF1F
017F:2A06C4AF C745FC00000000 MOV DWORD [EBP-04],00
017F:2A06C4B6 837D1000 CMP DWORD [EBP+10],BYTE +00
017F:2A06C4BA 751B JNZ 2A06C4D7
017F:2A06C4BC C745D800000000 MOV DWORD [EBP-28],00
017F:2A06C4C3 C745FCFFFFFFFF MOV DWORD [EBP-04],FFFFFFFF
017F:2A06C4CA 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4CD E81CFBFFFF CALL 2A06BFEE
017F:2A06C4D2 8B45D8 MOV EAX,[EBP-28]
017F:2A06C4D5 EB2B JMP SHORT 2A06C502
017F:2A06C4D7 8B4D08 MOV ECX,[EBP+08]
017F:2A06C4DA 51 PUSH ECX
017F:2A06C4DB 8B5510 MOV EDX,[EBP+10]
017F:2A06C4DE 52 PUSH EDX
017F:2A06C4DF 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4E2 E855FBFFFF CALL 2A06C03C
017F:2A06C4E7 8945DC MOV [EBP-24],EAX
017F:2A06C4EA 8B45DC MOV EAX,[EBP-24]
017F:2A06C4ED 8945D4 MOV [EBP-2C],EAX
017F:2A06C4F0 C745FCFFFFFFFF MOV DWORD [EBP-04],FFFFFFFF
017F:2A06C4F7 8D4DE0 LEA ECX,[EBP-20]
017F:2A06C4FA E8EFFAFFFF CALL 2A06BFEE
017F:2A06C4FF 8B45D4 MOV EAX,[EBP-2C]
017F:2A06C502 8B4DF4 MOV ECX,[EBP-0C]
017F:2A06C505 64890D00000000 MOV `DOSMGR_BackFill_Allowed`,ECX
017F:2A06C50C 8BE5 MOV ESP,EBP
017F:2A06C50E 5D POP EBP
017F:2A06C50F C21000 RET 10
===============================================================
2A0D01A8:
5 W B 9 F R K 4 V T P 3 C Q 6 A
S N 8 H X 2 J M U Z Y L E D G 7
总结:
以上程序提供了注册码的长度为14为,4位一段,共3段,中间以符号"-"连接;在
CALL 2A06C428 处跟入,发现程序以地址 2A0D01A8 处字符串作为计算尺,查询
输入注册码字符在计算尺中的序号,即将X1X2X3X4-X5X6X7X8-X9X10X11X12转换
为Y1Y2Y3Y4Y5Y6Y7Y8Y9Y10Y11Y12,然后判断Y1-Y12中只能且必须有两个序号在
同一段相同,接着判断该段序号值相加结果与[EBP+08]中的值比较,若相等则根据
[EBP+08]中的值进行程序分支判断,最后还判断3段各不相同。
使用粘贴:DRDN-A6W5-JS4P
[EBP+08]=50,最后程序出现如下提示:
“你输入了前版的FinePrint 的注册码。要以折扣价升级到当前的版本,请按下在线
更新按钮。”
另分支:+60,+61
可是根据程序中设置的初始值50,是没法转向其它分支的?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [求助]请VB高手指点 4163
- 请教,如何用VB写注册机 5557
- 诱导性的软件介绍 3658
- 无心插柳 4392
- PictureToTv 程序分析--请前辈指正 5242
看原图
赞赏
雪币:
留言: