Уроците на Jonie


Тема
Plus-Minus v5.60


Нужни програми
SoftIce
W32Dasm
HexEditor(HexWorkShop)


Увод

Плюс-Минус е съвременна, универсална многофирмена финансово-счетоводна
и складова програма, подходяща за водене на счетоводна отчетност с малък,
среден или голям обем.

Програмата е с пробен период след който трябва да се регистрира за да продължи
да функционира. Регистрирането става чрез стандартен диалог със сериен номер
и парола. ( Интересното е, че серийният номер се генерира възоснова на номер извлечен от  BIOS -а или твърдият диск на компютъра на който е инсталирана програмата, така че, паролата важи само за този компютър.
( Много хитро :-@ )
Затова ще потърсим по-добър начин за регистриране. Хе Хе Хе )


Начин на действие

Отваряме файла Plusmin.exe в W32Dasm и от менюто Refs избираме
String Data References ( или натискаме бутона StrnRef  ) за да потърсим
някакви интересни думички. !!??!! След известно търсене попадаме на
следното нещо: "Key" ( What is This? ) Кликваме два пъти върху него
и се озоваваме в следният участък от кода на програмата:

* Possible StringData Ref from Code Obj ->"PlusMin5"
                                  |
:005321DB BAF0375300              mov edx, 005337F0
:005321E0 E8D37EEDFF              call 0040A0B8
:005321E5 8D45E8                  lea eax, dword ptr [ebp-18]
:005321E8 50                      push eax
:005321E9 6A00                    push 00000000
:005321EB 8D8578FAFFFF            lea eax, dword ptr [ebp+FFFFFA78]
:005321F1 50                      push eax
:005321F2 8D8574FAFFFF            lea eax, dword ptr [ebp+FFFFFA74]
:005321F8 8D95A0FCFFFF            lea edx, dword ptr [ebp+FFFFFCA0]
:005321FE B900010000              mov ecx, 00000100
:00532203 E8481EEDFF              call 00404050
:00532208 8B9574FAFFFF            mov edx, dword ptr [ebp+FFFFFA74]

* Possible StringData Ref from Code Obj ->"Key" <--- ключето от бараката
                                  |
:0053220E B904385300              mov ecx, 00533804
:00532213 8B45A4                  mov eax, dword ptr [ebp-5C]
:00532216 8B18                    mov ebx, dword ptr [eax]
:00532218 FF13                    call dword ptr [ebx]

Много интересно. Ако скролираме малко по-нагоре попадаме на следният код:

* Referenced by a CALL at Addresses:
|:004EE33F   , :004F12CF   
|
:00531F04 55                      push ebp
:00531F05 8BEC                    mov ebp, esp
:00531F07 B9CD000000              mov ecx, 000000CD
:00531F0C 6A00                    push 00000000
:00531F0E 6A00                    push 00000000
:00531F10 49                      dec ecx
:00531F11 75F9                    jne 00531F0C
:00531F13 53                      push ebx
:00531F14 56                      push esi
:00531F15 57                      push edi
:00531F16 8945FC                  mov dword ptr [ebp-04], eax
:00531F19 33C0                    xor eax, eax
:00531F1B 55                      push ebp
:00531F1C 686A375300              push 0053376A
:00531F21 64FF30                  push dword ptr fs:[eax]
:00531F24 648920                  mov dword ptr fs:[eax], esp
:00531F27 C645FB00                mov [ebp-05], 00
:00531F2B 8D85A0FBFFFF            lea eax, dword ptr [ebp+FFFFFBA0]

* Possible StringData Ref from Code Obj ->"trust\mn\all"
                                  |
:00531F31 BA88375300              mov edx, 00533788
:00531F36 E87D81EDFF              call 0040A0B8
:00531F3B 8D85A0FAFFFF            lea eax, dword ptr [ebp+FFFFFAA0]

* Possible StringData Ref from Code Obj ->"slent\nt\pen\1"
                                  |
:00531F41 BAA0375300              mov edx, 005337A0
:00531F46 E86D81EDFF              call 0040A0B8

* Possible Reference to String Resource ID=00002: "”  !" ”          "    "    ” ? "
                                  |
:00531F4B C705B80A5E0002000000    mov dword ptr [005E0AB8], 00000002
:00531F55 33C0                    xor eax, eax
:00531F57 A3BC0A5E00              mov dword ptr [005E0ABC], eax
:00531F5C 33C0                    xor eax, eax
:00531F5E A3C00A5E00              mov dword ptr [005E0AC0], eax
:00531F63 C605C40A5E0001          mov byte ptr [005E0AC4], 01
:00531F6A A178EB5D00              mov eax, dword ptr [005DEB78]
:00531F6F 8B00                    mov eax, dword ptr [eax]
:00531F71 E82A93F7FF              call 004AB2A0

* Possible StringData Ref from Code Obj ->"Win.INI"
                                  |
:00531F76 B9B8375300              mov ecx, 005337B8
:00531F7B B201                    mov dl, 01
:00531F7D A128514700              mov eax, dword ptr [00475128]
:00531F82 E84932F4FF              call 004751D0


Както изглежда, програмата явно търси някакъв ключ ( номер ) в Win.INI файла.
Време е ( за една бира ) да направим някой и друг номер номер в SICE.
Както се вижда, кода по-горе се извиква от 2 места в програмата:
адрес 004EE33F  и адрес 004F12CF   

За целта чрез SimbolLoader на SoftIce стартираме Plusmin.exe и
поставяме 2 прекъсвания: BPX 004EE33F и BPX 004F12CF след което
излизаме от SICE ( X, F5 или Ctrl+D )и програмата ( Плюс-Минус )
продължава изпълнението си.След като се появи диалога за свързване
към сървъра, натискаме бутона "добре" и SICE прекъсва изпълнението
на програмата на адрес: 004EE33F
За да избегнем извикването на процедурата от този адрес, въвеждаме
следната команда:
R EIP=004EE344 ( Enter ) и излизаме от SICE ( F5 )
Програмата се стартира  без изискването на сериен номер и парола.
Както изглежда вече програмата не се нуждае от регистриране :-+
Остава ни само малко работа с HexWorkShop.
За да премахнем извикването на процедурата от адрес 004EE33F може
просто да заменим кода: E8C03B0400 CALL 00531F04 със 9090909090 , но
"по- елегантния" начин е да променим началото на подпрограмата на адрес:
00531F04 от 55 push ebp   на  С3 RET ( автоматично връщане )
За целта отваряме файла Plusmin.exe в HexWorkShop, натискаме F5  и
въвеждаме: 131304 ( ОК ) и променяме 55 на С3
С това този урок приключва.


Надявам се да ви бъда полезен с представения урок и ако имате  някакви
въпроси относно него или за нещо друго можете да ми пишете  на адрес: horrorscop@excite.com

 

Hosted by uCoz