Взлом VB , Self Keygen > не могу понять как присвоить

Тема в разделе "WASM.BEGINNERS", создана пользователем matador, 15 дек 2005.

  1. matador

    matador New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2005
    Сообщения:
    1
    Ребят, такая проблема. Ломаю кракми, алгоритм не сложный.

    Долго описывать не буду - тема не про то.

    Имею серийник, хочу забить этот серийник в текстовое поле. Т.е. сделать селф-кейген.



    Вопрос такой: какая функция из msvbvm60 задает значение текстового поля? Какие у нее параметры?

    __HResultCheckObject, насколько я понял, берет значение.



    Пробовал сам писать простое приложение, которое тупо присваивает значение полю. Но в дизассемблированном листинге не понятно, как он осуществляет присвоение.

    Вот весь листинг. На бэйсике:

    Sub Button1_Click()

    Text1.Text="some text"

    End Sub



    Вот листинг из Олли:



    00401AE0 > 55 PUSH EBP

    00401AE1 . 8BEC MOV EBP,ESP

    00401AE3 . 83EC 0C SUB ESP,0C

    00401AE6 . 68 96104000 PUSH <JMP.&MSVBVM60.__vbaExceptHandler> ; SE handler installation

    00401AEB . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]

    00401AF1 . 50 PUSH EAX

    00401AF2 . 64:8925 000000>MOV DWORD PTR FS:[0],ESP

    00401AF9 . 83EC 14 SUB ESP,14

    00401AFC . 53 PUSH EBX

    00401AFD . 56 PUSH ESI

    00401AFE . 57 PUSH EDI

    00401AFF . 8965 F4 MOV DWORD PTR SS:[EBP-C],ESP

    00401B02 . C745 F8 801040>MOV DWORD PTR SS:[EBP-8],Project1.004010>

    00401B09 . 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]

    00401B0C . 8BC6 MOV EAX,ESI

    00401B0E . 83E0 01 AND EAX,1

    00401B11 . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX

    00401B14 . 83E6 FE AND ESI,FFFFFFFE

    00401B17 . 56 PUSH ESI

    00401B18 . 8975 08 MOV DWORD PTR SS:[EBP+8],ESI

    00401B1B . 8B0E MOV ECX,DWORD PTR DS:[ESI]

    00401B1D . FF51 04 CALL DWORD PTR DS:[ECX+4]

    00401B20 . 8B16 MOV EDX,DWORD PTR DS:[ESI]

    00401B22 . 33FF XOR EDI,EDI

    00401B24 . 56 PUSH ESI

    00401B25 . 897D E8 MOV DWORD PTR SS:[EBP-18],EDI

    00401B28 . FF92 FC020000 CALL DWORD PTR DS:[EDX+2FC]

    00401B2E . 50 PUSH EAX

    00401B2F . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]

    00401B32 . 50 PUSH EAX

    00401B33 . FF15 18104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>; MSVBVM60.__vbaObjSet

    00401B39 . 8BF0 MOV ESI,EAX

    00401B3B . 68 20154000 PUSH Project1.00401520 ; UNICODE "some text"

    00401B40 . 56 PUSH ESI

    00401B41 . 8B0E MOV ECX,DWORD PTR DS:[ESI]

    00401B43 . FF91 A4000000 CALL DWORD PTR DS:[ECX+A4] ;скорее всего это и есть функция присваивания??????

    00401B49 . 3BC7 CMP EAX,EDI

    00401B4B . DBE2 FCLEX

    00401B4D . 7D 12 JGE SHORT Project1.00401B61

    00401B4F . 68 A4000000 PUSH 0A4

    00401B54 . 68 34154000 PUSH Project1.00401534

    00401B59 . 56 PUSH ESI

    00401B5A . 50 PUSH EAX

    00401B5B . FF15 10104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>; MSVBVM60.__vbaHresultCheckObj

    00401B61 > 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]

    00401B64 . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj

    00401B6A . 897D FC MOV DWORD PTR SS:[EBP-4],EDI

    00401B6D . 68 7F1B4000 PUSH Project1.00401B7F

    00401B72 . EB 0A JMP SHORT Project1.00401B7E

    00401B74 . 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]

    00401B77 . FF15 78104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>; MSVBVM60.__vbaFreeObj

    00401B7D . C3 RETN

    00401B7E > C3 RETN ; RET used as a jump to 00401B7F

    00401B7F > 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]

    00401B82 . 50 PUSH EAX

    00401B83 . 8B10 MOV EDX,DWORD PTR DS:[EAX]

    00401B85 . FF52 08 CALL DWORD PTR DS:[EDX+8]

    00401B88 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]

    00401B8B . 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]

    00401B8E . 5F POP EDI

    00401B8F . 5E POP ESI

    00401B90 . 64:890D 000000>MOV DWORD PTR FS:[0],ECX

    00401B97 . 5B POP EBX

    00401B98 . 8BE5 MOV ESP,EBP

    00401B9A . 5D POP EBP

    00401B9B . C2 0400 RETN 4



    Может кто может объяснить? Очень интересно забабахать селф-кейген.

    Заранее спасибо.





    ЗЫ: Не люблю бейсик
     
  2. Sharp

    Sharp New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2003
    Сообщения:
    143
    Адрес:
    Ukraine
    Код (Text):
    1. 00401B33 . FF15 18104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>; MSVBVM60.__vbaObjSet
    2. 00401B39 . 8BF0 MOV ESI,EAX
    3. 00401B3B . 68 20154000 PUSH Project1.00401520 ; UNICODE "some text"
    4. 00401B40 . 56 PUSH ESI
    5. 00401B41 . 8B0E MOV ECX,DWORD PTR DS:[ESI]
    6. 00401B43 . FF91 A4000000 CALL DWORD PTR DS:[ECX+A4] ;скорее всего это и есть функция присваивания??????


    Похоже, как будто vbaObjSet возвращает адрес vTable для объекта текстового поля, затем в он кладется в стек (указатель this) вместе с параметром, после чего вызывается элемент vTable по смещению A4.

    Достаточно помнить, что VB транслируется в Си++ и компилируется примерно так же.