Исследование защиты программы NIUBI Partition Editor
Скриншот программы NIUBI Partition Editor
Программа NIUBI Partition Editor, как можно догадаться из названия, предназначена для работы с разделами дисков. На борту имеется стандартный для таких утилит инструментарий, но оно и не удивительно, ведь задачи выполняются одинаковые, а кушать хочется всем производителям. А аппетит, мягко говоря, у этих разработчиков хороший. Почти 800 баксов за лицензию - это слишком жирно. Так что добро пожаловать на обезжиривание.
На офсайте есть несколько вариантов дистрибутивов, как я понял, самый крутой - это "Technician Edition", вот его и забираем. Устанавливаем, смотрим. Исполняемый файл ничем не упакован, как и всегда для таких случаев, отправляем его на дизассемблирование. А пока IDA работает, попробуем активировать программу любыми левыми данными.
Сообщение о неправильной активации
Она, понятно дело, отреагирует вот таким сообщением. Отлично, текст у нас есть, найдем его в файле.
Строка сообщения в ресурсах
Как видно, индекс строки сообщения в ресурсах равняется 64269 или же 0FB0Dh, если в шестнадцатеричной системе. Поищем это значение в листинге дизассемблера.
Code (Assembler) : Убрать нумерацию
- .text:0095C7C0 dd 0FB0Dh
- .text:0095C7C4 off_95C7C4 dd offset hModule
Code (Assembler) : Убрать нумерацию
- .data:00B2AAE4 off_B2AAE4 dd offset off_95C7C4
Code (Assembler) : Убрать нумерацию
- .text:00ABA4D8 sub_ABA4D8 proc near
- .text:00ABA4D8 push ebp
- .text:00ABA4D9 mov ebp, esp
- .text:00ABA4DB push 0
- .text:00ABA4DD push 0
- .text:00ABA4DF xor eax, eax
- .text:00ABA4E1 push ebp
- .text:00ABA4E2 push offset loc_ABA552
- .text:00ABA4E7 push dword ptr fs:[eax]
- .text:00ABA4EA mov fs:[eax], esp
- .text:00ABA4ED push 2
- .text:00ABA4EF push 2
- .text:00ABA4F1 push 0
- .text:00ABA4F3 push 6
- .text:00ABA4F5 lea edx, [ebp+var_8]
- ; Вывести сообщение о неправильной регистрации
- .text:00ABA4F8 mov eax, off_B2AAE4
- .text:00ABA4FD call sub_40D9D8
- .text:00ABA502 mov edx, [ebp+var_8]
- .text:00ABA505 lea ecx, [ebp+var_4]
- .text:00ABA508 mov eax, 1C9C66Fh
- .text:00ABA50D call sub_9CE7B8
- ...
- ...
Code (Assembler) : Убрать нумерацию
- .text:00ABA94F mov edx, [ebp+var_8]
- .text:00ABA952 call sub_40A894
- .text:00ABA957 jnz short loc_ABA98F
- ; Вызвать функцию проверки регистрации
- .text:00ABA959 call sub_9ADEA0
- .text:00ABA95E cmp al, 3
- ; Если AL=3, то вывести сообщение о неправильной регистрации
- .text:00ABA960 jnz short loc_ABA969
- .text:00ABA962 push ebp
- .text:00ABA963 call sub_ABA4D8
- .text:00ABA968 pop ecx
- .text:00ABA969 loc_ABA969:
- .text:00ABA969 mov eax, [ebp+var_4]
- .text:00ABA96C inc dword ptr [eax+3ECh]
- .text:00ABA972 mov eax, [ebp+var_4]
- .text:00ABA975 cmp dword ptr [eax+3ECh], 3
Code (Assembler) : Убрать нумерацию
- .text:009ADEA0 sub_9ADEA0 proc near
- .text:009ADEA0 push ebp
- .text:009ADEA1 mov ebp, esp
- .text:009ADEA3 add esp, 0FFFFFDD4h
- .text:009ADEA9 push ebx
- .text:009ADEAA xor eax, eax
- .text:009ADEAC mov [ebp+var_22C], eax
- .text:009ADEB2 mov [ebp+var_4], eax
- .text:009ADEB5 mov [ebp+var_8], eax
- .text:009ADEB8 lea eax, [ebp+var_14]
- .text:009ADEBB mov edx, ds:off_9AC404
- .text:009ADEC1 call sub_40ADF0
- .text:009ADEC6 xor eax, eax
- .text:009ADEC8 push ebp
- .text:009ADEC9 push offset loc_9ADF77
- .text:009ADECE push dword ptr fs:[eax]
- .text:009ADED1 mov fs:[eax], esp
- .text:009ADED4 lea eax, [ebp+var_22C]
- .text:009ADEDA call sub_9AC978
- .text:009ADEDF mov eax, [ebp+var_22C]
- .text:009ADEE5 push eax
- .text:009ADEE6 call sub_9ACD24
- .text:009ADEEB lea ecx, [ebp+var_228]
- .text:009ADEF1 pop edx
- .text:009ADEF2 call sub_6AA35C
- .text:009ADEF7 test al, al
- .text:009ADEF9 jz short loc_9ADF20
- .text:009ADEFB lea eax, [ebp+var_4]
- .text:009ADEFE lea edx, [ebp+var_220]
- .text:009ADF04 mov ecx, 104h
- .text:009ADF09 call sub_40A5AC
- .text:009ADF0E lea ecx, [ebp+var_8]
- .text:009ADF11 mov edx, offset off_9ADF94
- .text:009ADF16 mov eax, [ebp+var_4]
- .text:009ADF19 call sub_95C8A4
- .text:009ADF1E jmp short loc_9ADF28
- .text:009ADF20 ; ---------------------------------------
- .text:009ADF20 loc_9ADF20:
- .text:009ADF20 lea eax, [ebp+var_8]
- .text:009ADF23 call sub_4095F0
- .text:009ADF28 loc_9ADF28:
- .text:009ADF28 push [ebp+var_224]
- .text:009ADF2E push [ebp+var_228]
- .text:009ADF34 lea edx, [ebp+var_14]
- .text:009ADF37 mov eax, [ebp+var_8]
- .text:009ADF3A call sub_9AE038
- .text:009ADF3F movzx ebx, [ebp+var_14]
- .text:009ADF43 xor eax, eax
- .text:009ADF45 pop edx
- .text:009ADF46 pop ecx
- .text:009ADF47 pop ecx
- .text:009ADF48 mov fs:[eax], edx
- .text:009ADF4B push offset loc_9ADF7E
- .text:009ADF50 loc_9ADF50:
- .text:009ADF50 lea eax, [ebp+var_22C]
- .text:009ADF56 call sub_4095F0
- .text:009ADF5B lea eax, [ebp+var_14]
- .text:009ADF5E mov edx, ds:off_9AC404
- .text:009ADF64 call sub_40AEC8
- .text:009ADF69 lea eax, [ebp+var_8]
- .text:009ADF6C mov edx, 2
- .text:009ADF71 call sub_409650
- .text:009ADF76 retn
- .text:009ADF77 ; ---------------------------------------
- .text:009ADF77 loc_9ADF77:
- .text:009ADF77 jmp loc_408B9C
- .text:009ADF7C ; ---------------------------------------
- .text:009ADF7C jmp short loc_9ADF50
- .text:009ADF7E ; ---------------------------------------
- .text:009ADF7E loc_9ADF7E:
- .text:009ADF7E mov eax, ebx
- .text:009ADF80 pop ebx
- .text:009ADF81 mov esp, ebp
- .text:009ADF83 pop ebp
- .text:009ADF84 retn
- .text:009ADF84 sub_9ADEA0 endp
Code (Assembler) : Убрать нумерацию
- .text:009AE038 sub_9AE038 proc near
- .text:009AE038 push ebp
- .text:009AE039 mov ebp, esp
- .text:009AE03B add esp, 0FFFFFFECh
- .text:009AE03E push ebx
- .text:009AE03F push esi
- .text:009AE040 xor ecx, ecx
- .text:009AE042 mov [ebp+var_14], ecx
- .text:009AE045 mov [ebp+var_8], ecx
- .text:009AE048 mov ebx, edx
- .text:009AE04A mov [ebp+var_4], eax
- .text:009AE04D mov eax, [ebp+var_4]
- .text:009AE050 call sub_4096D4
- .text:009AE055 xor eax, eax
- .text:009AE057 push ebp
- .text:009AE058 push offset loc_9AE381
- .text:009AE05D push dword ptr fs:[eax]
- .text:009AE060 mov fs:[eax], esp
- .text:009AE063 lea eax, [ebp+var_8]
- .text:009AE066 mov edx, [ebp+var_4]
- .text:009AE069 call sub_409A18
- .text:009AE06E cmp [ebp+var_8], 0
- .text:009AE072 jz loc_9AE324
- .text:009AE078 lea eax, [ebp+var_14]
- .text:009AE07B push eax
- .text:009AE07C mov ecx, 2
- .text:009AE081 mov edx, 1
- .text:009AE086 mov eax, [ebp+var_8]
- .text:009AE089 call sub_40A8CC
- .text:009AE08E mov eax, [ebp+var_14]
- .text:009AE091 mov edx, offset aTc ; "TC"
- .text:009AE096 call sub_40A894
- .text:009AE09B jnz short loc_9AE0BF
- .text:009AE09D mov esi, [ebp+var_8]
- .text:009AE0A0 test esi, esi
- .text:009AE0A2 jz short loc_9AE0A9
- .text:009AE0A4 sub esi, 4
- .text:009AE0A7 mov esi, [esi]
- .text:009AE0A9 loc_9AE0A9:
- .text:009AE0A9 lea eax, [ebp+var_8]
- .text:009AE0AC push eax
- .text:009AE0AD mov ecx, esi
- .text:009AE0AF sub ecx, 8
- .text:009AE0B2 mov edx, 9
- .text:009AE0B7 mov eax, [ebp+var_8]
- .text:009AE0BA call sub_40A8CC
- .text:009AE0BF loc_9AE0BF:
- .text:009AE0BF mov eax, [ebp+var_8]
- .text:009AE0C2 call sub_9AD40C
- .text:009AE0C7 mov [ebx+8], al
- .text:009AE0CA cmp byte ptr [ebx+8], 0
- .text:009AE0CE jz short loc_9AE0F2
- .text:009AE0D0 mov esi, [ebp+var_8]
- .text:009AE0D3 test esi, esi
- .text:009AE0D5 jz short loc_9AE0DC
- .text:009AE0D7 sub esi, 4
- .text:009AE0DA mov esi, [esi]
- .text:009AE0DC loc_9AE0DC:
- .text:009AE0DC lea eax, [ebp+var_8]
- .text:009AE0DF push eax
- .text:009AE0E0 mov ecx, esi
- .text:009AE0E2 sub ecx, 6
- .text:009AE0E5 mov edx, 7
- .text:009AE0EA mov eax, [ebp+var_8]
- .text:009AE0ED call sub_40A8CC
- .text:009AE0F2 loc_9AE0F2:
- .text:009AE0F2 lea eax, [ebx+4]
- .text:009AE0F5 mov edx, [ebp+var_8]
- .text:009AE0F8 call sub_4099D0
- .text:009AE0FD mov ecx, offset aPro ; "PRO"
- .text:009AE102 mov edx, offset aProf ; "PROF"
- .text:009AE107 mov eax, [ebp+var_8]
- .text:009AE10A call sub_9ACFC4
- .text:009AE10F test al, al
- .text:009AE111 jz short loc_9AE11B
- .text:009AE113 mov byte ptr [ebx], 5
- .text:009AE116 jmp loc_9AE327
- .text:009AE11B ; ---------------------------------------
- .text:009AE11B loc_9AE11B:
- .text:009AE11B mov ecx, offset aServ ; "SERV"
- .text:009AE120 mov edx, offset aServ ; "SERV"
- .text:009AE125 mov eax, [ebp+var_8]
- .text:009AE128 call sub_9ACFC4
- .text:009AE12D test al, al
- .text:009AE12F jz short loc_9AE139
- .text:009AE131 mov byte ptr [ebx], 6
- .text:009AE134 jmp loc_9AE327
- .text:009AE139 ; ---------------------------------------
- .text:009AE139 loc_9AE139:
- .text:009AE139 mov ecx, offset aEnte ; "ENTE"
- .text:009AE13E mov edx, offset aEnte ; "ENTE"
- .text:009AE143 mov eax, [ebp+var_8]
- .text:009AE146 call sub_9ACFC4
- .text:009AE14B test al, al
- .text:009AE14D jz short loc_9AE157
- .text:009AE14F mov byte ptr [ebx], 7
- .text:009AE152 jmp loc_9AE327
- .text:009AE157 ; ---------------------------------------
- .text:009AE157 loc_9AE157:
- .text:009AE157 mov ecx, offset aUnli ; "UNLI"
- .text:009AE15C mov edx, offset off_9AE424
- .text:009AE161 mov eax, [ebp+var_8]
- .text:009AE164 call sub_9ACFC4
- .text:009AE169 test al, al
- .text:009AE16B jz short loc_9AE175
- .text:009AE16D mov byte ptr [ebx], 8
- .text:009AE170 jmp loc_9AE327
- .text:009AE175 ; ---------------------------------------
- .text:009AE175 loc_9AE175:
- .text:009AE175 mov ecx, offset aUnli1 ; "UNLI1"
- .text:009AE17A mov edx, offset off_9AE45C
- .text:009AE17F mov eax, [ebp+var_8]
- .text:009AE182 call sub_9ACFC4
- .text:009AE187 test al, al
- .text:009AE189 jz short loc_9AE193
- .text:009AE18B mov byte ptr [ebx], 9
- .text:009AE18E jmp loc_9AE327
- .text:009AE193 ; ---------------------------------------
- .text:009AE193 loc_9AE193:
- .text:009AE193 mov ecx, offset aUnli2 ; "UNLI2"
- .text:009AE198 mov edx, offset off_9AE490
- .text:009AE19D mov eax, [ebp+var_8]
- .text:009AE1A0 call sub_9ACFC4
- .text:009AE1A5 test al, al
- .text:009AE1A7 jz short loc_9AE1B1
- .text:009AE1A9 mov byte ptr [ebx], 0Ah
- .text:009AE1AC jmp loc_9AE327
- .text:009AE1B1 ; ---------------------------------------
- .text:009AE1B1 loc_9AE1B1:
- .text:009AE1B1 mov ecx, offset aUnli3 ; "UNLI3"
- .text:009AE1B6 mov edx, offset off_9AE4C4
- .text:009AE1BB mov eax, [ebp+var_8]
- .text:009AE1BE call sub_9ACFC4
- .text:009AE1C3 test al, al
- .text:009AE1C5 jz short loc_9AE1CF
- .text:009AE1C7 mov byte ptr [ebx], 0Bh
- .text:009AE1CA jmp loc_9AE327
- .text:009AE1CF ; ---------------------------------------
- .text:009AE1CF loc_9AE1CF:
- .text:009AE1CF mov ecx, offset aTech ; "TECH"
- .text:009AE1D4 mov edx, offset aTech ; "TECH"
- .text:009AE1D9 mov eax, [ebp+var_8]
- .text:009AE1DC call sub_9ACFC4
- .text:009AE1E1 test al, al
- .text:009AE1E3 jz short loc_9AE1ED
- .text:009AE1E5 mov byte ptr [ebx], 0Ch
- .text:009AE1E8 jmp loc_9AE327
- .text:009AE1ED ; ---------------------------------------
- .text:009AE1ED loc_9AE1ED:
- .text:009AE1ED mov ecx, offset aAdmin ; "ADMIN"
- .text:009AE1F2 mov edx, offset aAdmin ; "ADMIN"
- .text:009AE1F7 mov eax, [ebp+var_8]
- .text:009AE1FA call sub_9ACFC4
- .text:009AE1FF test al, al
- .text:009AE201 jz short loc_9AE20B
- .text:009AE203 mov byte ptr [ebx], 0Dh
- .text:009AE206 jmp loc_9AE327
- .text:009AE20B ; ---------------------------------------
- .text:009AE20B loc_9AE20B:
- .text:009AE20B mov ecx, offset aPro2 ; "PRO2"
- .text:009AE210 mov edx, offset off_9AE528
- .text:009AE215 mov eax, [ebp+var_8]
- .text:009AE218 call sub_9ACFC4
- .text:009AE21D test al, al
- .text:009AE21F jz short loc_9AE229
- .text:009AE221 mov byte ptr [ebx], 0Eh
- .text:009AE224 jmp loc_9AE327
- .text:009AE229 ; ---------------------------------------
- .text:009AE229 loc_9AE229:
- .text:009AE229 mov ecx, offset aProh1 ; "PROH1"
- .text:009AE22E mov edx, offset off_9AE55C
- .text:009AE233 mov eax, [ebp+var_8]
- .text:009AE236 call sub_9ACFC4
- .text:009AE23B test al, al
- .text:009AE23D jz short loc_9AE247
- .text:009AE23F mov byte ptr [ebx], 0Fh
- .text:009AE242 jmp loc_9AE327
- .text:009AE247 ; ---------------------------------------
- .text:009AE247 loc_9AE247:
- .text:009AE247 mov ecx, offset aProb1 ; "PROB1"
- .text:009AE24C mov edx, offset off_9AE590
- .text:009AE251 mov eax, [ebp+var_8]
- .text:009AE254 call sub_9ACFC4
- .text:009AE259 test al, al
- .text:009AE25B jz short loc_9AE265
- .text:009AE25D mov byte ptr [ebx], 10h
- .text:009AE260 jmp loc_9AE327
- .text:009AE265 ; ---------------------------------------
- .text:009AE265 loc_9AE265:
- .text:009AE265 mov ecx, offset aProh2 ; "PROH2"
- .text:009AE26A mov edx, offset off_9AE5C4
- .text:009AE26F mov eax, [ebp+var_8]
- .text:009AE272 call sub_9ACFC4
- .text:009AE277 test al, al
- .text:009AE279 jz short loc_9AE283
- .text:009AE27B mov byte ptr [ebx], 11h
- .text:009AE27E jmp loc_9AE327
- .text:009AE283 ; ---------------------------------------
- .text:009AE283 loc_9AE283:
- .text:009AE283 mov ecx, offset aProb2 ; "PROB2"
- .text:009AE288 mov edx, offset off_9AE5F8
- .text:009AE28D mov eax, [ebp+var_8]
- .text:009AE290 call sub_9ACFC4
- .text:009AE295 test al, al
- .text:009AE297 jz short loc_9AE2A1
- .text:009AE299 mov byte ptr [ebx], 12h
- .text:009AE29C jmp loc_9AE327
- .text:009AE2A1 ; ---------------------------------------
- .text:009AE2A1 loc_9AE2A1:
- .text:009AE2A1 mov ecx, offset aServ2 ; "SERV2"
- .text:009AE2A6 mov edx, offset off_9AE62C
- .text:009AE2AB mov eax, [ebp+var_8]
- .text:009AE2AE call sub_9ACFC4
- .text:009AE2B3 test al, al
- .text:009AE2B5 jz short loc_9AE2BC
- .text:009AE2B7 mov byte ptr [ebx], 13h
- .text:009AE2BA jmp short loc_9AE327
- .text:009AE2BC ; ---------------------------------------
- .text:009AE2BC loc_9AE2BC:
- .text:009AE2BC mov ecx, offset aEnte2 ; "ENTE2"
- .text:009AE2C1 mov edx, offset off_9AE660
- .text:009AE2C6 mov eax, [ebp+var_8]
- .text:009AE2C9 call sub_9ACFC4
- .text:009AE2CE test al, al
- .text:009AE2D0 jz short loc_9AE2D7
- .text:009AE2D2 mov byte ptr [ebx], 14h
- .text:009AE2D5 jmp short loc_9AE327
- .text:009AE2D7 ; ---------------------------------------
- .text:009AE2D7 loc_9AE2D7:
- .text:009AE2D7 mov ecx, offset a30d ; "30D"
- .text:009AE2DC mov edx, offset a30_d ; "30_D"
- .text:009AE2E1 mov eax, [ebp+var_8]
- .text:009AE2E4 call sub_9ACFC4
- .text:009AE2E9 test al, al
- .text:009AE2EB jz short loc_9AE31F
- .text:009AE2ED mov eax, [ebp+arg_0]
- .text:009AE2F0 mov dword ptr [ebp+var_10], eax
- .text:009AE2F3 mov eax, [ebp+arg_4]
- .text:009AE2F6 mov dword ptr [ebp+var_10+4], eax
- .text:009AE2F9 call sub_4283C4
- .text:009AE2FE add esp, 0FFFFFFF8h
- .text:009AE301 fstp [esp+30h+var_30]
- .text:009AE304 wait
- .text:009AE305 push dword ptr [ebp+var_10+4]
- .text:009AE308 push dword ptr [ebp+var_10] ; double
- .text:009AE30B call sub_4F840C
- .text:009AE310 cmp eax, 1Eh
- .text:009AE313 jg short loc_9AE31A
- .text:009AE315 mov byte ptr [ebx], 2
- .text:009AE318 jmp short loc_9AE327
- .text:009AE31A ; ---------------------------------------
- .text:009AE31A loc_9AE31A:
- .text:009AE31A mov byte ptr [ebx], 3
- .text:009AE31D jmp short loc_9AE327
- .text:009AE31F ; ---------------------------------------
- .text:009AE31F loc_9AE31F:
- .text:009AE31F mov byte ptr [ebx], 0
- .text:009AE322 jmp short loc_9AE327
- .text:009AE324 ; ---------------------------------------
- .text:009AE324 loc_9AE324:
- .text:009AE324 mov byte ptr [ebx], 0
- .text:009AE327 loc_9AE327:
- .text:009AE327 call isServer
- .text:009AE32C test al, al
- .text:009AE32E jz short loc_9AE33E
- .text:009AE330 movzx eax, byte ptr [ebx]
- .text:009AE333 sub al, 5
- .text:009AE335 jz short loc_9AE33B
- .text:009AE337 sub al, 9
- .text:009AE339 jnz short loc_9AE33E
- .text:009AE33B loc_9AE33B:
- .text:009AE33B mov byte ptr [ebx], 4
- .text:009AE33E loc_9AE33E:
- .text:009AE33E call sub_9AD494
- .text:009AE343 movzx edx, byte ptr [ebx]
- .text:009AE346 sub dl, 1
- .text:009AE349 jnb short loc_9AE35E
- .text:009AE34B cmp al, 1
- .text:009AE34D jz short loc_9AE352
- .text:009AE34F mov byte ptr [ebx], 1
- .text:009AE352 loc_9AE352:
- .text:009AE352 call isServer
- .text:009AE357 test al, al
- .text:009AE359 jz short loc_9AE35E
- .text:009AE35B mov byte ptr [ebx], 1
- .text:009AE35E loc_9AE35E:
- .text:009AE35E xor eax, eax
- .text:009AE360 pop edx
- .text:009AE361 pop ecx
- .text:009AE362 pop ecx
- .text:009AE363 mov fs:[eax], edx
- .text:009AE366 push offset loc_9AE388
- .text:009AE36B loc_9AE36B:
- .text:009AE36B lea eax, [ebp+var_14]
- .text:009AE36E call sub_4095F0
- .text:009AE373 lea eax, [ebp+var_8]
- .text:009AE376 mov edx, 2
- .text:009AE37B call sub_409650
- .text:009AE380 retn
- .text:009AE381 ; ---------------------------------------
- .text:009AE381 loc_9AE381:
- .text:009AE381 jmp loc_408B9C
- .text:009AE386 ; ---------------------------------------
- .text:009AE386 jmp short loc_9AE36B
- .text:009AE388 ; ---------------------------------------
- .text:009AE388 loc_9AE388:
- .text:009AE388 pop esi
- .text:009AE389 pop ebx
- .text:009AE38A mov esp, ebp
- .text:009AE38C pop ebp
- .text:009AE38D retn 8
- .text:009AE38D sub_9AE038 endp
Программа успешно "зарегистрирована"
Все триальные надписи пропали, по функционалу ограничений тоже больше нет, в окне "О программе" отображается техническая лицензия. Цель достигнута.
Просмотров: 1097 | Комментариев: 1
Метки: исследование защиты, HDD
Комментарии
Отзывы посетителей сайта о статье
0101
(17.01.2024 в 10:42):
Можно ещё с помощью 7z извлечь из дистрибутива x32 версию и пропатчить её, чтобы запускалась на х64 системах.
Добавить комментарий
Заполните форму для добавления комментария