В този туториал ще
разберем как plux се генерира правилния
код на keygenme-то на plux.Като за начало
включете SmarCheck-а аз въведох за име sashoo и
за парола 1234567890.Ето и какво излезе в
SmartCheck-а за процедурата при кликване на
бутона 'check': ----------------------------------------------------------------------------------------------------------------------------------------------------- Len
returns LONG:6 -->String string1("sashoo") =
00410328
VBKGM.EXE !0000419F(no debuging info)
|
---- = "sashoo" Len returns LONG:6551608 -->String
(Variant)
VBKGM.EXE !0000448C(no debuging info)
|
-----String .bstrVal = 00410328
|
---- = "sashoo" //1)-------------------------------------------------------------------------------- Mid
--> String
(variant)
VBKGM.EXE !000044D4(no debuging info)
| -----String .bstrVal = 00410328
| | |
---- = "sashoo"
|--Long length = 1 0x00000001
|--start(variant)
|
------Integer .iVal = 1 0x0001 Asc returns Integer:115 -->String
string -
004102A4
VBKGM.EXE !000044E7(no debuging info)
|
----- = "s" Hex
-->string(variant)
VBKGM.EXE !0000462F(no debuging info)
|
------Integer .iVal = 56 0x0037 //2)-------------------------------------------------------------------------------- Mid
--> String
(variant)
VBKGM.EXE !000044D4(no debuging info)
| -----String .bstrVal = 00410328
| | |
---- = "sashoo"
|--Long length = 2 0x00000002
|--start(variant)
|
------Integer .iVal = 1 0x0001 Asc returns Integer:97 -->String
string -
004102F0
VBKGM.EXE !000044E7(no debuging info)
|
----- = "a" Hex
-->string(variant)
VBKGM.EXE !0000462F(no debuging info)
|
------Integer .iVal = 47 0x002F //3)-------------------------------------------------------------------------------- Mid
--> String
(variant)
VBKGM.EXE !000044D4(no debuging info)
| -----String .bstrVal = 00410328
| | |
---- = "sashoo"
|--Long length = 3 0x00000003
|--start(variant)
|
------Integer .iVal = 1 0x0001 Asc returns Integer:115 -->String
string -
004102C8
VBKGM.EXE !000044E7(no debuging info)
|
----- = "s" Hex
-->string(variant)
VBKGM.EXE !0000462F(no debuging info)
|
------Integer .iVal = 56 0x0038 //4)-------------------------------------------------------------------------------- Mid
--> String
(variant)
VBKGM.EXE !000044D4(no debuging info)
| -----String .bstrVal = 00410328
| | |
---- = "sashoo"
|--Long length = 4 0x00000004
|--start(variant)
|
------Integer .iVal = 1 0x0001 Asc returns Integer:104 -->String
string -
004102A4
VBKGM.EXE !000044E7(no debuging info)
|
----- = "h" Hex
-->string(variant)
VBKGM.EXE !0000462F(no debuging info)
|
------Integer .iVal = 50 0x0032 //5)-------------------------------------------------------------------------------- Mid
--> String
(variant)
VBKGM.EXE !000044D4(no debuging info)
| -----String .bstrVal = 00410328
| | |
---- = "sashoo"
|--Long length = 5 0x00000005
|--start(variant)
|
------Integer .iVal = 1 0x0001 Asc returns Integer:111 -->String
string -
0041034C
VBKGM.EXE !000044E7(no debuging info)
|
----- = "o" Hex
-->string(variant)
VBKGM.EXE !0000462F(no debuging info)
|
------Integer .iVal = 54 0x0036 //6)-------------------------------------------------------------------------------- Mid
--> String
(variant)
VBKGM.EXE !000044D4(no debuging info)
| -----String .bstrVal = 00410328
| | |
---- = "sashoo"
|--Long length = 6 0x00000006
|--start(variant)
|
------Integer .iVal = 1 0x0001 Asc returns Integer:111 -->String
string -
00410304
VBKGM.EXE !000044E7(no debuging info)
|
----- = "o" Hex
-->string(variant)
VBKGM.EXE !0000462F(no debuging info)
|
------Integer .iVal = 54 0x0036 //----------------------------------------------------------------------------------- Val
returns double:9,42815e+008(displayed as single-precision floating
point) --> String string1 = 004103A4
|
------ = "&H382F38323636" //----------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------- В
началото става ясно , че се взима
дължината на въведеното име (Len
returns LONG:6), за да се
завърти после цикък за всяка негова
буква.После виждаме (Mid
--> String
(variant) ).След това взема Asc-и кода на
взетата вече буква(Asc returns
Integer).Например в началото имаме
следното: Asc returns Integer:115 -->String string -
004102A4
VBKGM.EXE !000044E7(no debuging info)
|
----- = "s" Hex -->string(variant)
VBKGM.EXE !0000462F(no debuging info)
|
------Integer .iVal = 56 0x0037 В
случея параметърът даден за функцията
Asc е буквата "s".Резултатът които се
връща от нея е 115.Това е нейния Asc-код По
доло виждаме обаче , че за параметър на
функцията Hex е дадена стойноста 56 , а
резултатът който се връща е 37. =>plux
си играя по някакъв логичен алгоритъм с
Asc-и кода на буквата , който винаги е
някакво положително цяло число.По
принцип не е много лесно да се
задалбава в API-тата на VisualBasic-а , защото
microsoft не са дали списък с тяхните
параметри :((.Затова ние ще намерим сега
просто серийния номер на нашето име.За
целта обръщаме повече внимание на
следния ред, който междо другото е и
последния в нашата процедура: Val
returns double:9,42815e+008(displayed as single-precision floating
point) --> String string1 = 004103A4 (VBKGM.EXE !000046BB(no debuging
info))
|
------ = "&H382F38323636" Val("&H382F38323636")
ще е равно в случея на 942814774.Значи
генерирания до момента сериен номер за 942814774. Сега
отваряме с IDA-та нашто keygenme и отиваме на
адрес 000046BB+Image
Base = 004046BB
. Ето
и нашия код в IDA .dbl_4011C8 dq
7.0 text:004046BB call rtcR8ValFromBstr
.text:004046C0 fmul ds:dbl_4011C8
//Умножава нашия резултат(942814774) със 7.0
.text:004046C6 lea edx, [ebp-0CCh]
.text:004046CC lea ecx, [ebp-44h]
.text:004046CF mov dword ptr [ebp-0CCh], 5
.text:004046D9 fstp qword ptr [ebp-0C4h]
.text:004046DF fnstsw ax
.text:004046E1 test al, 0Dh
.text:004046E3 jnz loc_40480C
//__vbaErrorOverflow (проверява
дали е препълнен буфера)
.text:004046E9 call __vbaVarMove
.text:004046EE lea ecx, [ebp-58h]
.text:004046F1 call __vbaFreeStr
.text:004046F6 lea ecx, [ebp-6Ch]
.text:004046F9 call __vbaFreeVar
.text:004046FE mov eax, [esi]
.text:00404700 push esi
.text:00404701 call dword ptr [eax+2FCh]
.text:00404707 push eax
.text:00404708 lea eax, [ebp-5Ch]
.text:0040470B push eax
.text:0040470C call __vbaObjSet
//Сетва TextBox-а за паролата като обект
.text:00404711 mov esi, eax
.text:00404713 lea ecx, [ebp-58h]
.text:00404716 push ecx
.text:00404717 push esi
.text:00404718 mov eax, [esi]
.text:0040471A call dword ptr [eax+0A0h]
.text:00404720 test eax, eax
.text:00404722 fnclex
.text:00404724 jge short loc_404737|---------------------------------------------------------------------------
.text:00404726 push 0A0h
|
.text:0040472B push offset dword_40293C
|
.text:00404730 push esi
|
.text:00404731 push eax
|
.text:00404732 call __vbaHresultCheckObj
//Взема текста въведен от сетнатия по
горе TextBox |
.text:00404737 loc_404737: ; CODE XREF:
.text:00404724 <-----------------------------------------------|
.text:00404737 mov eax, [ebp-58h]
.text:0040473A and dword ptr [ebp-58h], 0
.text:0040473E mov [ebp-64h], eax
.text:00404741 lea eax, [ebp-6Ch]
.text:00404744 push eax
.text:00404745 lea eax, [ebp-44h]
.text:00404748 push eax
.text:00404749 mov dword ptr [ebp-6Ch], 8008h
.text:00404750 call __vbaVarTstEq
//Сравнява генерирания до момента
сериен номер с въведения(call __vbaHresultCheckObj)
.text:00404755 lea ecx, [ebp-5Ch]
.text:00404758 mov esi, eax
//Резултатът от сравнението се записва
в ESI(SI)
.text:0040475A call __vbaFreeObj
.text:0040475F lea ecx, [ebp-6Ch]
.text:00404762 call __vbaFreeVar
.text:00404767 test si, si
//Проверява дали SI = 0(SI=0 ?)
.text:0040476A jz short loc_404771
//Aко са различни прескача на 404771 пък
иначе..
.text:0040476C call __vbaEnd
//Излиза от програмата
Сега можете да си
изкарате към 5-6 имена със съответните
пароли и да си направите keygen :)
В друг тут ще
обясня по конкретно как се revers-ва целия
алгоритъм на програма писана на VisualBasic
---------------------------------------------------------------------------------------------------------------------------------------------------- Greetingz
to
---plux------- ---stan4oo--- ---BuKo------ ---Dim_cr----
---Pumqara-- ---Nre---------
---jeux-------- ---AEX---------
---PsYcHo-----
---------------------------------------------------------------------------------------------------------------------------------------------:shade:--- Дата:
22.1о.2оо3 Автор: shade!prf Поща: sashoo@abv.bg |