|
![]() | 作者: yongmin [yongmin]
![]() |
登录 |
作者:lb_0815 此软件不错,闲来无事,想写个注册机。软件用Acprotect保护,脱壳无力,带壳破解。 先看帮助 可知注册码格式,设为:X1X2X3X4X5X6X7X8-Y1Y2Y3Y4Y5Y6Y7Y8-Z1Z2Z3Z4Z5Z6Z7Z8-W1W2W3W4W5W6W7W8,注册码长度为35。 脱壳用DeDe反编译,得知“注册”按钮事件为0041FC3C 在主界面点击“注册”,在弹出的注册界面上注册码框输入:“11123456-84024397-33328576-63445289”,点击“注册”按钮,OllyDbg拦截在: 0041FC3C 55 push ebp 0041FC3D 8BEC mov ebp,esp 0041FC3F 81C4 B8FEFFFF add esp,-148 …… 0041FD6A 837D FC 00 cmp dword ptr ss:[ebp-4],0 堆栈 ss:[0012F1B4]=098DC684, (ASCII "11123456-84024397-33328576-63445289") 0041FD6E 74 08 je short ZnCycd.0041FD78 0041FD70 8B55 FC mov edx,dword ptr ss:[ebp-4] 输入的伪注册码 0041FD73 8B4A FC mov ecx,dword ptr ds:[edx-4] 伪注册码长度 …… 0041FD92 BA 05000000 mov edx,5 ; index=5 0041FD97 8B98 F8020000 mov ebx,dword ptr ds:[eax+2F8] 0041FD9D 33C0 xor eax,eax 0041FD9F 8945 E4 mov dword ptr ss:[ebp-1C],eax 0041FDA2 81C3 18020000 add ebx,218 0041FDA8 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 0041FDAE 8B03 mov eax,dword ptr ds:[ebx] 0041FDB0 8B18 mov ebx,dword ptr ds:[eax] 0041FDB2 FF53 0C call dword ptr ds:[ebx+C] ; index=5, 字符串“35” 0041FDB5 8D45 E4 lea eax,dword ptr ss:[ebp-1C] 0041FDB8 E8 7FCD0A00 call <ZnCycd.NumstrToHexvalue> ; hex_value=23h 0041FDBD 40 inc eax 0041FDBE 3B85 D4FEFFFF cmp eax,dword ptr ss:[ebp-12C] ; 与注册码长度比较 …… 0041FDE6 BA 05000000 mov edx,5 0041FDEB 8B06 mov eax,dword ptr ds:[esi] 0041FDED 8B18 mov ebx,dword ptr ds:[eax] 0041FDEF FF53 0C call dword ptr ds:[ebx+C] ; index=5,取注册码长度 0041FDF2 8D45 E0 lea eax,dword ptr ss:[ebp-20] 0041FDF5 E8 42CD0A00 call <ZnCycd.NumstrToHexvalue> 0041FDFA 3B85 D4FEFFFF cmp eax,dword ptr ss:[ebp-12C] ; 与注册码长度比较 0041FE00 8D45 E0 lea eax,dword ptr ss:[ebp-20] 0041FE03 0F9FC2 setg dl ; 不相等设置标志,注册码长度需等于35 0041FE06 83E2 01 and edx,1 0041FE09 52 push edx 0041FE0A BA 02000000 mov edx,2 0041FE0F FF8D FCFEFFFF dec dword ptr ss:[ebp-104] 0041FE15 E8 7EC80A00 call ZnCycd.004CC698 0041FE1A 59 pop ecx 0041FE1B 85C9 test ecx,ecx ; 比较标志 0041FE1D 75 04 jnz short ZnCycd.0041FE23 ; 跳转over …… 004201AC BA 0A000000 mov edx,0A 004201B1 8D45 FC lea eax,dword ptr ss:[ebp-4] 004201B4 B9 02000000 mov ecx,2 004201B9 E8 9AC80A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取Y1Y2,伪注册码从第10位取两位字符 004201BE 8D45 BC lea eax,dword ptr ss:[ebp-44] 004201C1 33D2 xor edx,edx 004201C3 50 push eax 004201C4 8955 C0 mov dword ptr ss:[ebp-40],edx 004201C7 8D4D C0 lea ecx,dword ptr ss:[ebp-40] 004201CA BA 01000000 mov edx,1 004201CF 51 push ecx 004201D0 B9 02000000 mov ecx,2 004201D5 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004201DB 8D45 FC lea eax,dword ptr ss:[ebp-4] 004201DE E8 75C80A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取X1X2,伪注册码从第1位取两位字符 004201E3 8D45 C0 lea eax,dword ptr ss:[ebp-40] 004201E6 33D2 xor edx,edx 004201E8 8955 B8 mov dword ptr ss:[ebp-48],edx 004201EB 8D4D B8 lea ecx,dword ptr ss:[ebp-48] 004201EE FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004201F4 5A pop edx 004201F5 E8 E2C40A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; X1X2Y1Y2 004201FA 8D55 B8 lea edx,dword ptr ss:[ebp-48] 004201FD 8D45 F8 lea eax,dword ptr ss:[ebp-8] …… 0042023E 8D45 F8 lea eax,dword ptr ss:[ebp-8] 00420241 E8 F6C80A00 call <ZnCycd.NumstrToHexvalue> ; 字符“1184”变为值4a0h 00420246 8BD0 mov edx,eax ; X1X2Y1Y2 00420248 B9 03000000 mov ecx,3 0042024D 8D0442 lea eax,dword ptr ds:[edx+eax*2] 00420250 8D0482 lea eax,dword ptr ds:[edx+eax*4] ; X1X2Y1Y2×13 00420253 99 cdq 00420254 F7F9 idiv ecx ; X1X2Y1Y2×13\3 00420256 8B95 DCFEFFFF mov edx,dword ptr ss:[ebp-124] 0042025C 8B8A F4020000 mov ecx,dword ptr ds:[edx+2F4] 00420262 8941 0C mov dword ptr ds:[ecx+C],eax ; eax为140Ah …… 00420287 BA 01000000 mov edx,1 0042028C 8B99 80030000 mov ebx,dword ptr ds:[ecx+380] 00420292 8945 B4 mov dword ptr ss:[ebp-4C],eax 00420295 81C3 18020000 add ebx,218 0042029B 8D4D B4 lea ecx,dword ptr ss:[ebp-4C] 0042029E FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004202A4 8B03 mov eax,dword ptr ds:[ebx] 004202A6 8B18 mov ebx,dword ptr ds:[eax] 004202A8 FF53 0C call dword ptr ds:[ebx+C] ; EDX=1,取得机器码 004202AB 8D45 B4 lea eax,dword ptr ss:[ebp-4C] 004202AE B9 08000000 mov ecx,8 004202B3 BA 01000000 mov edx,1 004202B8 E8 9BC70A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取得机器码的前8位字符 004202BD 8D45 B0 lea eax,dword ptr ss:[ebp-50] 004202C0 E8 77C80A00 call <ZnCycd.NumstrToHexvalue> ; 机器码前8位值:5E1F658,98694744 004202C5 8BD8 mov ebx,eax 004202C7 33C0 xor eax,eax 004202C9 8945 AC mov dword ptr ss:[ebp-54],eax 004202CC 8D55 AC lea edx,dword ptr ss:[ebp-54] 004202CF 52 push edx 004202D0 BA 16000000 mov edx,16 004202D5 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004202DB 8D45 FC lea eax,dword ptr ss:[ebp-4] 004202DE B9 01000000 mov ecx,1 004202E3 E8 70C70A00 call <ZnCycd.mid(str,x,y)ecx为长>; 取Z4,从伪注册码第22位取一个字符 004202E8 8D45 AC lea eax,dword ptr ss:[ebp-54] 004202EB E8 4CC80A00 call <ZnCycd.NumstrToHexvalue> 004202F0 83C0 07 add eax,7 ; Z4+7 004202F3 8B95 DCFEFFFF mov edx,dword ptr ss:[ebp-124] 004202F9 0FAFD8 imul ebx,eax ; machinecode(前8位)*(Z4+7) 004202FC 8BB2 F8020000 mov esi,dword ptr ds:[edx+2F8] 00420302 33C0 xor eax,eax 00420304 8945 A8 mov dword ptr ss:[ebp-58],eax 00420307 81C6 18020000 add esi,218 0042030D FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420313 BA 03000000 mov edx,3 ; index=3 00420318 8B06 mov eax,dword ptr ds:[esi] 0042031A 8D4D A8 lea ecx,dword ptr ss:[ebp-58] 0042031D 8B30 mov esi,dword ptr ds:[eax] 0042031F FF56 0C call dword ptr ds:[esi+C] ; index=3,取得字符“3” 00420322 8D45 A8 lea eax,dword ptr ss:[ebp-58] 00420325 E8 12C80A00 call <ZnCycd.NumstrToHexvalue> 0042032A 93 xchg eax,ebx 0042032B 99 cdq 0042032C F7FB idiv ebx ; machinecode(前8位)*(Z4+7)\3 0042032E 8985 BCFEFFFF mov dword ptr ss:[ebp-144],eax ; eax值为11A5E308 00420334 8D45 A8 lea eax,dword ptr ss:[ebp-58] 00420337 DB85 BCFEFFFF fild dword ptr ss:[ebp-144] ; 十进制值为296084232 0042033D BA 02000000 mov edx,2 00420342 D99D CCFEFFFF fstp dword ptr ss:[ebp-134] ; 堆栈浮点值:4D8D2F18 …… 004203A1 8D45 A4 lea eax,dword ptr ss:[ebp-5C] 004203A4 D985 CCFEFFFF fld dword ptr ss:[ebp-134] ; 浮点值变化为296084224 004203AA DD1C24 fstp qword ptr ss:[esp] 004203AD E8 7AC20A00 call <ZnCycd.hextostr> ; 转化成字符串“296084224”,令其为S …… 004203ED 8D45 EC lea eax,dword ptr ss:[ebp-14] 004203F0 B9 08000000 mov ecx,8 004203F5 BA 01000000 mov edx,1 004203FA E8 59C60A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取字符串S前8位,设为S0 …… 00420438 B9 01000000 mov ecx,1 0042043D BA 1C000000 mov edx,1C 00420442 E8 11C60A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取W1,伪注册码第28位取一字符 00420447 8D45 94 lea eax,dword ptr ss:[ebp-6C] 0042044A 33D2 xor edx,edx 0042044C 50 push eax 0042044D 8955 9C mov dword ptr ss:[ebp-64],edx 00420450 8D4D 9C lea ecx,dword ptr ss:[ebp-64] 00420453 BA 13000000 mov edx,13 00420458 51 push ecx 00420459 B9 02000000 mov ecx,2 0042045E FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420464 8D45 FC lea eax,dword ptr ss:[ebp-4] 00420467 E8 ECC50A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取Z1Z2,从伪注册码第19位取两位字符 0042046C 8D55 9C lea edx,dword ptr ss:[ebp-64] 0042046F 33C0 xor eax,eax 00420471 8945 98 mov dword ptr ss:[ebp-68],eax 00420474 8D4D 98 lea ecx,dword ptr ss:[ebp-68] 00420477 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 0042047D 8D45 F8 lea eax,dword ptr ss:[ebp-8] 00420480 E8 57C20A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; 结果为X1X2Y1Y2Z1Z2 00420485 8D45 98 lea eax,dword ptr ss:[ebp-68] 00420488 33D2 xor edx,edx 0042048A 8955 90 mov dword ptr ss:[ebp-70],edx 0042048D 8D4D 90 lea ecx,dword ptr ss:[ebp-70] 00420490 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420496 5A pop edx 00420497 E8 40C20A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; 结果为X1X2Y1Y2Z1Z2W1 0042049C 8D55 90 lea edx,dword ptr ss:[ebp-70] …… 004204FB BA 03000000 mov edx,3 ; index=3 00420500 8B99 F8020000 mov ebx,dword ptr ds:[ecx+2F8] 00420506 8945 88 mov dword ptr ss:[ebp-78],eax 00420509 81C3 18020000 add ebx,218 0042050F FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420515 8D4D 88 lea ecx,dword ptr ss:[ebp-78] 00420518 8B03 mov eax,dword ptr ds:[ebx] 0042051A 8B18 mov ebx,dword ptr ds:[eax] 0042051C FF53 0C call dword ptr ds:[ebx+C] ; <ZnCycd.GetStrFromIndex(EDX)> 0042051F 8D45 88 lea eax,dword ptr ss:[ebp-78] 00420522 E8 15C60A00 call <ZnCycd.NumstrToHexvalue> ; 转换成3 00420527 50 push eax ; 保存3 00420528 33D2 xor edx,edx 0042052A 66:C785 F0FEFFF>mov word ptr ss:[ebp-110],0D4 00420533 8955 8C mov dword ptr ss:[ebp-74],edx 00420536 8D4D 8C lea ecx,dword ptr ss:[ebp-74] 00420539 51 push ecx 0042053A B9 01000000 mov ecx,1 0042053F FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420545 BA 18000000 mov edx,18 0042054A 8D45 FC lea eax,dword ptr ss:[ebp-4] 0042054D E8 06C50A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取Z6,从伪注册码第24位取一位字符 00420552 8D45 8C lea eax,dword ptr ss:[ebp-74] 00420555 E8 E2C50A00 call <ZnCycd.NumstrToHexvalue> 0042055A 83C0 07 add eax,7 ; Z6+7 0042055D 5A pop edx ; 取出3 0042055E 8BCA mov ecx,edx 00420560 99 cdq 00420561 F7F9 idiv ecx ; (Z6+7)\3 00420563 8BD8 mov ebx,eax 00420565 8D45 EC lea eax,dword ptr ss:[ebp-14] 00420568 E8 CFC50A00 call <ZnCycd.NumstrToHexvalue> ; 转换字符串S0为HEX值,为1C3C9E6 0042056D 0FAFD8 imul ebx,eax ; S0×[(Z6+7)\3] 00420570 899D B8FEFFFF mov dword ptr ss:[ebp-148],ebx 00420576 8D45 88 lea eax,dword ptr ss:[ebp-78] 00420579 DB85 B8FEFFFF fild dword ptr ss:[ebp-148] ; 值为70F2798h,118433688 0042057F BA 02000000 mov edx,2 00420584 D99D CCFEFFFF fstp dword ptr ss:[ebp-134] ; 浮点数为4CE1E4F3,十进制为118422688 0042058A FF8D FCFEFFFF dec dword ptr ss:[ebp-104] 00420590 E8 03C10A00 call ZnCycd.004CC698 00420595 FF8D FCFEFFFF dec dword ptr ss:[ebp-104] 0042059B 8D45 8C lea eax,dword ptr ss:[ebp-74] 0042059E BA 02000000 mov edx,2 004205A3 E8 F0C00A00 call ZnCycd.004CC698 004205A8 66:C785 F0FEFFF>mov word ptr ss:[ebp-110],0E0 004205B1 83C4 F8 add esp,-8 004205B4 8D45 84 lea eax,dword ptr ss:[ebp-7C] 004205B7 D985 CCFEFFFF fld dword ptr ss:[ebp-134] ; 值变化为118433688 004205BD DD1C24 fstp qword ptr ss:[esp] 004205C0 E8 67C00A00 call <ZnCycd.hextostr> ; S0运算后转换为字符串“118433688”,设为S' …… 00420603 B9 01000000 mov ecx,1 00420608 BA 22000000 mov edx,22 0042060D E8 46C40A00 call <ZnCycd.mid(str,x,y)ecx为长度,e> 00420612 8D55 80 lea edx,dword ptr ss:[ebp-80] ; 取W7,伪注册码第34位取1位字符 00420615 33C0 xor eax,eax 00420617 8985 7CFFFFFF mov dword ptr ss:[ebp-84],eax 0042061D 8D8D 7CFFFFFF lea ecx,dword ptr ss:[ebp-84] 00420623 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420629 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0042062C E8 ABC00A00 call <ZnCycd.strcat(str1,str2)ecx>; X1X2Y1Y2Z1Z2W1W7 00420631 8D95 7CFFFFFF lea edx,dword ptr ss:[ebp-84] …… 00420689 B9 08000000 mov ecx,8 0042068E BA 01000000 mov edx,1 00420693 E8 C0C30A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取字符串S'前8位 00420698 8D85 78FFFFFF lea eax,dword ptr ss:[ebp-88] ; 字符串S'前八位 0042069E 8D55 F8 lea edx,dword ptr ss:[ebp-8] ; 字符串X1X2Y1Y2Z1Z2W1W7 004206A1 E8 DAC00A00 call <ZnCycd.strcmp(eax,edx),相等返回值eax为0> ; 第一次验证 004206A6 50 push eax 004206A7 FF8D FCFEFFFF dec dword ptr ss:[ebp-104] 004206AD 8D85 78FFFFFF lea eax,dword ptr ss:[ebp-88] 004206B3 BA 02000000 mov edx,2 004206B8 E8 DBBF0A00 call ZnCycd.004CC698 004206BD 59 pop ecx 004206BE 84C9 test cl,cl 004206C0 0F84 62010000 je ZnCycd.00420828 ; 不跳over …… 从下面开始运算注册码字符写入注册表,等待程序重新启动时验证 00420828 66:C785 F0FEFFF>mov word ptr ss:[ebp-110],128 00420831 33C0 xor eax,eax 00420833 8D95 44FFFFFF lea edx,dword ptr ss:[ebp-BC] 00420839 8985 44FFFFFF mov dword ptr ss:[ebp-BC],eax 0042083F 52 push edx 00420840 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420846 BA 15000000 mov edx,15 0042084B 8D45 FC lea eax,dword ptr ss:[ebp-4] 0042084E B9 04000000 mov ecx,4 00420853 E8 00C20A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取Z3Z4Z5Z6 00420858 8D85 44FFFFFF lea eax,dword ptr ss:[ebp-BC] 0042085E 33D2 xor edx,edx 00420860 50 push eax 00420861 8995 4CFFFFFF mov dword ptr ss:[ebp-B4],edx 00420867 8D8D 4CFFFFFF lea ecx,dword ptr ss:[ebp-B4] 0042086D BA 0C000000 mov edx,0C 00420872 51 push ecx 00420873 B9 06000000 mov ecx,6 00420878 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 0042087E 8D45 FC lea eax,dword ptr ss:[ebp-4] 00420881 E8 D2C10A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取Y3Y4Y5Y6Y7Y8 00420886 8D85 4CFFFFFF lea eax,dword ptr ss:[ebp-B4] 0042088C 33D2 xor edx,edx 0042088E 50 push eax 0042088F 8995 54FFFFFF mov dword ptr ss:[ebp-AC],edx 00420895 8D8D 54FFFFFF lea ecx,dword ptr ss:[ebp-AC] 0042089B BA 07000000 mov edx,7 004208A0 51 push ecx 004208A1 B9 02000000 mov ecx,2 004208A6 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004208AC 8D45 FC lea eax,dword ptr ss:[ebp-4] 004208AF E8 A4C10A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取X7X8 004208B4 8D85 54FFFFFF lea eax,dword ptr ss:[ebp-AC] 004208BA 33D2 xor edx,edx 004208BC 50 push eax 004208BD 8995 5CFFFFFF mov dword ptr ss:[ebp-A4],edx 004208C3 8D8D 5CFFFFFF lea ecx,dword ptr ss:[ebp-A4] 004208C9 BA 03000000 mov edx,3 004208CE 51 push ecx 004208CF B9 01000000 mov ecx,1 004208D4 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004208DA 8D45 FC lea eax,dword ptr ss:[ebp-4] 004208DD E8 76C10A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取X3 004208E2 8D85 5CFFFFFF lea eax,dword ptr ss:[ebp-A4] 004208E8 33D2 xor edx,edx 004208EA 50 push eax 004208EB 8995 64FFFFFF mov dword ptr ss:[ebp-9C],edx 004208F1 8D8D 64FFFFFF lea ecx,dword ptr ss:[ebp-9C] 004208F7 BA 04000000 mov edx,4 004208FC 51 push ecx 004208FD B9 02000000 mov ecx,2 00420902 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420908 8D45 FC lea eax,dword ptr ss:[ebp-4] 0042090B E8 48C10A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取X4X5 00420910 8D85 64FFFFFF lea eax,dword ptr ss:[ebp-9C] 00420916 33D2 xor edx,edx 00420918 50 push eax 00420919 8995 68FFFFFF mov dword ptr ss:[ebp-98],edx 0042091F 8D8D 68FFFFFF lea ecx,dword ptr ss:[ebp-98] 00420925 BA 06000000 mov edx,6 0042092A 51 push ecx 0042092B B9 01000000 mov ecx,1 00420930 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420936 8D45 FC lea eax,dword ptr ss:[ebp-4] 00420939 E8 1AC10A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取X6 0042093E 8D85 68FFFFFF lea eax,dword ptr ss:[ebp-98] 00420944 33D2 xor edx,edx 00420946 8995 60FFFFFF mov dword ptr ss:[ebp-A0],edx 0042094C 8D8D 60FFFFFF lea ecx,dword ptr ss:[ebp-A0] 00420952 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420958 5A pop edx 00420959 E8 7EBD0A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; 重新组合字符串得X6X4X5 0042095E 8D85 60FFFFFF lea eax,dword ptr ss:[ebp-A0] 00420964 33C9 xor ecx,ecx 00420966 898D 58FFFFFF mov dword ptr ss:[ebp-A8],ecx 0042096C 8D8D 58FFFFFF lea ecx,dword ptr ss:[ebp-A8] 00420972 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420978 5A pop edx 00420979 E8 5EBD0A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; X6X4X5X3 0042097E 8D85 58FFFFFF lea eax,dword ptr ss:[ebp-A8] 00420984 33D2 xor edx,edx 00420986 8995 50FFFFFF mov dword ptr ss:[ebp-B0],edx 0042098C 8D8D 50FFFFFF lea ecx,dword ptr ss:[ebp-B0] 00420992 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420998 5A pop edx 00420999 E8 3EBD0A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; X6X4X5X3X7X8 0042099E 8D85 50FFFFFF lea eax,dword ptr ss:[ebp-B0] 004209A4 33C9 xor ecx,ecx 004209A6 898D 48FFFFFF mov dword ptr ss:[ebp-B8],ecx 004209AC 8D8D 48FFFFFF lea ecx,dword ptr ss:[ebp-B8] 004209B2 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004209B8 5A pop edx 004209B9 E8 1EBD0A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; X6X4X5X3X7X8Y3Y4Y5Y6Y7Y8 004209BE 8D85 48FFFFFF lea eax,dword ptr ss:[ebp-B8] 004209C4 33D2 xor edx,edx 004209C6 8995 40FFFFFF mov dword ptr ss:[ebp-C0],edx 004209CC 8D8D 40FFFFFF lea ecx,dword ptr ss:[ebp-C0] 004209D2 FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 004209D8 5A pop edx 004209D9 E8 FEBC0A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; X6X4X5X3X7X8Y3Y4Y5Y6Y7Y8Z3Z4Z5Z6,组合字符串S1 …… 00420AFF B9 02000000 mov ecx,2 00420B04 BA 23000000 mov edx,23 00420B09 E8 4ABF0A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取W8 00420B0E 8D85 30FFFFFF lea eax,dword ptr ss:[ebp-D0] 00420B14 33D2 xor edx,edx 00420B16 50 push eax 00420B17 8995 38FFFFFF mov dword ptr ss:[ebp-C8],edx 00420B1D 8D8D 38FFFFFF lea ecx,dword ptr ss:[ebp-C8] 00420B23 BA 1D000000 mov edx,1D 00420B28 51 push ecx 00420B29 B9 05000000 mov ecx,5 00420B2E FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420B34 8D45 FC lea eax,dword ptr ss:[ebp-4] 00420B37 E8 1CBF0A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取W2W3W4W5W6 00420B3C 8D85 38FFFFFF lea eax,dword ptr ss:[ebp-C8] 00420B42 33D2 xor edx,edx 00420B44 50 push eax 00420B45 8995 3CFFFFFF mov dword ptr ss:[ebp-C4],edx 00420B4B 8D8D 3CFFFFFF lea ecx,dword ptr ss:[ebp-C4] 00420B51 BA 19000000 mov edx,19 00420B56 51 push ecx 00420B57 B9 02000000 mov ecx,2 00420B5C FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420B62 8D45 FC lea eax,dword ptr ss:[ebp-4] 00420B65 E8 EEBE0A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取Z7Z8 00420B6A 8D85 3CFFFFFF lea eax,dword ptr ss:[ebp-C4] 00420B70 33D2 xor edx,edx 00420B72 8995 34FFFFFF mov dword ptr ss:[ebp-CC],edx 00420B78 8D8D 34FFFFFF lea ecx,dword ptr ss:[ebp-CC] 00420B7E FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420B84 5A pop edx 00420B85 E8 52BB0A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; Z7Z8W2W3W4W5W6 00420B8A 8D85 34FFFFFF lea eax,dword ptr ss:[ebp-CC] 00420B90 33C9 xor ecx,ecx 00420B92 898D 2CFFFFFF mov dword ptr ss:[ebp-D4],ecx 00420B98 8D8D 2CFFFFFF lea ecx,dword ptr ss:[ebp-D4] 00420B9E FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420BA4 5A pop edx 00420BA5 E8 32BB0A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; Z7Z8W2W3W4W5W6W8,组合字符串S2 00420BAA 8D95 2CFFFFFF lea edx,dword ptr ss:[ebp-D4] …… 00420C26 66:C785 F0FEFFF>mov word ptr ss:[ebp-110],140 00420C2F BA 9AAA4E00 mov edx,ZnCycd.004EAA9A ; 8个空格 00420C34 8D85 28FFFFFF lea eax,dword ptr ss:[ebp-D8] …… 00420C72 BB 01000000 mov ebx,1 ; ebx=1 00420C77 66:C785 F0FEFFF>mov word ptr ss:[ebp-110],14C 00420C80 33C0 xor eax,eax 00420C82 8D95 24FFFFFF lea edx,dword ptr ss:[ebp-DC] 00420C88 8985 24FFFFFF mov dword ptr ss:[ebp-DC],eax 00420C8E 52 push edx 00420C8F FF85 FCFEFFFF inc dword ptr ss:[ebp-104] 00420C95 8BD3 mov edx,ebx ; 循环,EDX值变化 00420C97 8D45 F4 lea eax,dword ptr ss:[ebp-C] 00420C9A B9 02000000 mov ecx,2 00420C9F E8 B4BD0A00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 从S1 EDX位置取两个字符,第一次为X6X4 00420CA4 8D85 24FFFFFF lea eax,dword ptr ss:[ebp-DC] 00420CAA E8 8DBE0A00 call <ZnCycd.NumstrToHexvalue> 00420CAF 50 push eax 00420CB0 8D7B 01 lea edi,dword ptr ds:[ebx+1] 00420CB3 D1FF sar edi,1 ; edi/2 00420CB5 79 03 jns short ZnCycd.00420CBA 00420CB7 83D7 00 adc edi,0 00420CBA 57 push edi 00420CBB 8D45 EC lea eax,dword ptr ss:[ebp-14] 00420CBE 50 push eax 00420CBF E8 F4B60A00 call ZnCycd.004CC3B8 00420CC4 83C4 08 add esp,8 00420CC7 8D45 EC lea eax,dword ptr ss:[ebp-14] 00420CCA E8 99BB0A00 call ZnCycd.004CC868 00420CCF 037D EC add edi,dword ptr ss:[ebp-14] ; [0012F1A4]=098DC738, (ASCII " ") 00420CD2 4F dec edi 00420CD3 5A pop edx 00420CD4 0217 add dl,byte ptr ds:[edi] ; dl+20h,共有8个空格(20h) 00420CD6 80C2 03 add dl,3 ; dl+3 00420CD9 8D4B 01 lea ecx,dword ptr ds:[ebx+1] 00420CDC D1F9 sar ecx,1 00420CDE 79 03 jns short ZnCycd.00420CE3 00420CE0 83D1 00 adc ecx,0 00420CE3 2AD1 sub dl,cl ;减去计数器 00420CE5 52 push edx 00420CE6 8D73 01 lea esi,dword ptr ds:[ebx+1] 00420CE9 D1FE sar esi,1 00420CEB 79 03 jns short ZnCycd.00420CF0 00420CED 83D6 00 adc esi,0 00420CF0 56 push esi 00420CF1 8D45 EC lea eax,dword ptr ss:[ebp-14] 00420CF4 50 push eax 00420CF5 E8 BEB60A00 call ZnCycd.004CC3B8 00420CFA 83C4 08 add esp,8 00420CFD 8D45 EC lea eax,dword ptr ss:[ebp-14] 00420D00 E8 63BB0A00 call ZnCycd.004CC868 00420D05 0375 EC add esi,dword ptr ss:[ebp-14] 00420D08 5A pop edx 00420D09 4E dec esi 00420D0A 8D85 24FFFFFF lea eax,dword ptr ss:[ebp-DC] 00420D10 8816 mov byte ptr ds:[esi],dl ; 字符变换保存 00420D12 BA 02000000 mov edx,2 00420D17 FF8D FCFEFFFF dec dword ptr ss:[ebp-104] 00420D1D E8 76B90A00 call ZnCycd.004CC698 00420D22 83C3 02 add ebx,2 00420D25 83FB 0F cmp ebx,0F ; 从字符串S1变换为8个字符S1’ 00420D28 ^ 0F8E 49FFFFFF jle ZnCycd.00420C77 上面这个循环,S1每两位字符转换为数字加上23h-计数器:val(S1(2))+23h-计数器 00420D2E 837D F0 00 cmp dword ptr ss:[ebp-10],0 00420D32 74 08 je short ZnCycd.00420D3C …… 00420D9A 4E dec esi 00420D9B 83FB 03 cmp ebx,3 00420D9E 8816 mov byte ptr ds:[esi],dl ; 变换S2为S2',这不用跟啦,程序重启时要还原成S2 00420DA0 7E 3F jle short ZnCycd.00420DE1 00420DA2 8BFB mov edi,ebx …… 00420ECD 8D8D 18FFFFFF lea ecx,dword ptr ss:[ebp-E8] 00420ED3 8D55 F0 lea edx,dword ptr ss:[ebp-10] 00420ED6 E8 01B80A00 call <ZnCycd.strcat(str1,str2)ecx=^eax+^edx> ; S1'+S2' 下面把S1’+S2’字符组合写入注册表,位置为:[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources] "severId"="L@X!I~<p04,046-1" 然后程序重启进行第二次和第三次验证 程序重启下断:BP RegQueryValueExA,当OllyDbg出现“severId”字样时进入主程序到 0040B071 E8 66170A00 call <ZnCycd.RegReadStr> ; 从注册表读入S1'+S2’字符串 0040B076 FF4D 9C dec dword ptr ss:[ebp-64] 0040B079 8D45 E8 lea eax,dword ptr ss:[ebp-18] 0040B07C BA 02000000 mov edx,2 0040B081 E8 12160C00 call ZnCycd.004CC698 0040B086 66:C745 90 5000 mov word ptr ss:[ebp-70],50 0040B08C 837D EC 00 cmp dword ptr ss:[ebp-14],0 0040B090 74 08 je short ZnCycd.0040B09A 0040B092 8B4D EC mov ecx,dword ptr ss:[ebp-14] ; 注册表字符串S1'+S2' 0040B095 8B41 FC mov eax,dword ptr ds:[ecx-4] ; 字符串长度 …… 0040B0B7 B9 08000000 mov ecx,8 0040B0BC BA 01000000 mov edx,1 0040B0C1 8D45 EC lea eax,dword ptr ss:[ebp-14] 0040B0C4 E8 8F190C00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置> ; 取S1' …… 0040B101 /74 08 je short ZnCycd.0040B10B 0040B103 |8B55 F8 mov edx,dword ptr ss:[ebp-8] ; S1' 0040B106 |8B4A FC mov ecx,dword ptr ds:[edx-4] ; S1'长度 0040B109 |EB 02 jmp short ZnCycd.0040B10D 0040B10B \33C9 xor ecx,ecx 0040B10D 898D 74FFFFFF mov dword ptr ss:[ebp-8C],ecx 0040B113 BF 01000000 mov edi,1 0040B118 3BBD 74FFFFFF cmp edi,dword ptr ss:[ebp-8C] 0040B11E 0F8F B2000000 jg ZnCycd.0040B1D6 0040B124 83FF 05 cmp edi,5 0040B127 7D 51 jge short ZnCycd.0040B17A 0040B129 89BD 70FFFFFF mov dword ptr ss:[ebp-90],edi ; 运算S1'前四个字符,每个字符+3 0040B12F 8B85 70FFFFFF mov eax,dword ptr ss:[ebp-90] 0040B135 50 push eax 0040B136 8D55 F8 lea edx,dword ptr ss:[ebp-8] 0040B139 52 push edx 0040B13A E8 79120C00 call ZnCycd.004CC3B8 0040B13F 83C4 08 add esp,8 0040B142 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B145 E8 1E170C00 call ZnCycd.004CC868 0040B14A 8B95 70FFFFFF mov edx,dword ptr ss:[ebp-90] 0040B150 E8 B4E0C700 call ZnCycd.01089209 0040B155 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B158 4A dec edx 0040B159 8A0A mov cl,byte ptr ds:[edx] 0040B15B 80C1 03 add cl,3 ; cl+3 0040B15E 51 push ecx ; 保存运算值 0040B15F 53 push ebx 0040B160 50 push eax 0040B161 E8 52120C00 call ZnCycd.004CC3B8 0040B166 83C4 08 add esp,8 0040B169 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B16C E8 F7160C00 call ZnCycd.004CC868 0040B171 035D F8 add ebx,dword ptr ss:[ebp-8] 0040B174 4B dec ebx 0040B175 5A pop edx ; 取出运算值 0040B176 8813 mov byte ptr ds:[ebx],dl 0040B178 EB 4F jmp short ZnCycd.0040B1C9 0040B17A 89BD 6CFFFFFF mov dword ptr ss:[ebp-94],edi ; 运算S1'后四个字符,每个字符+2 0040B180 8B8D 6CFFFFFF mov ecx,dword ptr ss:[ebp-94] 0040B186 51 push ecx 0040B187 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B18A 50 push eax 0040B18B E8 28120C00 call ZnCycd.004CC3B8 0040B190 83C4 08 add esp,8 0040B193 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B196 E8 CD160C00 call ZnCycd.004CC868 0040B19B 8B95 6CFFFFFF mov edx,dword ptr ss:[ebp-94] 0040B1A1 E8 69E0C700 call ZnCycd.0108920F 0040B1A6 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B1A9 4A dec edx 0040B1AA 8A0A mov cl,byte ptr ds:[edx] 0040B1AC 80C1 02 add cl,2 ; cl+2 0040B1AF 51 push ecx 0040B1B0 53 push ebx 0040B1B1 50 push eax 0040B1B2 E8 01120C00 call ZnCycd.004CC3B8 0040B1B7 83C4 08 add esp,8 0040B1BA 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B1BD E8 A6160C00 call ZnCycd.004CC868 0040B1C2 035D F8 add ebx,dword ptr ss:[ebp-8] 0040B1C5 4B dec ebx 0040B1C6 5A pop edx 0040B1C7 8813 mov byte ptr ds:[ebx],dl 0040B1C9 47 inc edi 0040B1CA 3BBD 74FFFFFF cmp edi,dword ptr ss:[ebp-8C] 0040B1D0 ^ 0F8E 4EFFFFFF jle ZnCycd.0040B124 ; 字符串运算,字符串S1’经运算后得字符串S4 0040B1D6 C685 6BFFFFFF 6>mov byte ptr ss:[ebp-95],61 ; 输入61h,字符“a” 0040B1DD 66:C745 90 5000 mov word ptr ss:[ebp-70],50 0040B1E3 837D F8 00 cmp dword ptr ss:[ebp-8],0 ; 字符串S4 0040B1E7 74 08 je short ZnCycd.0040B1F1 0040B1E9 8B4D F8 mov ecx,dword ptr ss:[ebp-8] ; S4 0040B1EC 8B41 FC mov eax,dword ptr ds:[ecx-4] ; S4长度 …… 0040B218 0FBE0A movsx ecx,byte ptr ds:[edx] ; S4首字符带符号输入ECX 0040B21B 8B90 00040000 mov edx,dword ptr ds:[eax+400] 0040B221 83C1 FE add ecx,-2 ; ecx-2 0040B224 894A 0C mov dword ptr ds:[edx+C],ecx ; 保存ECX作为第三处验证字符,设为R3(4dh) 0040B227 BF 02000000 mov edi,2 0040B22C 3BBD 64FFFFFF cmp edi,dword ptr ss:[ebp-9C] 0040B232 7F 38 jg short ZnCycd.0040B26C 0040B234 8BDF mov ebx,edi ;对S4第2、4、6、8位字符运算循环 0040B236 53 push ebx 0040B237 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B23A 50 push eax 0040B23B E8 78110C00 call ZnCycd.004CC3B8 0040B240 83C4 08 add esp,8 0040B243 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B246 E8 1D160C00 call ZnCycd.004CC868 0040B24B 035D F8 add ebx,dword ptr ss:[ebp-8] 0040B24E 4B dec ebx 0040B24F 8A95 6BFFFFFF mov dl,byte ptr ss:[ebp-95] ; 保存的字符“a”,ASC值61h,作为参数 0040B255 2A13 sub dl,byte ptr ds:[ebx] ; 对S4第2、4、6、8位字符进行计算 0040B257 8BCF mov ecx,edi 0040B259 02D1 add dl,cl ; dl+字符在S4位置 0040B25B 8895 6BFFFFFF mov byte ptr ss:[ebp-95],dl ; 计算后最后保存值为1C,设为N 0040B261 83C7 02 add edi,2 0040B264 3BBD 64FFFFFF cmp edi,dword ptr ss:[ebp-9C] 0040B26A ^ 7E C8 jle short ZnCycd.0040B234 0040B26C 66:C745 90 7400 mov word ptr ss:[ebp-70],74 …… 0040B27E BA 09000000 mov edx,9 0040B283 8D45 EC lea eax,dword ptr ss:[ebp-14] 0040B286 B9 09000000 mov ecx,9 0040B28B E8 C8170C00 call <ZnCycd.mid(str,x,y)ecx为长度,edx为位置>; 从注册表取出S2' …… 0040B2B1 8B4D F8 mov ecx,dword ptr ss:[ebp-8] ; S2' 0040B2B4 8B41 FC mov eax,dword ptr ds:[ecx-4] ; S2'长度 0040B2B7 EB 02 jmp short ZnCycd.0040B2BB 0040B2B9 33C0 xor eax,eax 0040B2BB 8985 74FFFFFF mov dword ptr ss:[ebp-8C],eax 0040B2C1 BF 01000000 mov edi,1 0040B2C6 3BBD 74FFFFFF cmp edi,dword ptr ss:[ebp-8C] 0040B2CC 0F8F B0000000 jg ZnCycd.0040B382 0040B2D2 89BD 60FFFFFF mov dword ptr ss:[ebp-A0],edi 下面对字符串S2’进行运算,还原成S2 …… 0040B373 8813 mov byte ptr ds:[ebx],dl 0040B375 47 inc edi 0040B376 3BBD 74FFFFFF cmp edi,dword ptr ss:[ebp-8C] 0040B37C ^ 0F8E 50FFFFFF jle ZnCycd.0040B2D2 ; 还原S2 0040B382 8D45 F8 lea eax,dword ptr ss:[ebp-8] ;到这还原成S2 0040B385 83CA FF or edx,FFFFFFFF 0040B388 E8 FF170C00 call <ZnCycd.strNumtoHexValue> ; 字符串S2转换成HexValue 0040B38D 66:C745 90 5000 mov word ptr ss:[ebp-70],50 0040B393 40 inc eax ; eax+1 0040B394 0F84 41050000 je ZnCycd.0040B8DB ; 比较HEX值是否为FFFFFFFF? …… 0040B3D7 BA 01000000 mov edx,1 ; EDX=1 index=1 0040B3DC 8B18 mov ebx,dword ptr ds:[eax] 0040B3DE FF53 0C call dword ptr ds:[ebx+C] ; index=1,取得机器码字符串“986947440” 0040B3E1 8D45 DC lea eax,dword ptr ss:[ebp-24] 0040B3E4 B9 08000000 mov ecx,8 0040B3E9 BA 01000000 mov edx,1 0040B3EE E8 65160C00 call <ZnCycd.mid(str,x,y)ecx为长度,ed>; 取机器码前8位字符 0040B3F3 8D45 D8 lea eax,dword ptr ss:[ebp-28] 0040B3F6 E8 41170C00 call <ZnCycd.NumstrToHexvalue> ; 机器码前8位字符转换成十六进制值 0040B3FB 8BD0 mov edx,eax 0040B3FD C1E0 03 shl eax,3 ; 机器码前8位×8 0040B400 2BC2 sub eax,edx ; 相当于机器码前8位×7 0040B402 B9 03000000 mov ecx,3 ;ecx=3 0040B407 99 cdq 0040B408 F7F9 idiv ecx ;机器码前8位×7\3 0040B40A 8985 58FFFFFF mov dword ptr ss:[ebp-A8],eax ; 保存运算结果值为DB9E978,设为M …… 0040B467 33D2 xor edx,edx ; EDX=0 index=0 0040B469 8B18 mov ebx,dword ptr ds:[eax] 0040B46B FF53 0C call dword ptr ds:[ebx+C] ; index=0,取得字符串“1000000” 0040B46E 8D45 D4 lea eax,dword ptr ss:[ebp-2C] 0040B471 E8 C6160C00 call <ZnCycd.NumstrToHexvalue> 0040B476 50 push eax 0040B477 8B85 58FFFFFF mov eax,dword ptr ss:[ebp-A8] ; 取出M 0040B47D 5A pop edx ; 值1000000,hexvalue:f4240h 0040B47E 8BCA mov ecx,edx 0040B480 99 cdq 0040B481 F7F9 idiv ecx ; M mod 1000000(f4240h) 0040B483 8995 58FFFFFF mov dword ptr ss:[ebp-A8],edx ; 保存余数,为463F8h,设为R …… 0040B4CA BA 02000000 mov edx,2 ; index=2 0040B4CF 8B18 mov ebx,dword ptr ds:[eax] 0040B4D1 FF53 0C call dword ptr ds:[ebx+C] ; index=2,取得字符串“97” 0040B4D4 8D45 D0 lea eax,dword ptr ss:[ebp-30] 0040B4D7 E8 60160C00 call <ZnCycd.NumstrToHexvalue> ; 字符串97变为十六进制61h 0040B4DC 0FBE95 6BFFFFFF movsx edx,byte ptr ss:[ebp-95] ; 取出N,edx值为1Ch 0040B4E3 83C2 F9 add edx,-7 ; 1C-7=15h 0040B4E6 B9 03000000 mov ecx,3 ; ecx=3 0040B4EB F7EA imul edx ; 61h×15h=7f5h 0040B4ED 99 cdq 0040B4EE F7F9 idiv ecx ; 7f5h\3=2a7h 0040B4F0 2985 58FFFFFF sub dword ptr ss:[ebp-A8],eax ; R(463F8h)-2A7h=46151h,设为R1(46151h) …… 0040B529 33D2 xor edx,edx ; index=0 0040B52B 8B03 mov eax,dword ptr ds:[ebx] 0040B52D 8B18 mov ebx,dword ptr ds:[eax] 0040B52F FF53 0C call dword ptr ds:[ebx+C] ; index为0,取得字符串“1000000” 0040B532 8D45 CC lea eax,dword ptr ss:[ebp-34] 0040B535 E8 02160C00 call <ZnCycd.NumstrToHexvalue> 0040B53A D1F8 sar eax,1 ; 1000000/2=7A120h,设为L 0040B53C 79 03 jns short ZnCycd.0040B541 0040B53E 83D0 00 adc eax,0 0040B541 3B85 58FFFFFF cmp eax,dword ptr ss:[ebp-A8] ; eax=L(7a120h),与R1(46151h)比较 0040B547 8D45 CC lea eax,dword ptr ss:[ebp-34] 0040B54A 0F9FC2 setg dl ; 设置标志 0040B54D 83E2 01 and edx,1 0040B550 52 push edx 0040B551 BA 02000000 mov edx,2 0040B556 FF4D 9C dec dword ptr ss:[ebp-64] 0040B559 E8 3A110C00 call ZnCycd.004CC698 0040B55E 59 pop ecx 0040B55F 84C9 test cl,cl ; L≤R1则跳 0040B561 74 51 je short ZnCycd.0040B5B4 0040B563 66:C745 90 BC00 mov word ptr ss:[ebp-70],0BC 0040B569 8B85 7CFFFFFF mov eax,dword ptr ss:[ebp-84] 0040B56F 8D4D C8 lea ecx,dword ptr ss:[ebp-38] 0040B572 8B98 80030000 mov ebx,dword ptr ds:[eax+380] 0040B578 E8 AADCC700 call ZnCycd.01089227 0040B57D 81C3 18020000 add ebx,218 0040B583 FF45 9C inc dword ptr ss:[ebp-64] 0040B586 33D2 xor edx,edx ; index=0 0040B588 8B03 mov eax,dword ptr ds:[ebx] 0040B58A 8B18 mov ebx,dword ptr ds:[eax] 0040B58C FF53 0C call dword ptr ds:[ebx+C] 0040B58F 8D45 C8 lea eax,dword ptr ss:[ebp-38] 0040B592 E8 A5150C00 call <ZnCycd.NumstrToHexvalue> 0040B597 D1F8 sar eax,1 0040B599 79 03 jns short ZnCycd.0040B59E 0040B59B 83D0 00 adc eax,0 0040B59E 0185 58FFFFFF add dword ptr ss:[ebp-A8],eax ; 46151h+7a120h=c0271h,设为R2,R2=iif(L>R1,L+R1,R1) 0040B5A4 FF4D 9C dec dword ptr ss:[ebp-64] 0040B5A7 8D45 C8 lea eax,dword ptr ss:[ebp-38] 0040B5AA BA 02000000 mov edx,2 0040B5AF E8 E4100C00 call ZnCycd.004CC698 0040B5B4 66:C745 90 C800 mov word ptr ss:[ebp-70],0C8 0040B5BA 8B8D 7CFFFFFF mov ecx,dword ptr ss:[ebp-84] 0040B5C0 33C0 xor eax,eax 0040B5C2 BA 02000000 mov edx,2 ; index=2 0040B5C7 8B99 80030000 mov ebx,dword ptr ds:[ecx+380] 0040B5CD 8945 C4 mov dword ptr ss:[ebp-3C],eax 0040B5D0 81C3 18020000 add ebx,218 0040B5D6 FF45 9C inc dword ptr ss:[ebp-64] 0040B5D9 8D4D C4 lea ecx,dword ptr ss:[ebp-3C] 0040B5DC 8B03 mov eax,dword ptr ds:[ebx] 0040B5DE 8B18 mov ebx,dword ptr ds:[eax] 0040B5E0 FF53 0C call dword ptr ds:[ebx+C] ; index=2,取得字符“97” 0040B5E3 8D45 C4 lea eax,dword ptr ss:[ebp-3C] 0040B5E6 E8 51150C00 call <ZnCycd.NumstrToHexvalue> 0040B5EB 8BD8 mov ebx,eax ; ebx=61h 0040B5ED 0FAF9D 58FFFFFF imul ebx,dword ptr ss:[ebp-A8] ; 61h×R2(c0271h)=48cecd1h 0040B5F4 8D45 F8 lea eax,dword ptr ss:[ebp-8] 0040B5F7 E8 40150C00 call <ZnCycd.NumstrToHexvalue> ; S2字符串转换为HEX值 0040B5FC 3BD8 cmp ebx,eax ; 第二次验证,验证组合字符串S2 0040B5FE 8D45 C4 lea eax,dword ptr ss:[ebp-3C] 0040B601 0F94C2 sete dl ; 设置标志 0040B604 83E2 01 and edx,1 0040B607 52 push edx 0040B608 BA 02000000 mov edx,2 0040B60D FF4D 9C dec dword ptr ss:[ebp-64] 0040B610 E8 83100C00 call ZnCycd.004CC698 0040B615 59 pop ecx 0040B616 84C9 test cl,cl 0040B618 0F84 B7020000 je ZnCycd.0040B8D5 ; 跳转over …… 0040DF4E 8B41 0C mov eax,dword ptr ds:[ecx+C] ; 取出R3,R3=4dh 0040DF51 B9 27000000 mov ecx,27 ; ecx=27h 0040DF56 99 cdq 0040DF57 F7F9 idiv ecx 0040DF59 83FA 02 cmp edx,2 ; EDX余数为2,第三处验证 0040DF5C 75 7E jnz short ZnCycd.0040DFDC ; 跳转over 目前只找出了三处验证,启动后程序显示为“标准版”。 |
地主 发表时间: 07-03-27 10:29 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号