我在调试一个FLEXlm保护程序的时候,发现两个文件有两处vendor_string交叉验证,大家分析一下这个算法。
第一个:
.text:1000CAC0 sub esp, 0E8h
.text:1000CAC6 mov eax, dword_10A657E0
.text:1000CACB xor eax, esp
.text:1000CACD mov [esp+0E8h+var_4], eax
.text:1000CAD4 push esi
.text:1000CAD5 mov esi, ecx
.text:1000CAD7 push 4 ; size_t
.text:1000CAD9 push esi ; char *
.text:1000CADA push offset aHelo ; "helo"
.text:1000CADF call _strncmp
.text:1000CAE4 add esp, 0Ch
.text:1000CAE7 test eax, eax
.text:1000CAE9 jnz loc_1000CD0B
.text:1000CAEF push 93306Eh
.text:1000CAF4 lea eax, [esp+0F0h+var_74]
.text:1000CAF8 push offset aG7d ; "g%7d"
.text:1000CAFD push eax ; char *
.text:1000CAFE call _sprintf
.text:1000CB03 mov edx, dword_10A81BE4
.text:1000CB09 push 4000h
.text:1000CB0E push offset unk_10A81968
.text:1000CB13 push 0
.text:1000CB15 push 1
.text:1000CB17 push offset a1_0 ; "1.0"
.text:1000CB1C lea ecx, [esp+10Ch+var_74]
.text:1000CB23 push ecx
.text:1000CB24 push edx
.text:1000CB25 call sub_1076B9D0
.text:1000CB2A add esp, 28h
.text:1000CB2D test eax, eax
.text:1000CB2F jz short loc_1000CB6F
.text:1000CB31 push offset aErrorCouldNotC ; "Error: Could not connect to license ven"...
.text:1000CB36 call sub_10130ABA
.text:1000CB3B add eax, 20h
.text:1000CB3E push eax ; FILE *
.text:1000CB3F call _fprintf
.text:1000CB44 add esp, 8
.text:1000CB47 push offset aErrorCouldNotC ; "Error: Could not connect to license ven"...
.text:1000CB4C call sub_10130ABA
.text:1000CB51 add eax, 40h
.text:1000CB54 push eax ; FILE *
.text:1000CB55 call _fprintf
.text:1000CB5A add esp, 8
.text:1000CB5D push 1388h ; dwMilliseconds
.text:1000CB62 call ds:Sleep
.text:1000CB68 push 1 ; uExitCode
.text:1000CB6A call $LN27
.text:1000CB6F
.text:1000CB6F loc_1000CB6F: ; CODE XREF: sub_1000CAC0+6Fj
.text:1000CB6F mov ecx, dword_10A81BE4
.text:1000CB75 lea eax, [esp+0F0h+var_78]
.text:1000CB79 push eax
.text:1000CB7A push ecx
.text:1000CB7B call sub_107768CE
.text:1000CB80 mov eax, [eax+268h]
.text:1000CB86 add esp, 8
.text:1000CB89 cmp byte ptr [eax], 61h
.text:1000CB8C jnz short loc_1000CB94
.text:1000CB8E cmp byte ptr [eax+2], 74h
.text:1000CB92 jz short loc_1000CBA7
.text:1000CB94
.text:1000CB94 loc_1000CB94: ; CODE XREF: sub_1000CAC0+CCj
.text:1000CB94 cmp dword_10A81BF4, 0
.text:1000CB9B jnz short loc_1000CBA7
.text:1000CB9D mov dword_10A81BF4, 201h
.text:1000CBA7
.text:1000CBA7 loc_1000CBA7: ; CODE XREF: sub_1000CAC0+D2j
.text:1000CBA7 ; sub_1000CAC0+DBj
.text:1000CBA7 mov eax, dword_10A81BE4
.text:1000CBAC push 0
.text:1000CBAE lea edx, [esp+0F4h+var_78]
.text:1000CBB2 push edx
.text:1000CBB3 push eax
.text:1000CBB4 call sub_1076B690
.text:1000CBB9 lea ecx, [esp+0FCh+var_EC]
.text:1000CBBD push ecx
.text:1000CBBE call sub_10778E60
.text:1000CBC3 lea edx, [esp+100h+var_DC]
.text:1000CBC7 push edx
.text:1000CBC8 lea eax, [esp+104h+var_6C]
.text:1000CBCF push offset aS_1 ; "%s"
.text:1000CBD4 push eax ; char *
.text:1000CBD5 call _sprintf
.text:1000CBDA mov ecx, dword_10A81BE4
.text:1000CBE0 push esi ; char *
.text:1000CBE1 push ecx ; int
.text:1000CBE2 call sub_10778CD0
.text:1000CBE7 mov esi, eax
.text:1000CBE9 add esp, 24h
.text:1000CBEC test esi, esi
.text:1000CBEE jz loc_1000CCAA
.text:1000CBF4 mov ecx, esi
.text:1000CBF6 lea edx, [ecx+1]
.text:1000CBF9 lea esp, [esp+0]
.text:1000CC00
.text:1000CC00 loc_1000CC00: ; CODE XREF: sub_1000CAC0+147j
.text:1000CC00 mov al, [ecx]
.text:1000CC02 add ecx, 1
.text:1000CC05 test al, al
.text:1000CC07 jnz short loc_1000CC00
.text:1000CC09 sub ecx, edx
.text:1000CC0B cmp ecx, 4
.text:1000CC0E jbe loc_1000CCAA
.text:1000CC14 lea edx, [esi+3]
.text:1000CC17 cmp esi, edx
.text:1000CC19 mov ecx, esi
.text:1000CC1B jnb short loc_1000CC33
.text:1000CC1D mov eax, 0Bh
.text:1000CC22 sub eax, esi
.text:1000CC24 push ebx
.text:1000CC25
.text:1000CC25 loc_1000CC25: ; CODE XREF: sub_1000CAC0+170j
.text:1000CC25 mov bl, al
.text:1000CC27 add bl, cl
.text:1000CC29 add [ecx], bl
.text:1000CC2B add ecx, 1
.text:1000CC2E cmp ecx, edx
.text:1000CC30 jb short loc_1000CC25
.text:1000CC32 pop ebx
.text:1000CC33
.text:1000CC33 loc_1000CC33: ; CODE XREF: sub_1000CAC0+15Bj
.text:1000CC33 add esi, 1
.text:1000CC36 push esi ; char *
.text:1000CC37 mov byte ptr [edx], 0
.text:1000CC3A call j__atol
.text:1000CC3F add esp, 4
.text:1000CC42 cmp eax, 2
.text:1000CC45 jge loc_1000CD0B
.text:1000CC4B lea edx, [esp+0F0h+var_6C]
.text:1000CC52 push edx
.text:1000CC53 push offset aErrorThisFlexn ; "Error: This FLEXnet-enabled client (%s)"...
.text:1000CC58 call sub_10130ABA
.text:1000CC5D add eax, 20h
.text:1000CC60 push eax ; FILE *
.text:1000CC61 call _fprintf
.text:1000CC66 add esp, 0Ch
.text:1000CC69 lea eax, [esp+0F0h+var_6C]
.text:1000CC70 push eax
.text:1000CC71 push offset aErrorThisFlexn ; "Error: This FLEXnet-enabled client (%s)"...
.text:1000CC76 call sub_10130ABA
.text:1000CC7B add eax, 40h
.text:1000CC7E push eax ; FILE *
.text:1000CC7F call _fprintf
.text:1000CC84 add esp, 0Ch
.text:1000CC87 mov dword_10A81BE4, 0
.text:1000CC91 or eax, 0FFFFFFFFh
.text:1000CC94 pop esi
.text:1000CC95 mov ecx, [esp+0ECh+var_8]
.text:1000CC9C xor ecx, esp
.text:1000CC9E call sub_10130355
.text:1000CCA3 add esp, 0E8h
.text:1000CCA9 retn
第二个:
.text:1000CE78 push 9330F0h
.text:1000CE7D lea edx, [esp+20h+var_10]
.text:1000CE81 push offset aG7d ; "g%7d"
.text:1000CE86 push edx ; char *
.text:1000CE87 call _sprintf
.text:1000CE8C push 8 ; size_t
.text:1000CE8E lea eax, [esp+2Ch+var_10]
.text:1000CE92 push eax ; char *
.text:1000CE93 push edi ; char *
.text:1000CE94 call _strncmp
.text:1000CE99 add esp, 18h
.text:1000CE9C test eax, eax
.text:1000CE9E jnz short loc_1000CEC3
.text:1000CEA0 cmp dword_10A81BF4, eax
.text:1000CEA6 jnz short loc_1000CEF9
.text:1000CEA8 pop edi
.text:1000CEA9 mov dword_10A81BF4, 21h
.text:1000CEB3 pop ebx
.text:1000CEB4 mov ecx, [esp+14h+var_4]
.text:1000CEB8 xor ecx, esp
.text:1000CEBA call sub_10130355
.text:1000CEBF add esp, 14h
.text:1000CEC2 retn
文件下载地址:http://u.115.com/file/aq7r50k8#
dlls.zip
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)