нужна помощь сверхпродвинутых крякеров

Тема в разделе "WASM.RESEARCH", создана пользователем h2o, 12 сен 2005.

  1. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Я поставл бряк на FindWindowA, после первого вызова идет test eax, eax и его я заменил на jmp на код после проверок.

    Потом нашел в HEX редакторе эти байты в DCU и пропатчил их там. Все просто как три рубля.



    А что сначала сам сделал, так это очень хорошо, так как у тебя больше не возникнет вопросов "как крякнуть компоненту".
     
  2. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    Ms Rem

    спасибо что обьяснил!

    но мне всё равно не понятно:

    1. Как ты узнал что бряк на FindWindowA нужно ставить?

    2. Как ты всё это сделал? Ты установил компонент. Создал пустую форму. Вставил этот компонент на форму. а что дальше... или как?

    3. test eax, eax ты как заменил. Можно это просто Hiew сделать?
     
  3. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    я заменял

    85c075136a00 и 85c074106a00 на

    85c074136a00 и 85c075106a00

    но у меня теперь при работе из делфи эта табличка выскакивает!
     
  4. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    Ms Rem

    Там идёт так:

    1. User32.FindWindowA

    call

    jmp

    je

    push

    push

    2. User32.FindWindowA

    call

    test eax, eax

    je

    push

    push

    3. User32.FindWindowA

    call

    test eax, eax

    jne

    push

    push

    push

    push

    4. User32.MessageBoxA



    я в 2 и 3 менял: je поменял на jne,а jne на je

    а ты где менял?
     
  5. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    h2o

    учите матчасть (assembler)



    взлом программы заключается не в том чтобы что- то на что - то поменять

    а в том чтобы понять как это работает и изменить это поведение осмысленно , а не как обезьяна





    если сам понять не можешь , запости листинг из дизассемблера и тебе пояснят что и где происходит
     
  6. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    дак в W32DASM этого не сделать! от туда код не скопировать



    З.Ы. Говорили мне преподы в колледже "учи асм, и да будет тебе щастье потом", дак не верил, упирался, теперь понимаю что зря.



    вот и прошу чтобы мне пояснили на примере этого компонента, т.к. компонентов от этого производителя много и хокаются они все одинаково... остальные хоть сам взломаю!
     
  7. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    h2o

    сделай в wdasm сохранение файла () оттуда и вырежи тот участок

    в крайнем случае screenshot сделай



    а вообще пользуйся ida, хотя wdasm и быстрее для простых вещей типа этой



    даю наводку :подумай над логикой процесса



    findwindow ищет окно дельфи и если его нет то выдаёт

    User32.MessageBoxA



    так как ты поменял перехоты на противоположные то теперь

    если это окно есть , то вызывается User32.MessageBoxA



    а тебе надо чтобы он вообще не вызывался

    скорее всего один из jamp'ов

    надо заменить на безусловный или просто вставить бузусловный переход обходящий всю проверку





    как верно указывал Ms Rem
     
  8. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    Код (Text):
    1.  
    2. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    3. |:004AAA96(U)
    4. |
    5. :004AAA90 C3                      ret
    6. :004AAA91 E9FE93F5FF              jmp 00403E94 //чё это?
    7. :004AAA96 EBF8                    jmp 004AAA90 //чё это?
    8. :004AAA98 5D                      pop ebp
    9. :004AAA99 C3                      ret
    10.  
    11.  
    12. :004AAA9A 8BC0                    mov eax, eax    //я думаю тут всё началось!
    13. :004AAA9C 832D883C4B0001          sub dword ptr [004B3C88], 00000001
    14. :004AAAA3 7343                    jnb 004AAAE8        //1
    15. :004AAAA5 6A00                    push 00000000
    16.  
    17. * Possible StringData Ref from Code Obj ->"TApplication"
    18.                                   |
    19. :004AAAA7 68ECAA4A00              push 004AAAEC
    20.  
    21. * Reference To: user32.FindWindowA, Ord:0000h
    22.                                   |
    23. :004AAAAC E847C4F5FF              Call 00406EF8
    24. :004AAAB1 85C0                    test eax, eax
    25. :004AAAB3 7420                    je 004AAAD5         //2
    26. :004AAAB5 6A00                    push 00000000
    27.  
    28. * Possible StringData Ref from Code Obj ->"TPropertyInspector"
    29.                                   |
    30. :004AAAB7 68FCAA4A00              push 004AAAFC
    31.  
    32. * Reference To: user32.FindWindowA, Ord:0000h
    33.                                   |
    34. :004AAABC E837C4F5FF              Call 00406EF8
    35.  
    36. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    37. |:004AAA4B(C)
    38. |
    39. :004AAAC1 85C0                    test eax, eax
    40.  
    41. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    42. |:004AAA53(C)
    43. |
    44. :004AAAC3 7410                    je 004AAAD5          //3
    45. :004AAAC5 6A00                    push 00000000
    46.  
    47. * Possible StringData Ref from Code Obj ->"TAppBuilder"
    48.                                   |
    49. :004AAAC7 6810AB4A00              push 004AAB10
    50.  
    51. * Reference To: user32.FindWindowA, Ord:0000h
    52.                                   |
    53. :004AAACC E827C4F5FF              Call 00406EF8
    54. :004AAAD1 85C0                    test eax, eax
    55. :004AAAD3 7513                    jne 004AAAE8         //4
    56.  
    57. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
    58. |:004AAAB3(C), :004AAAC3(C)
    59. |
    60. :004AAAD5 6A00                    push 00000000
    61.  
    62. * Possible StringData Ref from Code Obj ->"Info"
    63.                                   |
    64. :004AAAD7 681CAB4A00              push 004AAB1C
    65.  
    66. * Possible StringData Ref from Code Obj ->"Application uses trial version "
    67.                                         ->"of TMS software components"
    68.                                   |
    69. :004AAADC 6824AB4A00              push 004AAB24
    70. :004AAAE1 6A00                    push 00000000
    71.  
    72. * Reference To: user32.MessageBoxA, Ord:0000h
    73.  
     
  9. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    это мой ЕХЕ с этим компонентом!



    я менял 3 и 4!, причём по одиночке не работает! только если вместе. а точнее 3 нужно изменить с je на jne, а 3-вообще на любой (кроме jne).

    я менял 1,2,3,4, пробовал разные варианты... но работает только если 3 изменить jne, а остальные, хоть какие ставь(jne, je, jmp, nop).



    дак вот где тут правильно поправить нужно... после какого test eax, eax
     
  10. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Кстати, Degisy Controls лечатся тоже очень просто: правим 1 байт в файле DsCtrls.dcu и все (там перед текстом наг-скрина надо найти п-сть 75h 13h) и поменять ее на C3h C3h
     
  11. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    h2o не пробовал включать в проект форму с названием класса TAppBuilder?



    unit AntiTrial;



    interface



    implementation

    uses windows;

    const

    WndClassName = 'TAppBuilder';



    var

    HWindow: HWnd;

    WndClass: TWndClass;

    initialization

    fillchar(wndclass, sizeof(twndclass), #0);

    with WndClass do

    begin

    style := 0;

    lpFnWndProc := @DefWindowProc;

    cbClsExtra := 0;

    cbWndExtra := 0;

    hIcon := LoadIcon(0, idi_Application);

    hCursor := LoadCursor(0, idc_Arrow);

    hbrBackground := GetStockObject(white_Brush);

    lpszMenuName := '';

    lpszClassName := WndClassName;

    end;

    wndclass.hInstance := Hinstance;

    if RegisterClass(WndClass) = 0 then

    Halt(255);

    HWindow := CreateWindowEx(0, WndClassName, 'Delphi 5 - AntiTrial',

    ws_OverlappedWindow, 0, 0, 0, 0, 0, 0, Hinstance, nil);

    finalization

    DestroyWindow(HWindow);

    UnRegisterClass(WndClassName, hinstance);

    end.
     
  12. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    сорри что на дельфе но переделывать лень

    кстати, degisy так не лечатся
     
  13. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    h2o
    Код (Text):
    1.  
    2. :004AAA9A 8BC0                    mov eax, eax    //я думаю тут всё началось!
    3. :004AAA9C 832D883C4B0001          sub dword ptr [004B3C88], 00000001
    4. :004AAAA3 7343                    jnb 004AAAE8        //1
    5.  




    скорее всего тут надо поставить

    :004AAAA3 eb43 jmps 004AAAE8 //



    тогда будет обойдена вся проверка да и всё



    byte hack :derisive:
     
  14. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    staier

    пробовал... не то это...



    Ms Rem

    ты то где хакал?
     
  15. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    да, я не внимательно посмотрел

    тогда здесь

    004AAAD3 7513 jne 004AAAE8 //4
     
  16. h2o

    h2o New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    21
    Адрес:
    Cherepovetsk
    staier

    ниже кода я написал:

    я менял 3 и 4!, причём по одиночке не работает! только если вместе. а точнее 3 нужно изменить с je на jne, а 3-вообще на любой (кроме jne).

    я менял 1,2,3,4, пробовал разные варианты... но работает только если 3 изменить jne, а остальные, хоть какие ставь(jne, je, jmp, nop).



    вот именно что по сути -

    004AAAD3 7513 jne 004AAAE8 //4

    и нужно менять...

    но работает токо если //3 и //4 поменять!



    А Ms Rem написал что он вообще процедуру обошёл, сделав выход в самом начале

    Напомню, он писал: после первого вызова идет test eax, eax и его я заменил на jmp на код после проверок.



    Дак а как это и где именно...



    004AAA9A 8BC0 mov eax, eax //записали результат

    потом

    004AAAAC E847C4F5FF Call 00406EF8 //вызвали что-то

    :004AAAB1 85C0 test eax, eax //проверили

    :004AAAB3 7420 je 004AAAD5 //2 //прыгнули

    тогда //2 надо! или я не так понял? А если //2 меняешь на любое (jne, je, jmp, nop), всё равно не работет..



    фиг знает...



    Ms Rem

    Ну где же ты? Где там верный скачек?
     
  17. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Блин, такая простая программа и столько разговоров как ее ломать. Там всего то 2 байта надо пропатчить.



    Вот полный алгоритм взлома:



    1) кинуть компонент на форму

    2) скомпилить то что получилось

    3) открыть прогу в отладчике OllyDbg

    4) поставить бряк на FindWindowA

    5) как бряк сработает, выйти из функции, и окажешся прямо на команде test eax, eax

    4) найти последний jnz (перед ret)

    5) вместо test eax, eax записать jmp на адрес взятый из jnz

    6) радоваться жизни и учить ассемблер
     
  18. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    h2o

    У тебя 2 перехода на 004AAAD5 = вызов MessageBox и 2 перехода в обход на 004AAAE8. Если вызов куска кода идет через 004AAA9A mov eax,eax то можно попробовать заменить первый переход на jmp. Если это не срабатывает, тогда железный вариант - заменить 004AAAD5 push 0 на jmp short 004AAAE8, т.е. перебить 6A00 на EB11, где 11 = 004AAAE8-004AAAD5-2
     
  19. outman

    outman New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    1
    Вышла новая версия AdvToolBar 1.3.5, старое лекарство не помогает, кто-нибудь изобрел вакцину ? Желательно для организма Delphi 2005.